2011-10-12 21 views
0

我隨機從一個MySQL數據庫使用PHP(醜陋隨機,我知道)的一行。然後我想更新我獲得的行中的特定字段(使用表單或POST),但我似乎無法使其工作。我試圖創建一個別名,用於在表單發佈中使用的特定ID,但是失敗了。寫入特定的行後,隨機得到它,PHP/mySQL

$query_Recordset1 = "SELECT id, username, message, ttime, field1, field2 FROM table WHERE done = 0 ORDER BY RAND() LIMIT 1"; 

然後我想更新字段1如果按下特定的提交按鈕,最重要的是,它寫入隨機行(ID號)是牽強。

<?php  
if($submit) 
{  mysql_select_db("database", $connection); 
     $sql = "UPDATE table SET field1 = field1 +1 WHERE id = '???')"; 
     $result = mysql_query($sql); 
} 
?> 
<form method="post" action=""> 
<input type="submit" name="submit" value="submit"> 
</form> 

任何對我的問題?謝謝!

+0

您使用預處理語句上的隱藏字段..和你不更換該???與確切的ID ..或者我錯過了什麼? – blejzz

+0

我絲毫不理解這個問題。 – user700774

+0

「UPDATE table SET field1 = field1 +1 WHERE id ='???')」爲什麼有???,應該從你從數據庫中提取的行中找到id。 – blejzz

回答

0

你這樣做是正確

$query_Recordset1 = "SELECT id, username, message, ttime, field1, field2 FROM table WHERE done = 0 ORDER BY RAND() LIMIT 1"; 
$query = mysql_query($query_Recordset1); 
$result = mysql_result($query); 
while($result = mysql_fetch_object($result)){ 
    $sql = "UPDATE table SET field1 = field1 +1 WHERE id = '".mysql_real_escape_string($result->id)."')"; 
    $new = mysql_query($sql); 
} 

這只是一個例子。

在您例如,你可能希望創建一個包含ID

<input type="hidden" value="<?php echo $result->id; ?>" /> 

然後您接收頁面

mysql_select_db("database", $connection); 
    $sql = "UPDATE table SET field1 = field1 +1 WHERE id = '".mysql_real_escape_string($_POST['id'])."')"; 
    $result = mysql_query($sql); 
+0

非常感謝你的工作! – user977101

0

將該隨機行的標識存儲在表單(<input type="hidden" name="id" value="{id here}">)的隱藏字段中,然後用它來過濾更新(您有???)。 (理想情況下,您將使用準備好的語句進行過濾和正常參數標記。)

或者,將會話ID存儲在會話中,以便它不會發送到客戶端,在理論上它可能會被更改。所以,如果你採用這種方法,確保沒有辦法改變他不應該改變的身份。

+1

但是請將隱藏字段的值轉換爲整數以避免MySQL注入! – ComFreek

+0

使用mysql_real_escape_string() –

+0

這也是一個很好的習慣。當然他應該使用準備好的語句。無論如何,我不太瞭解PHP,我只想指出解決此類問題的通用方法。 –