【发布时间】: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 上是相同的。数据库和文件是彼此的精确副本。