2012-12-05 81 views
2

首先我知道我需要使用更好的MySQL注入,我打算稍後。php更新腳本,只更新最後一條記錄

好的,我有一個表單,我可以在那裏更新MySQL數據庫的記錄。

但是,我無法獲得更新按鈕,除了最後一條記錄以外的任何記錄,即使我刪除該記錄,它仍然是可以更新的表單底部的最後一條記錄。

繼承人的代碼:

<?php 
$link = mysql_connect ("localhost", "root", "password"); 
mysql_select_db ("cardatabase"); 
$query = "SELECT * from cars"; 
$result = mysql_query ($query, $link); 

if(isset($_POST['update'])){ 
$updatequery = "UPDATE cars SET 
ID='$_POST[id]', 
CARMAKE='$_POST[carmake]', 
CARMODEL='$_POST[carmodel]', 
FUELTYPE='$_POST[fueltype]', 
TRANSMISSION='$_POST[transmission]', 
DOORS='$_POST[doors]', 
AMOUNT='$_POST[amount]', 
AVAILABLE='$_POST[available]' 
WHERE ID='$_POST[hidden]'"; 

mysql_query($updatequery, $link); 
}; 

echo "<table cellspacing=3 border=1 style='font-size:13px;background-color:white;'> 
<form action=update.php method=post> 
<tr style='background-color:#38C0CC;'> 
<td>ID</td> 
<td>Make</td> 
<td>Model</td> 
<td>Fuel Type</td> 
<td>Transmission</td> 
<td>Engine Size</td> 
<td>Doors</td> 
<td>Amount</td> 
<td>Available</td> 
</tr>"; 



while($row = mysql_fetch_array($result)) 
{ 
echo "<tr>"; 
echo "<td>"."<input type=text name=id value=" . $row[ID] . " </td>"; 
echo "<td>"."<input type=text name=carmake value=" . $row[CARMAKE] . " </td>"; 
echo "<td>"."<input type=text name=carmodel value=" . $row[CARMODEL] . " </td>"; 
echo "<td>"."<input type=text name=fueltype value=" . $row[FUELTYPE] . " </td>"; 
echo "<td>"."<input type=text name=transmission value=" . $row[TRANSMISSION] . " </td>"; 
echo "<td>"."<input type=text name=enginesize value=" . $row[ENGINESIZE] . " </td>"; 
echo "<td>"."<input type=text name=doors value=" . $row[DOORS] . " </td>"; 
echo "<td>"."<input type=text name=amount value=" . $row[AMOUNT] . " </td>"; 
echo "<td>"."<input type=text name=available value=" . $row[AVAILABLE] . " </td>"; 
echo "<td>"."<input type=hidden name=hidden value=" . $row[ID] . " </td>"; 
echo "<td>"."<input type=submit name=update value=Update" . " </td>"; 
echo "</tr>"; 
} 
echo "</form>"; 
echo "</table>"; 
mysql_close ($link); 
?> 

這裏是MySQL表的圖片:

MySQL table

+0

另外值得一提的是,你不需要進行如此多的連接。而且你沒有在這個代碼中關閉你的輸入標籤!示例td行應該如下所示:echo「​​」; –

+0

您是否試圖顯示'$ _POST [hidden]'變量或整個$ updatequery變量,以查看您的變量是否被正確替換 – S3ddi9

回答

4

讓我們先從這個能見度:

對於未來用戶看到你的問題。如果你知道這一點,太棒了! 歡迎來到Stack Overflow! Please, don't use mysql_* functions in new code。他們不再維護, deprecation process已經開始。請參閱 red box?請改爲了解prepared statements,並使用 PDOMySQLi - this article將幫助您決定哪個。如果您選擇 PDO,here is a good tutorial


您遇到的問題是通過給所有的投入造成了同樣的名字(idcarmake等)。這意味着只有最後一行會被提交。

給他們的名字,像這樣:

name="id[]" 

這將使PHP處理$_POST值作爲數組,您可以訪問

$_POST["id"][3] 

要獲得第四行(從0開始)例如。

+0

+1是更快的打字員。 – Jeremy1026

+0

感謝您的快速回復,你的意思是這樣的 如果(isset($ _ POST ['update'])) CARMODEL ='$ _ POST [carmake] []', CARMODEL ='$ _ POST [carmodel] []', FUELTYPE ='$ _ POST [fueltype] []', TRANSMISSION ='$ _ POST [transmission] [] ', DOORS ='$ _ POST [doors] []', AMOUNT ='$ _ POST [amount] []', AVAILABLE ='$ _ POST [available] []' WHERE ID ='$ _ POST [hidden] []'「; mysql_query($ updatequery,$ link); }; 它沒有像這樣更新 – jamiestraw

+0

@JamieStraw:不,我的意思是HTML上的'name ='屬性。例如:'echo「​​」。「」;' –

0

它是因爲你寫作$_POST[carmake],$_POST[carmodel]等,因爲它們都具有相同的表單名稱。

您可以通過將[]附加到窗體名稱的末尾來解決此問題,然後使它們成爲數組。

竟被你那麼做訪問它們:

$_POST[carmake][n] 
1

@MadaraUchiha已經證明了你的更新問題的解決方案,但我想建議你格式化你的代碼的方式替代。

php的一個特性是能夠將它與html混合在一起。我已經重新格式化了一段代碼。正如你所看到的,我已經擺脫了你大部分的回聲。以這種方式格式化代碼的好處在於,您不必擔心在字符串中正確嵌套引號,並且如果使用語法突出顯示的代碼編輯器,則不會丟失HTML上的突出顯示。

<table cellspacing="3" border="1" style="font-size:13px;background-color:white;"> 
    <form action="update.php" method="post"> 
     <tr style="background-color:#38C0CC;"> 
      <td>ID</td> 
      <td>Make</td> 
      <td>Model</td> 
      <td>Fuel Type</td> 
      <td>Transmission</td> 
      <td>Engine Size</td> 
      <td>Doors</td> 
      <td>Amount</td> 
      <td>Available</td> 
     </tr> 

     <?php while ($row = mysql_fetch_array($result)) { ?> 
     <tr> 
      <td><input type="text" name="id" value="<?php echo $row['ID']; ?>"/></td> 
      <td><input type="text" name="carmake" value="<?php echo $row['CARMAKE]'; ?>"/></td> 
      <td><input type="text" name="carmodel" value="<?php echo $row['CARMODEL']; ?>"/></td> 
      <td><input type="text" name="fueltype" value="<?php echo $row['FUELTYPE']; ?>"/></td> 
      <td><input type="text" name="transmission" value="<?php echo $row['TRANSMISSION']; ?>"/></td> 
      <td><input type="text" name="enginesize" value="<?php echo $row['ENGINESIZE']; ?>"/></td> 
      <td><input type="text" name="doors" value="<?php echo $row['DOORS']; ?>"/></td> 
      <td><input type="text" name="amount" value="<?php echo $row['AMOUNT']; ?>"/></td> 
      <td><input type="text" name="available" value="<?php echo $row['AVAILABLE']; ?>"/></td> 
      <td><input type="hidden" name="hidden" value="<?php echo $row['ID']; ?>"/></td> 
      <td><input type="submit" name="update" value="Update" /></td> 
     </tr> 
     <?php } ?> 

    </form> 
</table> 
<?php mysql_close ($link); ?>