2013-11-20 29 views
-4

我正在尝试将我的脚本从MySQL更新到MySQLI,但我遇到了一些问题。 问题是,每次我重新加载我的网站时,它都会在数据库中添加一个新行,因为这就是它的要求。 我的脚本是这样的:防止php/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> 

感谢所有帮助:)

+5

为什么不检查,看看您的POST变量设置,并且只运行SQL,如果它们是? – andrewsi

+0

究竟哪里出了问题? –

+1

这个问题如何与mysql相关? –

回答

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

好的答案,但我认为这个问题存在于这个问题中,他说他从MySQL转移到了MySQLi,然后问题开始了 - 我不明白这是怎么回事,当时他显然缺乏一个简单的检查数据是否被张贴 – nrathaus

+0

谢谢!完美的作品! –

+2

@nrathaus,完全同意。我也认为,经验丰富的人并不总是使用stackoverflow;他们往往没有足够的经验来充分解释自己。所以,有时候,我认为我们应该尝试理解(或者甚至猜测)OP的想法。也许还给他们一个关于如何制定最好的下一个问题的反馈.. –

0

通常当我有我的表单和一个可执行的函数在同一个页面时,我会执行andrewsi建议的操作,并检查要使用isset()设置的变量,但我也在表单本身中包含一个隐藏字段,类似于

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

,并在网页加载时我检查这个变量:

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

它给了我的情况下,在页面加载更多一点的控制有一个在表单字段一些挥之不去的价值等

0

在PHP代码检查添加一个检查,当你张贴的价值

<input type="Submit" name="Add"> 

这时如果被点击提交按钮,然后输入记录

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"; 
} 
相关问题