2013-06-04 24 views
-1

我正在學習PHP,html和sql。我正在嘗試創建一個允許用戶更新現有客戶數據的表單。我想知道我的代碼出了什麼問題,因爲每次我嘗試對現有客戶進行更改時,這些更改都反映在數據集的第一個客戶上。例如,當我更改客戶ID#14的數據時,更改顯示在客戶ID#1中。客戶ID#14仍保留舊數據。這是我的代碼。有人可以給我一些關於如何解決它的提示嗎?我花了幾個小時,但我不知道我錯過了什麼。非常感謝!如何更新所選行的數據?

這是main.php文件中代碼的一部分。

<div> 
      <form method="post" action="updatecustomer.php"> 
       <fieldset> 
        <legend>Update Existing Customer</legend> 
        <li>First Name: <input type="text" name="fName"> Last Name: <input type="text" name="lName"</li> 
        <li>Email Address: <input type="text" name="email"></li> 
        <li>Phone Number: <input type="text" name="phone_number"></li> 
        <li>Street Number: <input type="text" name="address_no"> Street Line 1: <input type="text" name="address_street1"></li> 
        <li>Street Line 2 (Apt or Unit Number): <input type="text" name="address_street2"></li> 
        <li>City: <input type="text" name="address_city"> State: <input type="text" name="address_state"> Zip: <input type="text" name="address_zip"> </li> 
        <li>Customer ID: 
         <select name="customer_id"> 
     <?php 
     if(!($stmt = $mysqli->prepare("SELECT customer_id, customer_id FROM customer"))){ 
      echo "Prepare failed: " . $stmt->errno . " " . $stmt->error; 
     } 

     if(!$stmt->execute()){ 
      echo "Execute failed: " . $mysqli->connect_errno . " " . $mysqli->connect_error; 
     } 
     if(!$stmt->bind_result($customer_id, $customer_id)){ 
      echo "Bind failed: " . $mysqli->connect_errno . " " . $mysqli->connect_error; 
     } 

     while($stmt->fetch()){ 
      echo '<option value=" '. $customer_id . ' "> ' . $customer_id . '</option>\n'; 
     } 

     $stmt->close(); 
     ?> 
         </select> 
        </li> 
       </fieldset> 
       <input type="submit" name="update" value="Update Customer"> 
     </div> 

這裏是updatecustomer.php代碼:

if(!($stmt = $mysqli->prepare("UPDATE customer SET fName=?, lName=?, email=?, phone_number=?, address_no=?, address_street1=?, 
    address_street2=?, address_city=?, address_state=?, address_zip=? WHERE customer_id =?"))){ 
    echo "Prepare failed: " . $stmt->errno . " " . $stmt->error; 
} 

if(!($stmt->bind_param("sssiissssii",$_POST['fName'],$_POST['lName'],$_POST['email'],$_POST['phone_number'], $_POST['address_no'], 
    $_POST['address_street1'],$_POST['address_street2'],$_POST['address_city'],$_POST['address_state'], $_POST['address_zip'], $_POST['customer_id']))){ 
    echo "Bind failed: " . $stmt->errno . " " . $stmt->error; 
} 
if(!$stmt->execute()){ 
    echo "Execute failed: " . $stmt->errno . " " . $stmt->error; 
} else { 
    echo "Updated " . $stmt->affected_rows . " rows to customer."; 
} 
+0

爲什麼你在相同的查詢中兩次獲取customer_id? '從...選擇customer_id已經足夠了。 –

+0

您的customer_id變量應該包含您想要修改的客戶的ID(在您的示例中爲14),但它似乎包含另一個(在您的案例中爲1)。一定要將正確的customer_id傳遞給您的查詢。 – eternay

+0

@eternay:我對php和mysqli很陌生。你是否介意給我更多關於如何將正確的customer_id傳遞給我的查詢的細節?謝謝! – user2203774

回答

0

不知道,但嘗試在這裏先value=" '. $customer_id . ' "刪除空格,因爲這會送你一個字符串類型值像string(4) " 14 "。接下來我會去intval($_POST['customer_id'])