2012-03-07 33 views
2

第二個編輯 似乎在加載網頁,不提交時,這兩個條目(空行)添加到我的數據庫。我真的很努力地在這裏找到我的問題,但我有一種感覺,這是一個相當愚蠢的錯誤。PHP mySQL代碼發佈額外的行到數據庫?

我有我的PHP/MySQL的代碼張貼有什麼它應該一起發佈多餘的空行的問題。下面是我的表單數據驗證代碼,用於將信息傳輸到數據庫。每次我在表單中輸入數據並提交時,它都可以正常工作,但是它向tblLocation添加了額外的行,tblWhere工作正常。任何人都可以在這裏帶領我走向正確的方向嗎讓我知道你是否需要更多我的代碼。

代碼如下

if (isset($_POST['butSubmit'])) { 

// set variables to data from form  
$user= mysql_real_escape_string($_POST["txtUser"]); 
$fName= mysql_real_escape_string($_POST["txtFname"]); 
$lName= mysql_real_escape_string($_POST["txtLname"]); 
$email= mysql_real_escape_string($_POST["txtEmail"]); 
$date= date(DATE_RFC822); 
$street= mysql_real_escape_string($_POST["txtStreet"]); 
$city= mysql_real_escape_string($_POST["txtCity"]); 
$state= mysql_real_escape_string($_POST["lstStates"]); 
$zip= mysql_real_escape_string($_POST["txtZip"]); 

    //handle html characters 
$user = htmlentities($user, ENT_QUOTES); 
$fName = htmlentities($fName, ENT_QUOTES); 
$lName = htmlentities($lName, ENT_QUOTES); 
$email = htmlentities($email, ENT_QUOTES); 
$date = htmlentities($date, ENT_QUOTES); 
$street = htmlentities($street, ENT_QUOTES); 
$city = htmlentities($city, ENT_QUOTES); 
$state = htmlentities($state, ENT_QUOTES); 
$zip = htmlentities($zip, ENT_QUOTES); 
$errorMsg=array(); 


// initiate testing procedures for form contents 
if($user==""){ 
    $errorMsg[]="Please enter your Username"; 
} else { 
    $valid = verifyAlphaNum ($user); /* test for non-valid data */ 
    if (!$valid){ 
     $error_msg[]="Username must contain only letters (A-Z), numbers (0-9), spaces, dashes(-), and apostrophes (')."; 
    } 
} 

if($fName==""){ 
    $errorMsg[]="Please enter your First Name"; 
} else { 
    $valid = verifyAlphaNum ($fName); /* test for non-valid data */ 
    if (!$valid){ 
     $error_msg[]="First Name must contain only letters (A-Z), numbers (0-9), spaces, dashes(-), and apostrophes (')."; 
    } 
} 

    if($lName==""){ 
    $errorMsg[]="Please enter your Last Name"; 
} else { 
    $valid = verifyAlphaNum ($lName); /* test for non-valid data */ 
    if (!$valid){ 
     $error_msg[]="Last Name must contain only letters (A-Z), numbers (0-9), spaces, dashes(-), and apostrophes (')."; 
    } 
} 

if($email==""){ 
    $errorMsg[]="Please enter your Email Address"; 
} elseif (!verifyEmail($email)){ 
    $errorMsg[]="Correct eMail format is ([email protected])"; 
} 

    if($street==""){ 
    $errorMsg[]="Please enter your Street Address"; 
} else { 
    $valid = verifyAlphaNum ($street); /* test for non-valid data */ 
    if (!$valid){ 
     $error_msg[]="Street Address must contain only letters (A-Z), numbers (0-9), spaces, dashes(-), and apostrophes (')."; 
    } 
} 

    if($city==""){ 
    $errorMsg[]="Please enter a City"; 
} else { 
    $valid = verifyAlphaNum ($city); /* test for non-valid data */ 
    if (!$valid){ 
     $error_msg[]="City must contain only letters (A-Z), numbers (0-9), spaces, dashes(-), and apostrophes (')."; 
    } 
} 

    if($state==""){ 
    $errorMsg[]="Please choose a State"; 
} else { 
    $valid = verifyAlphaNum ($state); /* test for non-valid data */ 
    } 
} 

    if($errorMsg){ 
    echo "<ul>\n"; 
    foreach($errorMsg as $err){ 
     echo "<li style='color: #ff6666'>" . $err . "</li>\n"; 
    } 
    echo "</ul>\n"; 
} else { 

       mysql_query("INSERT INTO tblWhere (pk_Username, fldFirstName, fldLastName, fldAdminLevel, fldTotalPosts, fldDateJoined, fldEmail) VALUES ('$user', '$fName', '$lName', '4', '0', '$date', '$email')"); 
           if (mysql_errno()) { 
          echo $sql . "<br/>\n" . mysql_error(); 
           } 

        mysql_query("INSERT INTO tblLocation (fk_Username, fldStreet, fldCity, fldState, fldZip) VALUES ('$user', '$street', '$city', '$state', '$zip')"); 
           if (mysql_errno()) { 
          echo $sql . "<br/>\n" . mysql_error(); 
           } 
} 
mysql_close(); 
print $user; 

編輯 下面是完整的代碼,也許這將幫助?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 

<title>CS148 "Where Are You From?" Page</title> 

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<meta name="author" content="Stephen B. Wakita" /> 

<meta name='description' content='Form to gather information for CS148 PHP Form Assignment. The  javascript functions for validation are from Easy! Designs, LLC easydesigns.net and few by Robert Erickson.'/> 

<link rel="stylesheet" 
    href="mystyle.css" 
    type="text/css" 
    media="screen" /> 

<script src="validation.js" type="text/javascript"></script>  

<script type="text/javascript"> 
<!-- 
window.onload = Initialize; 

function Initialize(){ 
    if (!document.getElementById || !document.createElement || !document.createTextNode) 
    return; 

    var objForm = document.getElementById('frmRegister'); 
    objForm.onsubmit= function(){return fblnVerified(this);}; 
} 

function reSetForm(){ 
    document.getElementById('txtFname').style.background='#fff'; 
    document.getElementById('txtLname').style.background='#fff'; 
    document.getElementById('txtEmail').style.background='#fff';  
    document.getElementById('lstStates').style.background='#fff'; 
    document.getElementById('errors').innerHTML=""; 
} 

function fblnVerified(theForm){ 
     reSetForm(); 
     returnStatus = true; 
     errorMsg = ""; 
     numErrors = 0; 


    if (isEmpty(theForm.txtFname.value)) { 
     document.getElementById('txtFname').style.background='#FF6'; 
     errorMsg += "<li>Please enter your first name.</li>"; 
     numErrors += 1; 
     returnStatus = false; 
    } 

    if (isEmpty(theForm.txtLname.value)) { 
     document.getElementById('txtLname').style.background='#FF6'; 
     errorMsg += "<li>Please Enter your last name.</li>"; 
     numErrors += 1; 
     returnStatus = false; 
    } else if (!isWithinRange(theForm.txtLname.value.length, 2, 45)){ 
     document.getElementById('txtLname').style.background='#FF6'; 
     errorMsg += "<li>Last name must contain at least two characters.</li>"; 
     numErrors += 1; 
     returnStatus = false; 
    } 

    if (isEmpty(theForm.txtEmail.value)) { 
     document.getElementById('txtEmail').style.background='#FF6'; 
     errorMsg += "<li>Please enter your email address.</li>"; 
     numErrors += 1; 
     returnStatus = false; 
    }else if (!isEmailAddress(theForm.txtEmail.value)){ 
     document.getElementById('txtEmail').style.background='#FF6'; 
     errorMsg += "<li>You have entered your email in an invalid format, please use this format: [email protected] </li>"; 
     numErrors += 1;  
     returnStatus = false; 
    } 

    if(returnStatus == false){ 
     msg1 = "Your form is incomplete or incorrect. There are " + numErrors + " errors. "; 
     msg1 += "Please look for the highlighted items."; 
     msg = "<p>" + msg1 + "</p><ol class='missing' id='errorMessages'></ol>"; 
     document.getElementById('errors').innerHTML = msg; 

     document.getElementById('errorMessages').innerHTML= errorMsg; 
     alert(msg1); 
     window.scrollTo(0,0); 
    } 
    return returnStatus; 
} 
--> 
</script> 
</head> 
<body class="bodycolor"> 
<div id="content"> 
<div id="errors"> 
</div> 

<form action="form.php" 
     method="post" 
     id="frmWhere"> 


<fieldset class="wrapper"> 
<legend>Where are you from?</legend> 
<p>Please answer the following survey. Required fields are marked in <span class="required">red</span>.</p> 

<fieldset class="intro"> 
<legend>Please complete the following survey.</legend> 

<fieldset class="main"> 
<legend>Contact Information</legend>      
<fieldset class="info"> 

    <label for="txtUser" class="required">Username</label> 
    <input type="text" id="txtUser" name="txtUser" value="" tabindex="260" 
      size="30" maxlength="26" onfocus="this.select()" /> 

    <label for="txtFname" class="required">First Name</label> 
    <input type="text" id="txtFname" name="txtFname" value="" tabindex="261" 
      size="55" maxlength="45" onfocus="this.select()" /> 


    <label for="txtLname" class="required">Last Name</label> 
    <input type="text" id="txtLname" name="txtLname" value="" tabindex="262" 
      size="55" maxlength="45" onfocus="this.select()" /> 


    <label for="txtEmail" class="required">Email</label> 
    <input type="text" id="txtEmail" name="txtEmail" value="" tabindex="263" 
      size="55" maxlength="45" onfocus="this.select()" /> 

    <label for="txtstreet" class="required">Street Address</label> 
    <input type="text" id="txtStreet" name="txtStreet" value="" tabindex="264" 
      size="55" maxlength="45" onfocus="this.select()" /> 

    <label for="txtCity" class="required">City</label> 
    <input type="text" id="txtCity" name="txtCity" value="" tabindex="265" 
      size="55" maxlength="45" onfocus="this.select()" /> 

    <select id="lstStates" name="lstStates" tabindex="266" size="1"> 
<option value="ZZ">None</option> 
<option value="">-- UNITED STATES --</option> 
<option value="AL">Alabama</option> 
<option value="AK">Alaska</option> 
<option value="AZ">Arizona</option> 
<option value="AR">Arkansas</option> 
<option value="CA">California</option> 
<option value="CO">Colorado</option> 
<option value="CT">Connecticut</option> 
<option value="DE">Delaware</option> 
<option value="FL">Florida</option> 
<option value="GA">Georgia</option> 
<option value="HI">Hawaii</option> 
<option value="ID">Idaho</option> 
<option value="IL">Illinois</option> 
<option value="IN">Indiana</option> 
<option value="IA">Iowa</option> 
<option value="KS">Kansas</option> 
<option value="KY">Kentucky</option> 
<option value="LA">Louisiana</option> 
<option value="ME">Maine</option> 
<option value="MD">Maryland</option> 
<option value="MA">Massachusetts</option> 
<option value="MI">Michigan</option> 
<option value="MN">Minnesota</option> 
<option value="MS">Mississippi</option> 
<option value="MO">Missouri</option> 
<option value="MT">Montana</option> 
<option value="NE">Nebraska</option> 
<option value="NV">Nevada</option> 
<option value="NH">New Hampshire</option> 
<option value="NJ">New Jersey</option> 
<option value="NM">New Mexico</option> 
<option value="NY">New York</option> 
<option value="NC">North Carolina</option> 
<option value="ND">North Dakota</option> 
<option value="OH">Ohio</option> 
<option value="OK">Oklahoma</option> 
<option value="OR">Oregon</option> 
<option value="PA">Pennsylvania</option> 
<option value="RI">Rhode Island</option> 
<option value="SC">South Carolina</option> 
<option value="SD">South Dakota</option> 
<option value="TN">Tennessee</option> 
<option value="TX">Texas</option> 
<option value="UT">Utah</option> 
<option value="VT">Vermont</option> 
<option value="VA">Virginia</option> 
<option value="WA">Washington</option> 
<option value="DC">Washington, DC</option> 
<option value="WV">West Virginia</option> 
<option value="WI">Wisconsin</option> 
<option value="WY">Wyoming</option> 

<option value="">-- CANADA --</option> 
<option value="AB">Alberta</option> 
<option value="BC">British Columbia</option> 
<option value="MB">Manitoba</option> 
<option value="NB">New Brunswick</option> 
<option value="NF">Newfoundland and Labrador</option> 
<option value="NT">Northwest Territories</option> 
<option value="NS">Nova Scotia</option> 
<option value="NU">Nunavut</option> 
<option value="ON">Ontario</option> 
<option value="PE">Prince Edward Island</option> 
<option value="PQ">Quebec</option> 
<option value="SK">Saskatchewan</option> 
<option value="YT">Yukon Territory</option> 
<option value="">-- OTHER --</option> 
<option value="OT">Other</option> 
    </select> 

<label for="txtZip" class="required">ZIP Code</label> 
    <input type="text" id="txtZip" name="txtZip" value="" tabindex="267" 
      size="6" maxlength="6" onfocus="this.select()" />  


<fieldset class="buttons"> 
<legend></legend>    
<input type="submit" id="butSubmit" name="butSubmit" value="Submit" 
      tabindex="991" class="button"/> 

<input type="reset" id="butReset" name="butReset" value="Reset Form" 
      tabindex="993" class="button" onclick="reSetForm()" /> 
</fieldset>     

</fieldset> 
</fieldset> 
</fieldset> 
</form> 
</?php 

include ("validation_functions.php"); 

date_default_timezone_set('UTC'); 

$dbh=mysql_connect('webdb.uvm.edu','swakita','password'); 

if (!$dbh) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db('SWAKITA', $dbh); 



if (isset($_POST['butSubmit'])) { 

    //handle html characters 
$user = htmlentities($user, ENT_QUOTES); 
$fName = htmlentities($fName, ENT_QUOTES); 
$lName = htmlentities($lName, ENT_QUOTES); 
$email = htmlentities($email, ENT_QUOTES); 
$date = htmlentities($date, ENT_QUOTES); 
$street = htmlentities($street, ENT_QUOTES); 
$city = htmlentities($city, ENT_QUOTES); 
$state = htmlentities($state, ENT_QUOTES); 
$zip = htmlentities($zip, ENT_QUOTES); 
$errorMsg=array(); 

// set variables to data from form  
$user= mysql_real_escape_string($_POST["txtUser"]); 
$fName= mysql_real_escape_string($_POST["txtFname"]); 
$lName= mysql_real_escape_string($_POST["txtLname"]); 
$email= mysql_real_escape_string($_POST["txtEmail"]); 
$date= date(DATE_RFC822); 
$street= mysql_real_escape_string($_POST["txtStreet"]); 
$city= mysql_real_escape_string($_POST["txtCity"]); 
$state= mysql_real_escape_string($_POST["lstStates"]); 
$zip= mysql_real_escape_string($_POST["txtZip"]); 



// initiate testing procedures for form contents 
if($user==""){ 
    $errorMsg[]="Please enter your Username"; 
} else { 
    $valid = verifyAlphaNum ($user); /* test for non-valid data */ 
    if (!$valid){ 
     $error_msg[]="Username must contain only letters (A-Z), numbers (0-9), spaces, dashes(-), and apostrophes (')."; 
    } 
} 

if($fName==""){ 
    $errorMsg[]="Please enter your First Name"; 
} else { 
    $valid = verifyAlphaNum ($fName); /* test for non-valid data */ 
    if (!$valid){ 
     $error_msg[]="First Name must contain only letters (A-Z), numbers (0-9), spaces, dashes(-), and apostrophes (')."; 
    } 
} 

    if($lName==""){ 
    $errorMsg[]="Please enter your Last Name"; 
} else { 
    $valid = verifyAlphaNum ($lName); /* test for non-valid data */ 
    if (!$valid){ 
     $error_msg[]="Last Name must contain only letters (A-Z), numbers (0-9), spaces, dashes(-), and apostrophes (')."; 
    } 
} 

if($email==""){ 
    $errorMsg[]="Please enter your Email Address"; 
} elseif (!verifyEmail($email)){ 
    $errorMsg[]="Correct eMail format is ([email protected])"; 
} 

    if($street==""){ 
    $errorMsg[]="Please enter your Street Address"; 
} else { 
    $valid = verifyAlphaNum ($street); /* test for non-valid data */ 
    if (!$valid){ 
     $error_msg[]="Street Address must contain only letters (A-Z), numbers (0-9), spaces, dashes(-), and apostrophes (')."; 
    } 
} 

    if($city==""){ 
    $errorMsg[]="Please enter a City"; 
} else { 
    $valid = verifyAlphaNum ($city); /* test for non-valid data */ 
    if (!$valid){ 
     $error_msg[]="City must contain only letters (A-Z), numbers (0-9), spaces, dashes(-), and apostrophes (')."; 
    } 
} 

    if($state==""){ 
    $errorMsg[]="Please choose a State"; 
} else { 
    $valid = verifyAlphaNum ($state); /* test for non-valid data */ 
    } 
} 

    if($errorMsg){ 
    echo "<ul>\n"; 
    foreach($errorMsg as $err){ 
     echo "<li style='color: #ff6666'>" . $err . "</li>\n"; 
    } 
    echo "</ul>\n"; 
} else { 

       mysql_query("INSERT INTO tblWhere (pk_Username, fldFirstName, fldLastName, fldAdminLevel, fldTotalPosts, fldDateJoined, fldEmail) VALUES ('$user', '$fName', '$lName', '4', '0', '$date', '$email')"); 
           if (mysql_errno()) { 
          echo $sql . "<br/>\n" . mysql_error(); 
           } 

        mysql_query("INSERT INTO tblLocation (fk_Username, fldStreet, fldCity, fldState, fldZip) VALUES ('$user', '$street', '$city', '$state', '$zip')"); 
           if (mysql_errno()) { 
          echo $sql . "<br/>\n" . mysql_error(); 
           } 
} 
mysql_close(); 
print $user; 

?> 
</body> 
</html> 
+0

我不知道爲什麼你會得到dupe行,但你應該在調用mysql_real_escape_string之前執行'htmlentities'調用。功能我能想到這樣的情況:它會有所作爲,但是從邏輯角度來看,DB逃逸應該是你做的最後一件事在查詢中使用前值。 – prodigitalson 2012-03-07 18:59:45

+0

@prodigitalson謝謝,我現在就改變它。 – Wakeeta 2012-03-07 19:01:44

+0

嗯,提供的代碼不應該重複條目,奇怪。偶然在腳本的其他地方有重定向嗎?你在瀏覽器中沒有收到警告,說你正在刷新頁面數據等頁面?此外,它是否完全重複條目或是否插入空白值? $ sql定義在哪裏?嘿,如果這些遺憾是沒有意義的Q的:P – 2012-03-07 19:08:23

回答

1

你的代碼在POST檢查之外運行mysql查詢,不管什麼因爲$errorMsg沒有被返回,mysql查詢都會運行。

移動你的mysql邏輯代碼的if (isset($_POST['butSubmit'])) {部分內。

<?php 

include ("validation_functions.php"); 

date_default_timezone_set('UTC'); 

$dbh=mysql_connect('webdb.uvm.edu','swakita','password'); 

if (!$dbh) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db('SWAKITA', $dbh); 



if (isset($_POST['butSubmit'])) { 

    //handle html characters 
$user = htmlentities($user, ENT_QUOTES); 
$fName = htmlentities($fName, ENT_QUOTES); 
$lName = htmlentities($lName, ENT_QUOTES); 
$email = htmlentities($email, ENT_QUOTES); 
$date = htmlentities($date, ENT_QUOTES); 
$street = htmlentities($street, ENT_QUOTES); 
$city = htmlentities($city, ENT_QUOTES); 
$state = htmlentities($state, ENT_QUOTES); 
$zip = htmlentities($zip, ENT_QUOTES); 
$errorMsg=array(); 

// set variables to data from form  
$user= mysql_real_escape_string($_POST["txtUser"]); 
$fName= mysql_real_escape_string($_POST["txtFname"]); 
$lName= mysql_real_escape_string($_POST["txtLname"]); 
$email= mysql_real_escape_string($_POST["txtEmail"]); 
$date= date(DATE_RFC822); 
$street= mysql_real_escape_string($_POST["txtStreet"]); 
$city= mysql_real_escape_string($_POST["txtCity"]); 
$state= mysql_real_escape_string($_POST["lstStates"]); 
$zip= mysql_real_escape_string($_POST["txtZip"]); 



// initiate testing procedures for form contents 
if($user==""){ 
    $errorMsg[]="Please enter your Username"; 
} else { 
    $valid = verifyAlphaNum ($user); /* test for non-valid data */ 
    if (!$valid){ 
     $error_msg[]="Username must contain only letters (A-Z), numbers (0-9), spaces, dashes(-), and apostrophes (')."; 
    } 
} 

if($fName==""){ 
    $errorMsg[]="Please enter your First Name"; 
} else { 
    $valid = verifyAlphaNum ($fName); /* test for non-valid data */ 
    if (!$valid){ 
     $error_msg[]="First Name must contain only letters (A-Z), numbers (0-9), spaces, dashes(-), and apostrophes (')."; 
    } 
} 

    if($lName==""){ 
    $errorMsg[]="Please enter your Last Name"; 
} else { 
    $valid = verifyAlphaNum ($lName); /* test for non-valid data */ 
    if (!$valid){ 
     $error_msg[]="Last Name must contain only letters (A-Z), numbers (0-9), spaces, dashes(-), and apostrophes (')."; 
    } 
} 

if($email==""){ 
    $errorMsg[]="Please enter your Email Address"; 
} elseif (!verifyEmail($email)){ 
    $errorMsg[]="Correct eMail format is ([email protected])"; 
} 

    if($street==""){ 
    $errorMsg[]="Please enter your Street Address"; 
} else { 
    $valid = verifyAlphaNum ($street); /* test for non-valid data */ 
    if (!$valid){ 
     $error_msg[]="Street Address must contain only letters (A-Z), numbers (0-9), spaces, dashes(-), and apostrophes (')."; 
    } 
} 

    if($city==""){ 
    $errorMsg[]="Please enter a City"; 
} else { 
    $valid = verifyAlphaNum ($city); /* test for non-valid data */ 
    if (!$valid){ 
     $error_msg[]="City must contain only letters (A-Z), numbers (0-9), spaces, dashes(-), and apostrophes (')."; 
    } 
} 

    if($state==""){ 
    $errorMsg[]="Please choose a State"; 
} else { 
    $valid = verifyAlphaNum ($state); /* test for non-valid data */ 
    } 


    if($errorMsg){ 
    echo "<ul>\n"; 
    foreach($errorMsg as $err){ 
     echo "<li style='color: #ff6666'>" . $err . "</li>\n"; 
    } 
    echo "</ul>\n"; 
} else { 

       mysql_query("INSERT INTO tblWhere (pk_Username, fldFirstName, fldLastName, fldAdminLevel, fldTotalPosts, fldDateJoined, fldEmail) VALUES ('$user', '$fName', '$lName', '4', '0', '$date', '$email')"); 
           if (mysql_errno()) { 
          echo $sql . "<br/>\n" . mysql_error(); 
           } 

        mysql_query("INSERT INTO tblLocation (fk_Username, fldStreet, fldCity, fldState, fldZip) VALUES ('$user', '$street', '$city', '$state', '$zip')"); 
           if (mysql_errno()) { 
          echo $sql . "<br/>\n" . mysql_error(); 
           } 
    } 
} 
mysql_close(); 
print $user; 

?> 
</body> 
</html> 
+0

非常感謝。這讓我很擔心,我開始瘋了。按照您的更改建議後,它現在可以完美地工作。 – Wakeeta 2012-03-07 20:16:20

+0

沒問題,如果一段代碼運行,你不要指望,總是先檢查你的條件語句;) – michaelotoole 2012-03-07 20:20:32

1

PHP MySQL不會插入空行神奇,所以你可以檢查你真正嘗試插入,或使用一些調試回聲$查詢語句只是你的查詢之前,甚至更好的使用* print_r的( debug_backtrace())*