由于md5,db中的空白字段?

时间:2015-04-13 17:46:03

标签: php mysql md5

我有一个用户注册表单,即使我在<input>字段中输入非空文本,我发现在提交表单时,在数据库中创建的新行中的对应字段本身为空(密码和哈希字段除外)。

我认为有两件事是关键:

  1. 这是因为我实施了 md5
  2. 这只发生在实时网站上。使用 Xampp 进行测试时,它可以正常工作。
  3. 具体来说,在send.php

    <form action="receibe.php" method="post">
      <input type="text" name="nombre" placeholder="Nombre" required/>
      <input type="text" name="apellido" placeholder="Apellido" required/>
      <input type="tel" name="telefono" placeholder="TelÈfono (opcional)" />
      <input type="email" name="correo" placeholder="Correo @" required/>
      <input type="text" name="usuario" placeholder="Usuario" required />
      <input type="password" name="clave" placeholder="Clave" required/>
      <input type="submit" value="Registrarme" class="boton_enviar">
    </form>
    

    然后在receive.php

    if(!empty($_POST['nombre'])) { $nombre=mysql_real_escape_string($_POST['nombre']); }
    if(!empty($_POST['apellido'])) { $apellido=mysql_real_escape_string($_POST['apellido']); }
    if(!empty($_POST['correo'])) { $correo=mysql_real_escape_string($_POST['correo']); }
    if(!empty($_POST['telefono'])) { $telefono=mysql_real_escape_string($_POST['telefono']); }
    if(!empty($_POST['usuario'])) { $usuario=mysql_real_escape_string($_POST['usuario']); }
    if(!empty($_POST['clave'])) { $clave=mysql_real_escape_string($_POST['clave']); }
    
    $hash = md5( rand(0,1000) );
    
    include("connection.php");
    
    $consultar_usuario=mysql_query("SELECT usuario FROM registro WHERE usuario='$usuario'", $conectar);
    
    if (mysql_num_rows($consultar_usuario)==0) {
        mysql_query("INSERT INTO registro (nombre, apellido, correo, telefono, usuario, clave, hash) VALUES('$nombre', '$apellido', '$correo', '$telefono', '$usuario', '". md5($clave) ."', '$hash')", $conectar); }
    

    因此,在数据库中创建的新行中空白的字段是与 nombre apellido telefono 对应的字段, correo usuario Clave 代表密码。

    免责声明:通过对以前帖子的研究,我没有找到这个具体问题的答案(也不是一个足够接近的问题)。我知道不再推荐 md5 ,但我现在只对修复此特定技术问题感兴趣。

1 个答案:

答案 0 :(得分:1)

您不需要isset()!empty()只需使用!empty()。你也不需要mysql_string_escape()两次。改变这一点,看看。它与md5()无关,但无论如何都应该更改为sha1()

更好的方法是构建SQL字符串以反映可用数据。由于您已将$ _POST字段明确命名为与数据库字段相同的字段,因此可以执行以下操作。

$insert = "INSERT INTO `registro`(";
$values = "VALUES(";
foreach($_POST as $field=>$value){
    $insert.="`".$field."`,"; //add a field 
    $values.="'".mysql_escape_string($value)."',"; //add a value
}
$insert = rtrim($insert,",").") "; //get rid of extra comma and close brackets
$values = rtrim($values,",").")"; //do same

$sql=$insert.$values;//use $sql in your query
echo $sql;//run it into phpmyadmin to test

这对学习有好处,但是如果你的代码正在投入生产(正如一些评论员所说的那样)你应该使用一个框架或库来解决所有这些问题,并且做得比我好。以上。

如果这不起作用,请通过在脚本顶部执行print_r($_POST)来更新显示$ _POST内容的帖子。在我们看到实际发送到脚本的内容之前,很难调试。