Pregunta

He usado un tutorial aquí: http://www.phpeasystep.com/phptu/26.html Para crear un formulario de inicio de sesión para mi sitio web. He establecido el campo UpasSword en mi base de datos para ser MD5 y todas las contraseñas de la base de datos están encriptadas con MD5.

El inicio de sesión funciona perfectamente, sin embargo, estoy un poco confundido sobre la creación de un formulario de registro.

El formulario solicita que un usuario ingrese la contraseña deseada. Estoy un poco confundido sobre cómo tomaré la contraseña que ingresa el usuario, convirtiéndola en MD5 y luego ingresaré la contraseña MD5 en el campo UPASSWORD en la tabla del usuario.

A continuación se muestra el código que tengo para el archivo ProcessResgistration.php:

/* Database connection info*/
mysql_select_db("dbname", $con);

$encryptedpassword = md5($_POST['uPassword']);

md5($uPassword);

$sql="INSERT INTO users (uName, uPassword, uSurname, uFirstName)
VALUES
('$_POST[uName]','$encryptedpassword','$_POST[uSurname]','$_POST[uFirstName]'";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "Account created.  You can now login";

mysql_close($con)
?>

Se supone que el código anterior debe:

  • Crear una variable llamada CiencedPassword
  • Use Upassword como CiencedPassword
  • Convierta la contraseña encriptada a MD5
  • Ingrese la contraseña MD5 en la tabla de usuarios como upassword

Estoy seguro de que no he usado una variable correcta en alguna parte, o he cometido un error simple con mi sintaxis; ¡Se agradece mucho cualquier comentario/ayuda!

Gracias Chris M

¿Fue útil?

Solución

Usted codifica algo de validación y escape, más como esto:

<?php

/* Database connection info */
mysql_select_db("dbname", $con);

if ($_REQUEST['METHOD'] == 'POST') {
    $uName = filter_input(INPUT_POST, 'uName');
    $uPassword = filter_input(INPUT_POST, 'uPassword');
    $uSurname = filter_input(INPUT_POST, 'uSurname');
    $uFirstName = filter_input(INPUT_POST, 'uFirstName');

    // do some validation here ...

    // if everything OK, then crypte the password
    $hashedPassword = md5($uPassword);

    // and store it

    $sql = sprintf(
        'INSERT INTO users (uName, hashedPassword, uSurname, uFirstName)
         VALUES (%s, %s, %s, %s);',
            mysql_real_escape_string($uName, $con),
            mysql_real_escape_string($hashedPassword, $con),
            mysql_real_escape_string($uSurname, $con),
            mysql_real_escape_string($uFirstName, $con)
    );

    if (!mysql_query($sql,$con)) {
        die('Error: ' . mysql_error());
    }

    mysql_close($con);
    echo "Account created.  You can now login";
}

?>

Ahora para iniciar sesión

<?php

if ($_REQUEST['METHOD'] == 'POST') {
    $uName = filter_input(INPUT_POST, 'uName');
    $uPassword = filter_input(INPUT_POST, 'uPassword');
    $hashedPassword = md5($uPassword);

    $sql = sprintf(
        'SELECT * FROM users WHERE uName = "%s" AND hashedPassword = "%s" LIMIT 1',
            mysql_real_escape_string($uName, $con),
            mysql_real_escape_string($hashedPassword, $con),
        );

    // etc etc ...
}
?>

Otros consejos

/* Database connection info*

No cerraste correctamente tu comentario allí. Agrega un / Al final de la línea.

Ah, y MD5 es inseguro. Use Sha1 en su lugar. O incluso mejor, use SHA1 salado.

También debe comenzar a escapar de todas las entradas del usuario que está poniendo en su base de datos utilizando mysql_real_escape_string() o Pequeñas mesas de Bobby Se divertirá mucho con su base de datos.

/* Información de conexión de base de datos*/

 mysql_select_db("dbname", $con);

$encryptedpassword = md5($_POST['uPassword']);

$sql="INSERT INTO users (uName, uPassword, uSurname, uFirstName)
VALUES
('$_POST[uName]','$encryptedpassword','$_POST[uSurname]','$_POST[uFirstName]')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "Account created.  You can now login";

mysql_close($con)
?>

El cierre del soporte es el problema en la consulta

('$_POST[uName]','$encryptedpassword','$_POST[uSurname]','$_POST[uFirstName]'";

Esto necesita un cierre ' ) '

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top