每当我重新加载网站时,都要防止php / mysqli脚本运行

时间:2013-11-20 14:15:07

标签: php mysql mysqli

我正在尝试将我的脚本从MySQL更新到MySQLI,但我遇到了一些问题。 问题是,每次我重新加载我的网站时,它都会在数据库中添加一个新行,因为这就是它所告诉的内容。 我的脚本看起来像这样:

<?php
$con=mysqli_connect("localhost","USERNAME","PASSWORD","test");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$sql="INSERT INTO test (name, content)
VALUES
('$_POST[name]','$_POST[content]')";

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

mysqli_close($con);
?>
<html>
<body>

<form action="mysqli.php" method="post">
Name: <input type="text" name="name">
Content: <input type="text" name="content">
<input type="submit">
</form>

</body>
</html>

感谢您的帮助:)

3 个答案:

答案 0 :(得分:2)

添加对POST数据的检查。一个非常简单的可能是:

if( $_POST['name'] && $_POST['content'] ){
    $sql="INSERT INTO test (name, content)
    VALUES
    ('$_POST[name]','$_POST[content]')";

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

通过添加此检查,只有在发送表单数据时才会执行查询。

答案 1 :(得分:0)

通常当我的表单和可执行函数在同一页面上时,我会执行andrewsi建议并检查我的变量是否用isset()设置但是我还在表单中包含一个隐藏字段,类似于< / p>

<input type="hidden" name="clicked" value="clicked" />

并在页面加载时检查此变量:

if(isset($_POST["clicked"]) && $_POST["clicked"] == "clicked"))
{...}

它让我对页面加载有了更多的控制,以防表单字段中存在一些挥之不去的值等。

答案 2 :(得分:0)

在发布值

时添加支票
<input type="Submit" name="Add">

然后在PHP代码中检查是否单击了提交按钮,然后输入记录

if(isset($_POST['Add']))  // checking if Submit button was clicked 
{
  $sql="INSERT INTO test (name, content) VALUES ('$_POST[name]','$_POST[content]')";
}

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