PHP表单似乎并不总是写入数据库

时间:2013-05-09 09:33:09

标签: php mysql sql

在我构建的表单上,使用Javascript spry验证验证表单,然后将其发送到php表单,该表单使用POST方法提取post字段。

然后有一个sql查询,如下所示将数据提交到数据库。

$title = $_POST["title"];
$first_name = $_POST["first_name"];
$surname = $_POST["surname"];
$address1 = $_POST["address1"];
$address2 = $_POST["address2"];
$town = $_POST["town"];
$county = $_POST["county"];
$country = $_POST["countries"];
$telephone_home = $_POST["telephone-home"];
$telephone_mobile = $_POST["telephone-mobile"];
$comments = $_POST["comments"];
$letter = $_POST["q1-letter"];
$updates = $_POST["q1-updates"];
$paye = $_POST["PAYE"];

//establish connection
$con= mysqli_connect("localhost","#######","###########","############"); 
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  } 


mysqli_query($con,"INSERT INTO wp_donations (prefix, first_name, second_name, amount, address1, address2, citytown, county, country, email, comments, letter, updates, paye)
    VALUES ('$title','$first_name','$surname','$amount2','$address1','$address2','$town','$county','$country','$email','$comments','$letter','$updates','$paye')");
mysqli_close($con);

?>

现在大多数情况下,这似乎工作得非常好,而且我所做的任何测试都能正常工作。但是,我的客户端报告表格中没有显示数据库中的条目。此表单用于处理付款,客户端使用数据库中的信息和付款处理器日志交叉检查付款。

我不能为我的生活弄清楚它们中的一些可能不会出现在数据库中,因为没有办法通过这个php页面处理付款(它还包含付款处理组件) )

我在这里可能会遗漏一些可以处理付款但却没有显示在数据库中的内容吗?

我们非常感谢您的帮助

2 个答案:

答案 0 :(得分:1)

您需要查看mysqli prepared statements

你只是在获得它们时使用变量,这是一个坏主意。但是除了sql注入的可能性之外,让我们看看一个基本的例子,我相信你的情况正在发生的事情:

$x = $_POST['x'];

$sql = "INSERT INTO `table` (`address`) VALUES ('$x')";

现在让我们假设$x1234 Captain's Creek rd

您的查询现在将如下所示:

$sql = "INSERT INTO `table` (`address`) VALUES ('Captain's Creek rd')";
你知道那里有问题吗?字符串中的''终止该字段,并且跟踪引用值的延迟字符串是语法错误,这将导致查询失败。

如果你bind the parameters,你可以让mysqli转义输入值:

$sql = $mysqli->prepare("INSERT INTO `table` (`address`) VALUES (?)");
$sql->bind_param("s", $x);
$sql->execute();

如果您有任何问题请随时提出,我可能会更新。

答案 1 :(得分:0)

您需要连接变量

喜欢这个......

mysqli_query($con, "INSERT INTO wp_donations (prefix, first_name, second_name, amount, address1, address2, citytown, county, country, email, comments, letter, updates, paye)
                                      VALUES ('".$title."','".$first_name."','".$surname."','".$amount2."','".$address1."','".$address2."','".$town."','".$county."','".$country."','".$email."','".$comments."','".$letter".','".$updates."','".$paye."')");