New question

Question:

Date: 16-06-2018 16:47:16 (In Spanish)

Orientar sobre un SELECT desde PHP[Unresolved]

hola comunidad muy buenas noches desde venezuela...
mi pregunta es la siguiente:
tengo un form de ingreso los cuales paso por metodo POST a otro archivo.php los recibo y los mando a imprimir con echo. todo bien mientras consulto y todo a la BD, pero cuando quiero comparar el usuario y la clave solo me compara el usuario y no la clave. les dejo el codigo a ver que me recomiendan.
<?php
   
    
    $host = "";
    $user = "";                     
    $pass = "";                                  
    $db = "";                                 
    $port = ;                                
    
    $connection = mysqli_connect($host, $user, $pass, $db, $port)or die(mysql_error());

	$usuario = $_POST["usuario"];// aqui recibo los datos del form
	$clave = md5($_POST["clave"]);

    
    $query = "SELECT * FROM usuarios";
    $result = mysqli_query($connection, $query);

    while ($row = mysqli_fetch_assoc($result)) 
    {
    	if($row['usuario']=== $usuario && $row['clave']=== $clave  )//solo este if es el q compara
    	    {
    			echo '<SCRIPT LANGUAGE="javascript">location.href = "inicio.php";</SCRIPT>';
    			
    		}elseif ($row['usuario']!= $usuario && $row['clave']!= $clave  )
    			{
    				echo '<SCRIPT LANGUAGE="javascript">location.href = "index.php";</SCRIPT>';
    			 }
        	
    }

?>
Tags: MySQL - PHP - Query - Question - SQL Votes: 0 - Answers: 3 - Views: 15 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 16-06-2018 21:40:23 Estas haciendo unas cuantas cositas mal:

    1.- No estas haciendo un where en tu query para filtrar la data
    2.- No estas sanitizando la data que llega por post
    3.- No deberias de utilizar MD5 para tus claves
    4.- No es necesario un while sy solo buscas validar la data de un solo usuario, de alli el where en la query

    Podrias crear las claves con la siguiente funcion:

    function claveusuario($X){
    		$salt = substr(base64_encode(openssl_random_pseudo_bytes('30')), 0, 22);
    		$salt = strtr($salt, array('+' => '.'));
    		$hash = crypt($X, '$2y$10$' . $salt);
    		$claveB = $hash;
    		return $claveB;
    	}//END
    


    y la consulta seria algo mas o menos asi:

    $db = new mysqli($host, $user, $pass, $db);
                $a = $db->query("SELECT * FROM usuarios WHERE usuario = '$user'");
                $t = mysqli_num_rows($a);
                if($t==1){
                    $row = $a->fetch_object();
                    if(password_verify($clave, $row->clave)){
                        //ejecuto todo lo que valla a hacer si la clave coincide
                    }
                }
    


    Con el where en tu query validando el usuario no es necesario colocarlo en una condición, solo basta con validar ahora la clave, pues si llegas a ese punto es porque el usuario existe.

    Y las redirecciones ejecutalas directamente desde php:

    header('location:inicio.php');
    


    No es necesario colocar allí javascript si no piensas mostrar ningún error en esa pantalla.
      Votes: 2 - Link answer
     
  • Date: 17-06-2018 15:01:27 gracias por tu colaboracion.   Votes: 1 - Link answer
     
  • Date: 20-06-2018 06:50:52 Carlos Quintero, me hiciste recordar algo que leí alguna vez y nunca probé XD

    Que se recomendaba hacer un die() o return; luego de un header('location:inicio.php'); ya que eso en si hace un redirect y un usuario podría modificar su navegador para no seguirlo y continuar con la ejecución de la pagina (en una situación donde no se permita continuar usando el header location).

    Alguien tiene una opinión al respecto?

    Saludos :)
      Votes: 0 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In