【问题标题】:MySQL query insert success but return falseMySQL查询插入成功但返回false
【发布时间】:2016-05-13 12:05:26
【问题描述】:

问题是..我尝试从 php 解析 json..这里是 jquery 代码:

$.post( "confirmsignup.php", $("#signupform").serialize()).always(function( data ) {
    alert(data.msg);
}, "json");

PHP 代码:

if (isset($_POST['gender'])&&isset($_POST['fname'])&&isset($_POST['sname'])&&isset($_POST['username'])&&isset($_POST['dob'])) {
    $gender=secureing($_POST['gender']);
    $fname=secureing($_POST['fname']);
    $sname=secureing($_POST['sname']);
    $username=secureing($_POST['username']);
    $email=secureing($_POST['email']);
    $dob=secureing($_POST['dob']);
    if (isset($_POST['agree'])&&isset($_POST['pass'])&&isset($_POST['repass'])) {
        $pass=secureing($_POST['pass']);
        if ($_POST['pass']==secureing($_POST['repass'])) {
            $query = "INSERT INTO users VALUES('$username', '$gender', '$fname', '$sname', '$email', '".md5($pass)."', '$dob')";
            if(!($query_run = mysql_query($query))){
                $msg = "error";
            }else{
                $msg = "complete";
            }
        }
    }
}
header('Content-Type: application/json');
?>
{
"msg": "<?php echo $msg ." - ". $query; ?>"
}

secureing() 用于在 escape_string 之后返回字符串.. $msg 假设返回字符串“完成”......但它返回“错误”...... 但是在phpmyadmin中,查询成功执行..

我认为没有错误..我的错误是什么?请帮助..

【问题讨论】:

  • 你为什么不检查真正的错误?
  • 你没有从你的 php 脚本返回或回显任何东西来传递到你的 js 文件中!!
  • 1.不要手动构建 json,使用 json_encode(),2. 不要使用已弃用的 mysql_* 函数,3. 永远不要使用 md5() 来散列密码。
  • 我在最后一行回显了 $msg 并返回到 jquery.post().done() 回调的警报消息...我尝试回显 mysql_error 但它什么也没返回...
  • @jeroen 感谢您的建议...但是为什么我不能使用 md5 来散列密码?

标签: php jquery mysql json ajax


【解决方案1】:

很久以前我也有同样的问题!

那是因为你的表中没有任何 AI 主键!

在表格中添加这样的字段:idINTPrimary KeyAuto Increment。 这将有效!

并迁移到 mysqli 或 pdo 以获得更好的安全性和支持! ;)

【讨论】:

    【解决方案2】:

    你能把下面的代码改成你的代码吗,我用mysql_insert_id检查记录是否插入。

    $query = "INSERT INTO users VALUES('$username', '$gender', '$fname', '$sname', '$email', '".md5($pass)."', '$dob')";
    $query_run = mysql_query($query);
    $id        = mysql_insert_id();
    if($id > 0)
    {
        $msg = "complete";
    }
    else
    {
        $msg = "error";
    }
    

    也许对你有帮助。

    【讨论】:

    • @Fadhil 请添加主键并为该字段设置自动增量,它将为您工作。
    【解决方案3】:

    试试我的代码好像你放错了条件

    if (isset($_POST['gender'])&&isset($_POST['fname'])&&isset($_POST['sname'])&&isset($_POST['username'])&&isset($_POST['dob'])) {
        $gender=secureing($_POST['gender']);
        $fname=secureing($_POST['fname']);
        $sname=secureing($_POST['sname']);
        $username=secureing($_POST['username']);
        $email=secureing($_POST['email']);
        $dob=secureing($_POST['dob']);
        if (isset($_POST['agree'])&&isset($_POST['pass'])&&isset($_POST['repass'])) {
            $pass=secureing($_POST['pass']);
            if ($_POST['pass']==secureing($_POST['repass'])) {
                $query = "INSERT INTO users VALUES('$username', '$gender', '$fname', '$sname', '$email', '".md5($pass)."', '$dob')";
                if(!(mysql_query($query))){
                    $msg = "error";
                }else{
                    $msg = "complete";
                }
            }
        }
    }
    

    【讨论】:

      【解决方案4】:

      我刚刚找到了解决方案,将我的 php API 更改为连接到数据库后。
      来自:

      if(!@mysql_connect('localhost', 'root', '')||!@mysql_select_db('knewit')){
          die("something not right");
      }
      

      到:

          $mysqli = new mysqli("localhost", "root", "", "knewit");
      

      之后,我将执行方法从 mysql_query 更改为 $mysqli-&gt;query
      我还将我的 jquery 发布方法从 always 更改为 done。 最终的代码是这样的。
      jQuery 脚本:

      $.post( "confirmsignup.php", $("#signupform").serialize()).done(function( data ) {
                      alert(data.msg);
                  }, "json");
      

      PHP 脚本:

              if (isset($_POST['agree'])&&isset($_POST['pass'])&&isset($_POST['repass'])) {
              $passs=secureing($_POST['pass']);
              if ($_POST['pass']==secureing($_POST['repass'])) {
                  $query = "INSERT INTO users VALUES('$username', '$gender', '$fname', '$sname', '$email', '$passs', '$dob')";
                  if(!($query_run = $mysqli->query($query))){
                      $msg = "error";
                  }
                  else
                  {
                      $msg = "complete";
                  }
              }
          }
      }
      header('Content-Type: application/json');
      $arrayName = array('msg' => $msg );
      echo json_encode($arrayName);
      

      感谢您回答我的问题。我真的很感激。

      【讨论】:

        猜你喜欢
        • 2017-03-03
        • 2016-09-26
        • 1970-01-01
        • 2018-10-05
        • 1970-01-01
        • 2019-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多