【问题标题】:The data from the php form is not inserting into databasephp表单中的数据未插入数据库
【发布时间】:2014-11-25 18:10:46
【问题描述】:

表单和代码工作没有任何问题,表单数据由于某种原因没有插入数据库。我已经尝试过更改 INSERT INTO 部分,但它不起作用。

if ($_POST['submit']){

if (!$_POST['email']) $error.="<br />please enter your email";
else if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) $error.="<br />please enter valid email address";

if(!$_POST['password']) $error.="<br />please enter your password";
else {

    if(strlen($_POST['password'])<8) $error.="<br />please enter password with 8";
    if (!preg_match('`[A-Z]`', $_POST['password'])) $error.="<br />please include at least one captial letter";
}
if ($error) echo "<br />There were errors in your singup details".$error;
else{
    $link = mysqli_connect("localhost", "root", "root", "test");
    $query="SELECT * FROM users WHERE email='".mysqli_real_escape_string($link, $_POST['email'])."'";
    $result = mysqli_query($link,$query);
    $result = mysqli_num_rows($result);

    if ($result) echo"That email already resgitered";
    else{
        $query= "INSERT INTO `users` (`email`, `password`) VALUES ('".mysqli_real_escape_string($_POST['email'])."','".md5(md5($_POST['email'].$_POST['password']))."')";


     mysqli_query($link, $query);
     echo "Signed up!";


    }
}
}

【问题讨论】:

  • 警告:使用mysqli 时,您应该使用参数化查询和bind_param 将用户数据添加到您的查询中。 请勿使用字符串插值来完成此操作,因为您将创建严重的SQL injection bugs。您还紧急需要阅读proper password handling procedures,因为即使是最粗略的审核,使用 MD5 也会自动失败。
  • 这是错误的'".md5(md5($_POST['email'].$_POST['password']))."' - 将or die(mysqli_error($link)) 添加到mysqli_query()
  • 在你打开&lt;?php标签error_reporting(E_ALL); ini_set('display_errors', 1);之后在文件顶部添加错误报告,看看它是否产生任何东西。
  • 如果向查询中添加硬值,脚本会将值插入数据库中?
  • 您希望用户如何使用经过 MD5 处理的电子邮件地址登录?你将不得不重新考虑这一点。

标签: php mysql database forms login


【解决方案1】:

试试这个:

$query = sprintf("INSERT INTO `users` (`email`, `password`)
                            VALUES ('%s', '%s')"
              ,mysqli_real_escape_string($link,$_POST['email'])
              ,mysqli_real_escape_string($link,md5(md5($_POST['email'].$_POST['password']))));
mysqli_query($link, $query);

希望对你有用。

【讨论】:

  • 我通过打开 phpmyadmin 并转到“更多”选项卡并选择“变量”子菜单找到了解决方案。向下滚动以找到 sql 模式。编辑 sql 模式并删除 'STRICT_TRANS_TABLES' 保存。谢谢
【解决方案2】:

在 phpmyadmin 上更多设置,然后从那里单击变量,然后滚动到 sql 模式并删除“STRICT_TRANS_TABLES”保存。

【讨论】:

    猜你喜欢
    • 2014-04-04
    • 2012-11-10
    • 2019-10-04
    • 2019-05-18
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-20
    相关资源
    最近更新 更多