【问题标题】:Connect to mySQL server from PHP and JQuery从 PHP 和 JQuery 连接到 mySQL 服务器
【发布时间】:2015-08-05 02:41:16
【问题描述】:

晚上好。在 HTML、CSS、JS、PHP 等方面,我完全是新手,所以我需要一些帮助,尤其是一些 PHP 和 JQuery。

我正在尝试从 HTML 表单提交一封简单的电子邮件。这是发生这种情况的 HTML/JQuery sn-p:

<form action="" id="emailform" name="emailform">
          <input type="email" class="form-control" name="email_submit_field" id="email_submit_field" placeholder="type your email here">
          <input id="email_submit_button" class="btn btn-default" role="button" type="submit" value="Submit"></input>
</form>
<script>    
    $("form").submit(function(event){
            event.preventDefault();
            $.post("email.php", $("#emailform").serialize());
    });
</script>

从那里,它应该打开email.php。上帝知道它是否做得对,请告诉我。但无论如何,一旦它进入email.php,它的目标是将该电子邮件值发布到在 localhost 上运行的 mySQL 数据库。这是我必须完成的 PHP:

<?php

$dbname = "test";
$host = "localhost";
$usr = "root";
$pass = "password"; //obviously not, but you get the point

$email = $_POST["email_submit_field"];

$cxn = new mysqli($host, $usr, $pass, $dbname);

$query = "INSERT INTO emails VALUES('$email')";
mysqli_query($query);
mysqli_close();
?>

我对所有这些的最大问题是,似乎每个教程都以不同的方式做到这一点,没有一个对我有用。长话短说,mySQL 数据库从不接收数据,我也不知道为什么。感谢您提供任何和所有帮助,希望有人可以帮助我了解如何(以简单且一致的方式)通过 PHP 访问 mySQL 数据库。提前谢谢你。

【问题讨论】:

    标签: javascript php jquery html mysql


    【解决方案1】:

    您忘记了要插入的值是哪一列(或表?)。

    INSERT INTO emails (column_name) VALUES('$email')
    

    应该是这样

    INSERT INTO table_name (emails) VALUES ('$email')
    

    检查您的语法。像使用 mysql_* 一样使用 mysqli_* 时,您应该在执行查询时包含您的连接变量,在您的示例中为 $cxn

    mysqli_query($cxn, $query);
    

    此外,至少使用*_real_escape_string 来清理值并防止出现一些SQL injections

    $email = mysqli_real_escape_string($cxn, $_POST["email_submit_field"]);
    

    但如果你使用mysqli prepared statement 会更好。你可以参考这个:

    if($stmt = $cxn->prepare("INSERT INTO emails (column_name) VALUES (?)")){ /* CHECK IF THE QUERY IS TRUE */
      $stmt->bind_param("s",$_POST["email_submit_field"]); /* BIND THE VARIABLE TO YOUR QUERY */
      $stmt->execute(); /* EXECUTE THE QUERY */
      $stmt->close();
    }
    

    对于您的脚本,您希望在不刷新页面的情况下提交表单,对吗?那么,在这种情况下,您应该使用AJAX

    <script>    
        $(document).ready(function(){
          $("#email_submit_button").click(function(e){ /* WHEN THE BUTTON IS CLICKED OR THE FORM IS SUBMITTED */
            e.preventDefault(); /* STOP THE PAGE FROM REFRESHING */
            var email = $("#email_submit_field").val(); /* STORE THE VALUE OF THE EMAIL FIELD */
            var dataString = "email="+email; /* STORE THE EMAIL TO A DATA STRING */
            $.ajax({ /* CALL AJAX */
              type: "POST",
              url: "email.php", /* SUBMIT THE DATA TO THIS PAGE */
              data: dataString,
              success: function(data){
                $("#email_submit_field").val(""); /* EMPTY THE EMAIL FIELD */
              }
            });
            return false;
          });
        });
    </script>
    

    【讨论】:

    • 哇!这是相当的回应。几个小时后,在很多帮助下,我终于设法让它工作了。感谢您帮助我,尤其是 AJAX 部分。
    【解决方案2】:

    您将过程函数与面向对象混合。而且您还忘记在查询中标记字段。我不知道您的表格是什么样子,但我假设它有一个字段“Field_1”。

    试试这个 OO 风格:

    $cxn = new mysqli($host, $usr, $pass, $dbname);
    
    $query = "INSERT INTO emails (`Field_1`) VALUES('$email')";
    $cxn->query($query);
    $cxn->close();
    

    或者全部改成程序化

    $cxn = mysqli_connect($host, $usr, $pass, $dbname);
    if (mysqli_connect_errno($cnx)) {
       trigger_error('Database connection failed: '  . mysqli_connect_error(), E_USER_ERROR);
    }
    $query = "INSERT INTO emails (`Field_1`) VALUES('$email')";
    $result = mysqli_query($cxn, $query)
    

    更多关于mysqlihere的信息。

    【讨论】:

    • 我很确定用一个值绑定两个列字段会导致这个错误Column count doesn't match value count at row 1
    • 不用担心。顺便说一句,我不是 OP。
    • 感谢您的回复!我还在学习 PHP 和所有的东西,所以我成功地将 OO 和程序混为一谈并不感到惊讶。不过,您的回复非常有帮助,谢谢。
    【解决方案3】:

    我认为您需要更改此代码:

    mysqli_query($query);
    mysqli_close();
    

    到这里:

    $cxn->query($query);
    

    【讨论】:

      【解决方案4】:

      找到了,希望对你有帮助:

      // Check connection
      if ($cxn->connect_error) {
          die("Connection failed: " . $cxn->connect_error);
      } 
      
      $sql = "INSERT INTO emails VALUES('$email')";
      
      if ($conn->query($sql) === TRUE) {
          echo "New record created successfully";
      } else {
          echo "Error: " . $sql . "<br>" . $conn->error;
      }
      
      $cxn->close();
      ?>
      

      在这里更好地解释:http://www.w3schools.com/php/php_mysql_insert.asp

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-24
        • 2013-03-06
        • 1970-01-01
        • 2015-01-22
        • 1970-01-01
        • 2012-04-02
        • 2013-03-24
        相关资源
        最近更新 更多