我有一个用户注册表单,即使我在<input>
字段中输入非空文本,我发现在提交表单时,在数据库中创建的新行中的对应字段本身为空(密码和哈希字段除外)。
我认为有两件事是关键:
具体来说,在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 ,但我现在只对修复此特定技术问题感兴趣。
答案 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内容的帖子。在我们看到实际发送到脚本的内容之前,很难调试。