PHP初学者在教程中工作。我正在尝试从PHP表单到MySQL数据库进行简单的上传。表单正确上传,但每次页面刷新时,它都会重复上一次上传,从而创建重复的条目。您可以看到我的工作页面here。
您可以看到我正在尝试收到评论“谢谢!产品已添加!”在提交时吐在桌子上方,但我承认当我点击“提交”时我对确切发生的事情感到困惑...现在它总是显示确认消息!我已经在下面的表单中包含了PHP代码。
提前致谢!
麦克
<div id="form">
<h1 class="green">UPLOAD TO TABLE 'manufacturer'</h1>
<?php
$con = mysql_connect($host,$user,$pass);
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("thenally_productdump", $con);
$sql="INSERT INTO manufacturer (manu_name, manu_product_type, manu_product_description, manu_website)
VALUES
('$_POST[manufacturer]','$_POST[product]','$_POST[description]','$_POST[website]')";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "Thank you! Product Added!";
mysql_close($con);
?>
<form action="" method="post">
<table>
<tr>
<td class="form-table-left"><b>Manufacturer: </b> </td>
<td class="form-table-right"><input type="text" name="manufacturer" size=50></td>
</tr>
<tr>
<td class="form-table-left"><b>Product Type:</b></td>
<td class="form-table-right"><input type="text" name="product" size=50></td>
</tr>
<tr>
<td class="form-table-left"><b>Product Description: </b></td>
<td class="form-table-right"><textarea name="description" rows=5 cols=40></textarea></td>
</tr>
<tr>
<td class="form-table-left"><b>Manufacturer Website: </b></td>
<td class="form-table-right"><input type="text" name="website" value="http://" size=50></td>
</tr>
<tr>
<td class="submit"><input type="submit" name="submit" value="Add Product !"></td>
</tr>
</table>
</form>
</div>
答案 0 :(得分:2)
您尚未检查POST是否确实发生过。这意味着每次加载页面时都会触发表单处理代码,即使没有提交表单也是如此。 PHP中的基本一体化表单处理具有以下结构:
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
... a post has taken place, process the form
}
... display the form/errors/etc....
正如布拉德的评论所述,你对sql注入攻击很开放。在您执行将代码放入面向公众的网站的任何操作之前,您最好先学习安全编码实践,否则您的网站会很快陷入瘫痪。
答案 1 :(得分:2)
Mike - 只要你的页面加载,php块中的所有内容都会执行。因此,如果你看一下回声线,你会注意到它总会执行并打印出成功文本。你需要做几件事:
测试您的输入以查看表单是否已正确提交。您可以在此测试以确保所有必填字段都包含内容。如果他们不这样做,那么你会再次显示表格。如果它们是正确的,那么您将显示成功消息。您可以使用strlen简单地测试输入,以查看变量是否已填充长度> 0的变量。或者您可以使用isset()。
你真的需要马上考虑安全问题。我知道你刚刚学习了这个教程示例,但是如果你只是像你那样插入值,那么很容易让某人对你的数据库进行注入攻击。您需要查看mysql_real_escape_string的手册页。
答案 2 :(得分:0)
在插入数据库之前添加它
if(isset($_POST['submit'])){
//then do the insert
}
没有说安全......