【问题标题】:data is not inserted into mysql database but code runs without error数据未插入mysql数据库但代码运行没有错误
【发布时间】:2016-08-25 09:20:06
【问题描述】:

我正在尝试将表单数据插入mysql数据库但它没有插入到表中并且没有错误!

这是我的代码

<?php
$con = mysqli_connect('localhost', 'root', '', 'register');

if (isset($_POST['submit'])) {
  $shop = $_POST['shopname'];
  $name = $_POST['name'];
  $user = $_POST['username'];
  $email = $_POST['email'];
  $password = $_POST['password'];
  $repassword = $_POST['repassword'];
  $phone = $_POST['phone'];
  $sql = "INSERT INTO registration (shop_name,name,username,email,password,repassword,phone) VALUES  ('$shop','$name''$user','$email','$password','$repassword','$phone')";
  if (mysqli_query($con, $sql)) {
    echo "Signup Sucessfull";
  } else {
    echo mysqli_error();
  }
}
?>

我该如何解决这个问题?

【问题讨论】:

  • 那么,“注册成功” 消息来了吗?
  • 除您的问题外,在数据库中存储密码和重复密码是没有意义的。在您的 PHP 中进行比较,如果不匹配则失败,如果匹配则只存储一次。另外,不要以纯文本形式存储密码,使用password API 对其进行哈希处理,并使用prepared statements 来消除您当前的SQL 注入风险。

标签: php mysql html


【解决方案1】:

原来你忘了在名字后面加逗号。

'$name''$user'   // Missing comma in between

另外,它应该是 mysqli_error($con) 而不是 mysqli_error()

尝试一些调试:

$sql = "INSERT INTO registration (shop_name,name,username,email,password,repassword,phone) VALUES  ('".$shop."','".$name."', '".$user."','".$email."','".$password."','".$repassword."','".$phone."')";

mysqli_query($con, $sql) or die(mysqli_error($con));

【讨论】:

  • 我在两个变量之间加了逗号,但它没有解决我的问题,它仍然运行没有任何错误,但没有保存到数据库中
【解决方案2】:

您似乎在插入值之间错过了“,”。这段代码可以正常工作。

<?php
$con = mysqli_connect('localhost', 'root', '', 'register');

if (isset($_POST['submit'])) {
  $shop = $_POST['shopname'];
  $name = $_POST['name'];
  $user = $_POST['username'];
  $email = $_POST['email'];
  $password = $_POST['password'];
  $repassword = $_POST['repassword'];
  $phone = $_POST['phone'];
  $sql = "INSERT INTO registration (shop_name,name,username,email,password,repassword,phone) VALUES  ('".$shop."','".$name."','".$user."','".$email."','".$password."','".$repassword."','".$phone."')";
  if (mysqli_query($con, $sql)) {
    echo "Signup Sucessfull";
  } else {
    die(mysqli_error($con));
  }
}
?>

【讨论】:

    【解决方案3】:

    是的,正如已经 @ObjectManipulator 指出你的愚蠢错误 在'$name''$user'附近。

    我强烈建议您使用mysqli_prepare 来避免 SQL 注入。

    <?php
    $con = mysqli_connect('localhost', 'root', '', 'register');
    if (isset($_POST['submit'])) {
    
      $stmt = mysqli_prepare($con, "INSERT INTO registration (shop_name,name,username,email,password,repassword,phone) VALUES (?, ?, ?, ?,?, ?, ?)");
      mysqli_stmt_bind_param($stmt, 'sssssss',$_POST['shopname'],$_POST['name'],$_POST['username'],$_POST['email'],$_POST['password'],$_POST['repassword'],$_POST['phone']);
    
      if (mysqli_stmt_execute($stmt)) {
        echo "Signup Sucessfull";
      } else {
        echo mysqli_error($con);
      }
    }
    ?>
    

    而且,正如 @JonStirling 建议不要以纯文本形式存储密码 并使用任何Password API 来加密密码。

    有很多方法可以加密您的密码。使用其中任何一个。现在,我用md5() 说明了这一点。

    还有,为什么要将passwordrepassword 存储在数据库表中。在将用户数据存储到数据库表中时,请检查密码和重新密码是否匹配。

    只是一个建议。由您来选择。

    <?php
    $con = mysqli_connect('localhost', 'root', '', 'register');
    if (isset($_POST['submit'])) {
    
      if(isset($_POST['password']) && isset($_POST['repassword']) && ($_POST['password'] == $_POST['repassword'])){
        $stmt = mysqli_prepare($con, "INSERT INTO registration (shop_name,name,username,email,password,phone) VALUES (?, ?, ?, ?, ?, ?)");
        mysqli_stmt_bind_param($stmt, 'ssssss',$_POST['shopname'],$_POST['name'],$_POST['username'],$_POST['email'],md5($_POST['password']),$_POST['phone']);
    
        if (mysqli_stmt_execute($stmt)) {
          echo "Signup Sucessfull";
        } else {
          echo mysqli_error();
        }
      } else {
        echo "Password must match.";
      }
    }
    ?>
    

    【讨论】:

    • md5不推荐用于密码加密。此哈希已被反复破坏并且速度太快。改用 PHP password_hash
    • 我是 php 新手,我只想将数据存储到数据库中,是的,我将存储加密密码而不是纯文本
    • 使用此代码后也没有插入数据库@Ashutosh?
    【解决方案4】:
    else {
        echo mysqli_error($con);
      }
    

    问题解决了。您忘记了 MySQL 错误输出的连接详细信息 $con。现在,这将从您的查询中正确输出您的 MySQL 语法错误。


    其他说明:

    • 为 MySQLi 使用准备好的语句 (link)
    • 使用正确的密码散列算法,例如Password_hash。不要使用 MD5(它太快并且有太多冲突)并且从不 将密码存储为明文。
    • 使用 POSTed 变量上的各种 filter_Var 来清理它们并确保捕获任何无效数据(例如不正确的电子邮件地址)

    【讨论】:

      【解决方案5】:

      在您的 sql 查询中添加逗号,如下所示

       $sql = "INSERT INTO registration (shop_name,name,username,email,password,repassword,phone)VALUES  
      ('$shop','$name','$user','$email','$password','$repassword','$phone')";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多