【问题标题】:Doesn't save form fields to database不将表单字段保存到数据库
【发布时间】:2014-11-17 11:20:26
【问题描述】:

我使用 PHP 和 Jquery 将数据保存到 MySQL 数据库中的形式很简单。它适用于我的本地开发环境,但是在推送生产时,它会将字段添加到 db 表中,但不会保存任何输入数据(姓名、电子邮件、电话)。在本地一切正常,它保存了所有信息。哪里可能有问题?这也是保存数据的安全方式吗?我是否遗漏了一些额外的输入字段检查?

这里是 jQuery 部分:

$('.js-form').submit(function() {
        $.ajax({
            type: "POST",
            data: $(this).serialize(),
            url: "process.php",
            success: function (response) {
                alert('form success');
            },
            error: function (response) {
               alert('form error');
            }
        });
doSomethingAfterForm();
        return false;
    });

和process.php

    <?php

include_once('connection.php');

if (mysqli_connect_errno()) :
    echo "Failed to connect to database";
endif;

$name = $_POST['name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
if (!empty($_SERVER['HTTP_CLIENT_IP'])) :
    $ip = $_SERVER['HTTP_CLIENT_IP'];
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) :
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
else :
    $ip = $_SERVER['REMOTE_ADDR'];
endif;

$name = mysql_real_escape_string($name);
$email = mysql_real_escape_string($email);
$phone = mysql_real_escape_string($phone);
$ip = mysql_real_escape_string($ip);

$sql = "INSERT INTO entries (name, email, phone, ip) VALUES ('$name', '$email', '$phone', '$ip')";

if (!mysqli_query($con,$sql)) :
    die('Error');
endif;

mysqli_close($con);

?>

连接.php

<?php
$db_host = 'localhost';
$db_username = '******';
$db_pass = '*******';

$con = mysqli_connect("$db_host","$db_username","$db_pass") or die ("could not connect to mysql"); 
mysqli_select_db($con, "my") or die ("no database");   


?>

PHP错误日志显示:

PHP 警告:mysql_real_escape_string():到服务器的链接可能 不成立于/

【问题讨论】:

  • dev 和 live 的表字段的数据类型一样吗?
  • 检查您的 php 信息:您正在使用 -> mysql_real_escape_string 函数。您的网络域有 mysql 和 mysqli 驱动程序吗?编辑:也就是说,如果变量在查询之前有值,您是否检查过生产?将变量放入 $sql 后尝试打印?
  • 正如 lix 所说,将其放在评论中
  • 嗯,我在 php 信息中看到 mysql_ 和 mysql_ 都有套接字。但是php错误日志显示:PHP Warning: mysql_real_escape_string(): A link to the server could not be established in..
  • @MixedVeg 是的,数据类型在 dev 和 live 上是相同的。数据库和文件是彼此的精确副本。

标签: php mysql ajax forms


【解决方案1】:
<form>
 <input type="text" id="name" name="name">
 <input type="text" id="email" name="email">
 <input type="text" id="phn" name="phone">
 <input type="submit" value="submit" id="submit">
</form>

<script>
 $(document).ready(function(){
   $("#submit").click(fucntion(e){
          $.ajax({
          type: "POST",
          data: { name : $("#name").val(),email: $("#email").val()
                 , phone: $("#phn").val()},
          url: "process.php",
          success: function (response) {
            alert('form success');
          },
          error: function (response) {
           alert('form error');
          }
       });
       doSomethingAfterForm();
       e.preventDefault();
     });
  });
 </script>

这是您的解决方案。用这个就行了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    相关资源
    最近更新 更多