0

有人告诉我我需要转义 $_POST 但是一旦我这样做了,我的变量就是空的。我错过了什么?

<?php
$order = $_POST['order'];
$heading = $_POST['heading'];
$content = $_POST['content'];
?>

<?php
echo $order . $heading . $content;

$order = mysqli_real_escape_string($order);
$heading = mysqli_real_escape_string($heading);
$content = mysqli_real_escape_string($content);
?>
<?php
echo $order . $heading . $content;

$sql="INSERT INTO faq (`order`, `heading`, `content`)
VALUES ('$order','$heading','$content')";

if (!mysqli_query($con,$sql))
  {
  die('Error: ' . mysqli_error($con));
  }
echo "1 record added";
4

3 回答 3

3

抱歉——我今天早上一定睡着了。这是我们应该早点发现的。

您的原始代码实际上存在两个问题:

  1. 由于您正在使用这些mysqli_*功能,因此您需要使用mysqli_real_escape_string()而不是mysql_real_escape_string()最初在您的问题中使用的功能。您已经在问题中纠正了这一点,但这可能导致我们忽略了第二个问题。

  2. mysqli_real_escape_string()接受与 不同的参数mysql_escape_string(),并且第一个参数需要是连接标识符。如果您将代码更改为此,它应该可以工作:

    $order = mysqli_real_escape_string($con, $order);
    $heading = mysqli_real_escape_string($con, $heading);
    $content = mysqli_real_escape_string($con, $content);
    

正如许多评论指出的那样,您可能还想研究使用准备好的语句

虽然您现在拥有的代码不受 SQL 注入的影响,但预准备语句的优点是自动内置转义,您不必记住每次执行查询时都转义变量。

于 2013-06-28T02:48:14.567 回答
0

在您将 real_escape_string 归咎于问题之前。检查是否有任何值。

foreach($_POST = $Name => $Value) {
     echo $Name.' '.$Value.'<br />';
}
于 2013-06-27T21:15:48.907 回答
0

您可能没有mysqli在您的 PHP 配置中启用。检查你phpinfo()的发现。信息在这里

如有必要,启用它。PDO但是,无论如何,更改为的建议都是好的。

此外,假设您不在生产服务器上,请确保您已设置要显示的错误。对故障排除至关重要。

如果mysqli未启用,则会导致致命错误。无论您的显示设置如何,都可能显示。但是,在您弄清楚这一点时,请配置显示的错误。

于 2013-06-27T23:13:41.353 回答