2013-08-21 44 views
1

你好,我有下面的代码,用于验证一个表单中有数据,然后我想确保的姓名,电子邮件和地址在我的数据库已经前的arent我插入它...PHP表单重复数据删除插入

你能告诉我在哪里搞乱与它下面是扔在已经存在的错误,即使它是唯一的数据

if($_POST['formSubmit'] == "Submit") 
{ 
    $errorMessage = ""; 

    if(empty($_POST['formName'])) 
    { 
     $errorMessage .= "<li>You forgot to enter a name!</li>"; 
    } 
    if(empty($_POST['formEmail'])) 
    { 
     $errorMessage .= "<li>You forgot to enter an email!</li>"; 
    } 
    if(empty($_POST['formAddress'])) 
    { 
     $errorMessage .= "<li>You forgot to enter your Address!</li>"; 
    } 
    if(empty($_POST['formCity'])) 
    { 
     $errorMessage .= "<li>You forgot to enter your City!</li>"; 
    } 
    if(empty($_POST['formState'])) 
    { 
     $errorMessage .= "<li>You forgot to enter your State!</li>"; 
    } 
    if(empty($_POST['formZip'])) 
    { 
     $errorMessage .= "<li>You forgot to enter your Zip!</li>"; 
    } 

    $varName = $_POST['formName']; 
    $varEmail = $_POST['formEmail']; 
    $varAddress = $_POST['formAddress']; 
    $varCity = $_POST['formCity']; 
    $varState = $_POST['formState']; 
    $varZip = $_POST['formZip']; 
    $varDate = $_POST['formDate']; 

    if(empty($errorMessage)) 
    { 
     $db = mysql_connect("localhost","root","PASSWORD"); 
     if(!$db) die("Error connecting to MySQL database."); 
     mysql_select_db("FormData" ,$db); 

     $dupesql = "SELECT * FROM formdata WHERE (name = '$varName' AND email = '$varEmail' AND address = '$varAddress')"; 

     $duperaw = mysql_query($dupesql); 

     if($duperaw > 0) { 
      echo ("$varName already exists in $varAddress \n"); 
     } 
     else { 
     $sql = "INSERT INTO formdata (name, email, address, city, state, zip, submitDate) VALUES (". 
         PrepSQL($varName) . ", " . 
         PrepSQL($varEmail) . ", " . 
         PrepSQL($varAddress) . ", " . 
         PrepSQL($varCity) . ", " . 
         PrepSQL($varState) . ", " . 
         PrepSQL($varZip) . ", " . 
         PrepSQL($varDate) . ")"; 
     mysql_query($sql); 

     header("location: index.php?success=1"); 
     exit(); 
     } 
    } 

} 
+3

[**在新的代码,请不要使用'mysql_ *'功能**](http://bit.ly/phpmsql)。他们不再保留[并正式弃用(https://wiki.php.net/rfc/mysql_deprecation)。看到[**红框**](http://j.mp/Te9zIL)?学习[*准备的语句*](http://j.mp/T9hLWi),并使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [这篇文章](http://j.mp/QEx8IB)将帮助你决定哪个。如果你选择PDO,[这里是一个很好的教程](http://j.mp/PoWehJ)。 –

+1

您正在检查'$ duperaw'中的内容;但这是来自数据库的记录集,而不是查询的实际结果。您需要使用mysql_num_rows来查看该记录集中有多少行。 – andrewsi

回答

2

使用mysql_num_rows($duperaw) > 0,而不是仅仅$duperaw > 0检查,如果您的查询返回任何结果。

此外,避免使用mysql_*功能。他们不再维护,并且是deprecated as of PHP 5.5.0。有关更详细的解释,请阅读this post。相反,使用PDOMySQLi,了解prepared statementsThis article可以帮助您决定使用哪个MySQL API。

+0

哇,所以我需要真正赶上我的PHP它已经很长一段时间,因为我已经使用PHP。所以显然你告诉我我们mysql_num_rows来解决我的问题(因为它),但也告诉我重写我的代码使用PDO或MySQLi正确? – Travis

+0

确实。拥有最新的工具总是更好。 – PLPeeters

+0

是的,毫无疑问。我更喜欢在Java和.Net社区工作的前端人物,但对于一个简单的项目,他们问我是否可以在PHP中完成并降低成本。这已过时多久了?但我想回头我还没有真正写很多PHP在过去的2年,除了一些WordPress的东西 – Travis