Validar usuario existente

Cuando preparo esta consulta, quiero que en el if se valide si el usuario existe o no, y para eso uso "mysqli_num_rows()". El problema es que si lo hago sin preparar la consulta, metiendo la consulta a pelo (está comentada en el código), funciona. Pero preparándola no tengo muy claro cómo es.

El error que me da es este:

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, object given in C:\wamp\www\servidor...\validacion.php on line 36

código conexion_bd.php:

<?php

	session_start();

	$db_conexion="localhost";
	$db_usuario="root";
	$db_pass="";
	$db_nombre="ciclos";

	//Conexión con mysqli procedural
	$conexion=mysqli_connect($db_conexion, $db_usuario, $db_pass, $db_nombre);

	mysqli_set_charset($conexion, "utf8");

	if(!$conexion) {

		die("Error de conexión: " . mysqli_connect_error());
	}
?>

Y el código:

<?php

	require_once("conexion_bd.php");

	//Validar usuario con mysqli procedural
	if(isset($_POST["entrar"])){

		$_SESSION["usuario"]=$_POST["usuario_entrar"];
		$_SESSION["contra"]=$_POST["contra_entrar"];

		$usuario_entrar=$_SESSION["usuario"];
		$contra_entrar=$_SESSION["contra"];

		if($usuario_entrar=="" || $contra_entrar=="") { 

				echo("<script type='text/javascript'>alert('Erro.')</script>");

		}else{


			//$resultado_entrar1=mysqli_query($conexion, "SELECT * FROM usuarios WHERE usuario='$usuario_entrar' AND contrasenha='$contra_entrar'");
			$resultado_entrar=mysqli_prepare($conexion, "SELECT usuario, contrasenha FROM usuarios WHERE usuario=? AND contrasenha=?");
			mysqli_stmt_bind_param($resultado_entrar, "ss", $usuario_entrar, $contra_entrar);
			mysqli_execute($resultado_entrar);
			mysqli_stmt_bind_result($resultado_entrar, $usuario_entrar, $contra_entrar);
			//mysqli_close($resultado_entrar);
			//mysqli_close($conexion);

			if ($resultado_entrar===false){

				printf("Error: %s\n", mysqli_error($conexion));
				die();

			}else{

				$verificacion_entrar=mysqli_num_rows($resultado_entrar);


				if($verificacion_entrar>0){

					header('Location: contenido.php');

				}else{

					echo("Usuario o contraseña incorrectos.");
				}
			}
		}
	}
?>
1
задан 01.12.2016, 00:58
4 ответа

Я продолжил бы учебник PHP и изменил бы некие вещи, как mysqli_execute ($ resultado_entrar) из-за mysqli_stmt_execute ($ resultado_entrar), так как это прозвище устаревшее, и если ты обновляешь PHP, эта линия осталась бы непригодной, проверь это здесь. Также он использовал бы mysqli_stmt_num_rows ($ resultado_entrar) вместо mysqli_num_rows ($ resultado_entrar) и перед этим mysqli_stmt_store_result ($ resultado_entrar) учебник mysqli_stmt_num_rows

Я надеюсь, что он этому помогает.

0
ответ дан 24.11.2019, 12:19
  • 1
    Так как sí неудача была этой, который ты только что прокомментировал. Решенный тогда. Большое спасибо! – Jopimar 01.12.2016, 01:06

Поскольку я вижу, Ты Нуждаешься в утверждении Login, я надеюсь, что он подает тебе того, который использовал//Формуляр Верительных грамот

    <form action="php/comprobar.php" method="POST" enctype="multipart/form-data">
      <div class="modal-body">
        <div id="div-login-msg">
           <div id="icon-login-msg" class="glyphicon glyphicon-chevron-right"></div>
           <span id="text-login-msg">Ingrese Sus Datos de Acceso</span>
        </div>
            <input id="usuario_nombre" name="usuario_nombre" class="form-control" type="number" placeholder="Numero de Empleado" required><br>
            <input id="usuario_clave" name="usuario_clave" class="form-control" type="password" placeholder="Apellido Paterno" required>
          <div class="checkbox">
             <label>
                 <input type="checkbox"> Recordar
             </label>
          </div>
      </div>
        <div class="modal-footer">
          <div>
            <input type="submit" class="btn btn-primary btn-lg btn-block" name="ingresar" value="Ingresar">
          </div>
        </div>
    </form>

Файл Утверждения

<?php

        session_start();
        include('conexion.php');
        if(isset($_POST['ingresar']))
           {
              if(empty($_POST['usuario_nombre']) || empty($_POST['usuario_clave']))
              {
                  echo "El usuario o la contraseña no han sido ingresados. <a href='javascript:history.back();'>Reintentar</a>";
              }
            else
            {
                  $usuario_nombre = mysqli_real_escape_string($cn,$_POST['usuario_nombre']);
                  $usuario_clave = mysqli_real_escape_string($cn,$_POST['usuario_clave']);
                  $usuario_nombre= md5($usuario_nombre); //En esta parte Encripto los datos de Acceso
                  $usuario_clave = md5($usuario_clave);
                  $sqlprofesor = mysqli_query($cn,"SELECT usuario_id, usuario_numero, usuario_apellido FROM usuarios WHERE usuario_numero='".$usuario_nombre."' AND usuario_apellido='".$usuario_clave."'");
                  if($row = mysqli_fetch_array($sqlprofesor))
                  {
                  $_SESSION['admin'] = $row['usuario_id'];
                  $_SESSION['admin'] = $row["usuario_numero"];
                  $_SESSION['last_login_timestamp'] = time();
                  $usuario=$row["usuario_numero"];
                  echo "<script> alert('Acceso Correcto');window.location.href = '../admin'</script>";
              }
                else
                    {
                echo "<script> alert(' Error Reintentar');window.location.href = '../index.php'</script>";
                }
          }
        }
        else
          {
              echo "<script> alert(' Error Reintentar');</script>";
            header("Location: ../index.php");
        }
    ?>

Чтобы санкционировать каждый из Формуляров

<?php
include("../php/conexion.php");
session_start();
 if(isset($_SESSION['admin'])) {
   if (!isset($_SESSION["admin"]) || $_SESSION["admin"] == "") {
 redirect("../php/logout.php");
 }
?>

В этом сообщении твой код, если пользователь ввел информацию в компьютер правильно

 <?php 
  }else {
  header("Location: ../index.php");
  }
  ?>
0
ответ дан 24.11.2019, 12:19
  • 1
    используй mysqli с готовыми решениями, лучшим PDO, не используй md5 () и есть algú n, что другой неудачи в tú có я говорю – Black Sheep 01.12.2016, 00:00
  • 2
    @aldanux Я Соглашаюсь с тобой в готовых setencias, но потому что не MD5? – Omar Barrera Valentin 01.12.2016, 00:01
  • 3
    Потому что он небезопасный... читать má s лучше использует password_hash – Black Sheep 01.12.2016, 00:04
  • 4
    @aldanux Большое спасибо. я прочитал файл, надеюсь смочь издавать мой ответ с использованием Хранившихся Процедур – Omar Barrera Valentin 01.12.2016, 00:06
  • 5
    @Jopimar...... – Omar Barrera Valentin 01.12.2016, 00:27

Пробуй с $verificacion_entrar = $resultado_entrar->num_rows(); вместо $verificacion_entrar=mysqli_num_rows($resultado_entrar); Раньше tambiГ©n это: $resultado_entrar->bind-param("ss".... и потом $resultado_entrar->execute()

0
ответ дан 24.11.2019, 12:19
  • 1
    Уже probé и уже он не прыгает ningú n ошибка, warning ни совсем не, но также не выполняется condició n if. Происходи с else прямо. – Jopimar 30.11.2016, 23:39
  • 2
    Попробуй с новым, что agregué. Я думаю, что ты должен относиться к этому с ориентируемый или объекты – Garrizano 01.12.2016, 01:11

Используйте объект mysqli

<?php

    session_start();

    $db_conexion="localhost";
    $db_usuario="root";
    $db_pass="";
    $db_nombre="ciclos";

    // Crea conexion.
    $conexion= new mysqli($db_conexion, $db_usuario, $db_pass, $db_nombre);

    // Checkear conexion.
    if($conexion->connect_error) {
        die("Error de conexión: " . $conexion->connect_error);
    }
?>

<?php

    require_once("conexion_bd.php");

    //Validar usuario con mysqli procedural
    if(isset($_POST["entrar"])){

        $_SESSION["usuario"]=$_POST["usuario_entrar"];
        $_SESSION["contra"]=$_POST["contra_entrar"];

        $usuario_entrar=$_SESSION["usuario"];
        $contra_entrar=$_SESSION["contra"];

        if($usuario_entrar=="" || $contra_entrar=="") { 

                echo("<script type='text/javascript'>alert('Erro.')</script>");

        }else{


            //$resultado_entrar1=mysqli_query($conexion, "SELECT * FROM usuarios WHERE usuario='$usuario_entrar' AND contrasenha='$contra_entrar'");
            $resultado_entrar = $conexion->prepare("SELECT usuario, contrasenha FROM usuarios WHERE usuario=? AND contrasenha=?");
            $resultado_entrar->bind_param("ss", $usuario_entrar, $contra_entrar);
            $resultado_entrar->execute();
            //mysqli_close($resultado_entrar);
            //mysqli_close($conexion);

            $resultado_entrar->store_result();

            if ($resultado_entrar===false){
                die("Error: " . $conexion->connect_error);
            }else{

                $verificacion_entrar = $resultado_entrar->num_rows;


                if($verificacion_entrar>0){

                    header('Location: contenido.php');

                }else{

                    echo("Usuario o contraseña incorrectos.");
                }
            }
        }
    }

Оно ты было бы должно функционировать. Я попытался в моей машине и функционируй.

0
ответ дан 24.11.2019, 12:19