所以这是交易。我到处浏览,所有其他技术都与刷新浏览器有关,以及防止php页面重新提交帖子数据的方法。我是新手(显然:p)但无论如何,我认为我的问题很简单。我只想要一个方法,可能是一个if else语句来检查post数据条目,以及我的表中是否已经匹配,而不是执行查询。我不担心查询表的所有结果,因为我只怀疑这个表将有50-60个条目。
这是处理表单提交的php页面:
$firstName = $_POST['firstName']; $lastName = $_POST['lastName']; $email = $_POST['email']; $city = $_POST['city']; $state = $_POST['state']; $submitDate = date("Y-m-d"); mysql_connect ("localhost", "abc", "123") or die ('Error: ' . mysql_error()); mysql_select_db ("members"); $query = "INSERT INTO persons (ID, firstName, lastName, email, city, state, submitDate)VALUES ( 'NULL', '".$firstName."', '".$lastName."', '".$email."', '".$city."', '".$state."', '".$submitDate."' )"; mysql_query($query) or die ('Error Updating database'); echo "Database Updated With: " .$firstName ." " .$lastName ." " .$email ." " .$city ." " .$state; mysql_close($con);
很抱歉,似乎无法让我的php使用这些代码括号正确格式化。无论如何。只是为了重新迭代,寻找可能基于名字和姓氏的方法。如果那些已经存在,那么就不允许提交数据。我已经尝试了一些if if语句,但我认为我没有得到将结果与我的查询进行比较的概念。我希望这一切都有道理!!!
答案 0 :(得分:3)
您可以使用INSERT IGNORE INTO ...
让MySQL处理它。
$query = "INSERT IGNORE INTO persons (ID, firstName, lastName, email, city, state, submitDate) VALUES (
'NULL',
'".$firstName."',
'".$lastName."',
'".$email."',
'".$city."',
'".$state."',
'".$submitDate."'
)";
答案 1 :(得分:2)
我建议在你想要唯一的列上添加一个UNIQUE索引。
答案 2 :(得分:2)
我也有这个问题。基本上我所做的是在插入之前,对符合条件的条件进行选择,并检查它是否返回;如果不是,我们就可以进入。
$query = "SELECT COUNT(id) AS mycount FROM persons WHERE firstName = '".$firstnName."' AND lastName = '".$lastName."'";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
if($row['mycount'] == 0) {
//Do insert
}
答案 3 :(得分:1)
您的问题只是刷新页面重新发送POST数据吗?防止这种情况的几乎标准方法是在处理表单数据后重定向浏览器,如下所示:
header('Location: ' . $_SERVER['PHP_SELF']);
请注意,在将任何输出发送到浏览器之前必须更改标题,因此这应该高于您的doctype,并确保之前没有空格。
答案 4 :(得分:1)
这样做的一种方法是确保您的表具有适当的主键集(至少firstname
和lastname
),然后只是尝试插入并查看它是否在重复时失败。为此,您可以使用mysql_error()
功能检查错误消息。
答案 5 :(得分:1)
您可以使用这两个字段对数据库执行选择以检查行是否已存在,但如果这是需要唯一的,则MySQL表中的这两列上也应该有唯一索引。 / p>