2012-11-06 80 views
0

所以,我有一個頁面上有一堆工作訂單。每個工單都是單個表中的一行,並通過while()語句放在頁面上。 我試圖用一個簡單的表單來更新每一行,我把它放在while()和一個UPDATE/WHERE語句中以實際將信息添加到表中。WHILE語句中的更新

而不是將其添加到特定的行,它將其添加到每一行。我唯一能想到的是,我的WHERE條件是錯誤的,但我似乎無法弄清楚。也許它只是需要新鮮的眼睛,或者我正朝着完全錯誤的方向前進。另外,關於安全性的任何特定指示,更好的方法等,都會非常有幫助。我在飛行中學習PHP,並可以使用幫助。 :)

<?php 

     $query = "SELECT * FROM client_information"; 

     $result = mysql_query($query) or die(mysql_error()); 


     while($row = mysql_fetch_array($result)){ 

     $which_ad = $row['ID'];?> 

      <b>Name:</b> <? echo $row['billing_name']; ?> <br> 
      <b>Job Type:</b> <? echo $row['job_type']; ?> <br> 
      <b>Size:</b> <? echo $row['size']; ?> <br> 
      <b>Text:</b> <? echo $row['text']; ?> <br> 
      <b>Notes:</b> <? echo $notes; ?> <br> 

      <br><br> 

     <form action="small_update.php" method="POST"> 
     <strong>Email Message:</strong><br> 
     <textarea rows="8" cols="60" name="email_message"></textarea>   
     <input type="submit" name="submit" value="Submit"></form> 


<? 
$email_message = htmlspecialchars ("{$_POST['email_message']}", ENT_QUOTES); 


if (mysql_errno() != 0) { 
die(mysql_error()); 
} 

mysql_query(
"UPDATE client_information 
SET email_message='$email_message' 

WHERE ID='$which_ad'" 
); 


if (mysql_errno() != 0) { 
die(mysql_error()); 
} 

    } 

?> 
+1

提示:sets,sets,sets。 –

+0

mysql_fetch_array()是使用mysql操作的一種令人沮喪的形式。請參閱爲所有mysql連接使用mysqli_fetch_array()或PDO。 [mysqli info](http://php.net/manual/en/function.mysql-fetch-array.php) – djowinz

+1

每一行都會得到相同的'email_message',因爲你從同一個'$ _POST '。您的原始'SELECT'查詢將提取所有行,並且您的while循環會使用相同的值更新表中的所有行。你的意思是爲'email_message'使用不同的值嗎? –

回答

0

你不要在你的形式指定ID:

<form action="small_update.php" method="POST"> 
    <strong>Email Message:</strong><br> 
    <textarea rows="8" cols="60" name="email_message"></textarea> 
    <input type="hidden" name="id" value="<?php echo $which_ad; ?>"> 
    <input type="submit" name="submit" value="Submit"> 
</form> 

你還需要確保你知道ID被提交的內容:

"UPDATE client_information 
SET email_message='$email_message' 

WHERE ID='$_POST['id']'" 

當然,正如其他人所說的那樣,你對這種攻擊很開放。您需要查看mysqli或pdo來消毒您的輸入...

Ans也經過檢查,您正在評估循環中的發佈數據。不要這樣做。只需在頁面上處理其他所有內容之前進行評估...

<?php 
if($_POST) 
{ 
    //run processing here 
} 

// do your fetch code here and display the forms... 
+0

謝謝!我不知道我必須在窗體內指定id。並感謝所有關於安全性的提示等:) –