0

在我构建的表单上,使用 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 页面就无法处理付款(它还包含付款处理组件)

我在这里是否遗漏了一些可以处理付款但未显示在数据库中的东西?

非常感谢您的帮助

4

2 回答 2

1

您需要查看mysqli 准备好的语句

您只是在获取变量时使用它们,这是一个坏主意。但除了 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')";

你看到那里的问题了吗?字符串中的 ' 会终止该字段,并且引用值后面的逗留字符串是语法错误,这将导致您的查询失败。

如果你绑定参数,你可以让 mysqli 转义输入值:

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

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

于 2013-05-15T01:05:06.280 回答
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."')");
于 2013-05-15T00:51:51.500 回答