2011-10-12 47 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,我只想指出解决此类问题的通用方法。 –