¿Se puede decir que quien escribe esto sabe programar?
Hace tiempo escribí la entrada No está mal, funciona, en la que mostraba la actitud de algunos alumnos a los que sólo les importa que su código funcione, no se molestan en pensar si el código está realmente bien o mal.
Para que lo entienda todo el mundo, es algo parecido a “excrivir un testo con faltas de hortografia”. Se entiende, ¿verdad? Pues está bien, diría alguno de mis alumnos.
Recientemente, mis alumnos (tercer curso) tenían que escribir un código en PHP para permitir el acceso de un usuario a la parte privada de una aplicación web: el típico login con nombre de usuario y contraseña. Más de un alumno (¿un 20%?) escribió lo siguiente o algo parecido:
$sentencia = "SELECT * FROM Usuarios"; $resultado = mysqli_query($link, $sentencia); while($fila = mysqli_fetch_assoc($resultado)) { // $_POST["user"] y $_POST["password"] provienen del formulario de login if($fila["User"] == $_POST["user"] && $fila["Password"] == $_POST["password"]) { $_SESSION["Id"] = $fila["Id"]; $_SESSION["Name"] = $fila["Name"]; } } if(!empty($_SESSION["Id"])) { // Redirección página principal parte privada } else { // Redirección página principal parte pública }
No nos fijemos en que no hay ninguna comprobación de los posibles errores que pueden ocurrir… eso es muy importante, pero no es lo que quiero destacar. ¿Cuál es el problema principal de este código?
Para un ojo educado en la programación, el código anterior es como “ber uvo escrito sin ache y con ube”.
Yo creo que hace consultas innecesarias a la base de datos en el caso de estar autorizado, otra cosa que hace es seleccionar en bruto toda la tabla en vez de poner alguna condición where utilizando los parámetros post.
Puesto que el id de usuario se supone que si existe es único, teóricamente la consulta debería devolver una sola fila y evitaría tener que ser recorrido con un bucle.
Muchas gracias por el curso que tiene online. Ya me hubiera gustado tenerle como profesor cuando estudié.
Un saludo cordial.