Ir al contenido


Foto

duda con el musql_num_rows

php

  • Por favor identifícate para responder
4 respuestas en este tema

#1 Richi

Richi

    Advanced Member

  • Miembros
  • PipPipPip
  • 83 mensajes

Escrito 19 julio 2017 - 03:40


php
  1. <?php
  2. include 'serv.php';
  3. if(isset($_POST['login'])){
  4. $usuario = $_POST['user'];
  5. $pw = $_POST['pass'];
  6. $log = mysql_query("SELECT * FROM usuarios WHERE user='$usuario' AND pass='$pw'");
  7. if (mysql_num_rows($log)>0) {
  8.  
  9. $row = mysql_fetch_array($log);
  10.  
  11. $_SESSION["user"] = $row['user'];
  12. $_SESSION["rol"]=$row['rol'];
  13.  
  14. if ($_SESSION["rol"]==2){
  15.  
  16. echo 'Iniciando sesión para '.$_SESSION['user'].' <p>';
  17. echo '<script> window.location="index1.php"; </script>';
  18. }elseif ($_SESSION["rol"]==1) {
  19. echo 'Iniciando sesión para '.$_SESSION['user'].' <p>';
  20. echo '<script> window.location="index2.php"; </script>';
  21. }
  22. }
  23. else{
  24. echo '<script> alert("Usuario o contraseña incorrectos.");</script>';
  25. echo '<script> window.location="index.php"; </script>';
  26. }
  27. }
  28. ?>

el detalle es que cuando lo hago me lanza un Warning: mysql_num_rows() expects aparameter 1 to be resource, boolean given in...

 

Lo que no entiendo bien es que utilizo el mismo para otros proyectos y funciona correctamente.


  • 0

#2 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 19 julio 2017 - 04:12

Mi experiencia con PHP no es mucha, pero por lo pronto, lo que veo y que podría estar afectando es que estás armando mal el string de la consulta. Debería ser algo así:


php
  1. $log = mysql_query("SELECT * FROM usuarios WHERE user='". $usuario ."' AND pass='". $pw ."'");

Por cierto, yo evaluaría que fuera un único usuario. Así como tienes la evaluación si el conjunto de datos regresa 1+ también pasa la prueba.

Es cierto que es poco probable que pueda devolverse más de un usuario, pero es mejor prevenir que lamentar.

Y además, sugiero que el contenido que viene desde el $_POST haya sido previamente escapeado para prevenir injección SQL. Aquí hay algo más de info.

 

Saludos,


  • 0

#3 Richi

Richi

    Advanced Member

  • Miembros
  • PipPipPip
  • 83 mensajes

Escrito 19 julio 2017 - 04:49

ya esta, el error era interno jaja


  • 0

#4 Richi

Richi

    Advanced Member

  • Miembros
  • PipPipPip
  • 83 mensajes

Escrito 19 julio 2017 - 04:50

Mi experiencia con PHP no es mucha, pero por lo pronto, lo que veo y que podría estar afectando es que estás armando mal el string de la consulta. Debería ser algo así:


php
  1. $log = mysql_query("SELECT * FROM usuarios WHERE user='". $usuario ."' AND pass='". $pw ."'");

Por cierto, yo evaluaría que fuera un único usuario. Así como tienes la evaluación si el conjunto de datos regresa 1+ también pasa la prueba.

Es cierto que es poco probable que pueda devolverse más de un usuario, pero es mejor prevenir que lamentar.

Y además, sugiero que el contenido que viene desde el $_POST haya sido previamente escapeado para prevenir injección SQL. Aquí hay algo más de info.

 

Saludos,

uff buenisimo voy a revisarlo para aplicarlo (y) muchas gracias


  • 0

#5 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 19 julio 2017 - 05:29

ya esta, el error era interno jaja

 

Sería de ayuda para otros usuarios con la misma o similar duda que nos puedas comentar como es que encontraste el problema y diste con la solución.

 

uff buenisimo voy a revisarlo para aplicarlo (y) muchas gracias

 

No hay de qué. Lo de Injección de código es una práctica que hay que considerar y no muchos las tenemos en cuenta.

Por cierto, también sería bueno que vayas empezando la transición a usar mysqli o bien PDO_MySQL ya que a partir de PHP 5.5 la API myql_* está considerada obsoleta y marcada como deprecated. Más aún, en realidad es considerada insegura. Si el sitio lo alojas en un hosting con servers con PHP 5+ y (por sobre todo) si estás usando MySQL 4.1.3+ (mysql sólo funciona para 4.1.3- y para las posteriores no cuentas con algunas funcionalides nuevas) con más razón deberías pensar en emplear estas nuevas APIs.

No es un cambio muy brusco (al menos para mysqli), sólo es cuestión de adaptarse.

 

Para practicar e ir aprendiendo puedes seguir haciendo las cosas a la "vieja escuela" tal como lo vienes haciendo. Pero para un proyecto en grande, serio, y por sobre todo seguridad, lo mejor es adoptar lo nuevo y recomendado. Hay quienes consideran que es mejor PDO que mysqli... Al menos así lo dejan entrever algunos comentarios de algunos especialistas a los que suelo leer en las redes. Esto no te lo sabría asegurar, al igual que tu también hago uso de la api originaria mysql_* ya que en mi trabajo me encargo de mantener un sistema hecho con esta, pero para proyectos nuevos están usando mysqli.

 

Saludos,


  • 0





Etiquetado también con una o más de estas palabras: php

IP.Board spam blocked by CleanTalk.