Validate existing user

1

When I prepare this query, I want it to validate if the user exists or not, and for that I use "mysqli_num_rows ()". The problem is that if I do it without preparing the query, putting the query to hair (it is commented in the code), it works. But preparing it I'm not sure how it is.

The error that gives me is this:

  

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

conexion_bd.php code:

<?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());
	}
?>

And the code:

<?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.");
				}
			}
		}
	}
?>
    
asked by Jopimar 30.11.2016 в 22:15
source

4 answers

0

I would follow the PHP manual and change certain things, like mysqli_execute ($ result_entry) by mysqli_stmt_execute ($ result_entry) since that alias is obsolete and if you update PHP, that line would be useless, check it here . I would also use mysqli_stmt_num_rows ($ result_entry) instead of mysqli_num_rows ($ result_entry) and before this mysqli_stmt_store_result ($ result_entry) manual mysqli_stmt_num_rows

I hope that helps.

    
answered by 30.11.2016 / 23:11
source
0

From what I see, you need a login validation, I hope you use the one I use // Credentials Form

    <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>

Validation File

<?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");
        }
    ?>

To validate each of the Forms

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

In this part, your code if the user entered correctly

 <?php 
  }else {
  header("Location: ../index.php");
  }
  ?>
    
answered by 30.11.2016 в 22:50
0

Try with $verificacion_entrar = $resultado_entrar->num_rows(); instead of $verificacion_entrar=mysqli_num_rows($resultado_entrar); Before you also do this: $resultado_entrar->bind-param("ss".... and then $resultado_entrar->execute()

    
answered by 30.11.2016 в 22:32
0

Use the mysqli object

<?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.");
                }
            }
        }
    }

It should work. I tried on my machine and it works.

    
answered by 30.11.2016 в 23:27