【发布时间】:2015-10-14 22:53:08
【问题描述】:
已经就这个问题提出了很多问题。我已经完成了一些在 stackoverflow 上给出的解决方案,但它们似乎都不起作用。我有一个带有 foreach 循环的表单,我试图提交 "the selected form" 及其唯一值,然后使用该值运行 SQL 查询。
问题是,正在提交的文本区域的名称属性。起初,查询只会更新循环中的最后一列。然后我尝试了另一种方法。例如,将 name 属性更改为“someattribute[ ]”。
现在查询中的所有选定列正在更新。
form.php
<?php
...................
foreach($stmt as $obj){
$id = $obj['id'];
$likes = $obj['like1'];
echo '<form action="" method="post" enctype="multipart/form-data">';
echo '<input type="hidden" name="lkcv[]" value="'.$id.'">';
echo '<input type="hidden" name="like" value="">';
echo '<input type="image" src="images/like.png" id="lksub" width="15"
value="som" height="15" style="float:right;position:relative;margin-
right:290px;"/><div class="ld">'.$likes.'</div>';
echo '</form>’;
}
?>
query.php
<?php
if (isset($_POST['like'])){
$com_id = $_POST['lkcv'];
for ($i=0; $i<sizeof($com_id);$i++){
# query into db table to know current voting score
$query = mysql_query("SELECT like1 FROM comment WHERE id = '$com_id[$i]'");
# increase or dicrease voting score
if ($data = mysql_fetch_array($query)) {
$like = ++$data['like1'];
# update new voting score
$query2 = mysql_query("UPDATE comment SET like1 = '{$like}' WHERE id = '$com_id[$i]'");
}
}
}
?>
query.php [已解决]
<?php
if( isset( $_POST['lkcv'] ) && is_array( $_POST['lkcv'] ) )
{
$idArray = array();
foreach( $_POST['lkcv'] as $value )
{
$idArray[] = intval( $value );
}
$db->query( "UPDATE comment SET like1 = like1 + 1 WHERE id IN (".implode(
',', $idArray ).")" );
}
?>
注意: 我将更新我的查询以使用 PDO 准备好的语句,一旦我得到这个工作。感谢您的帮助。
【问题讨论】:
-
那么这里的实际问题是什么
-
@Uchiha,评论表中所有行的“like1”列都会更新。我只想更新 id 为“1”的行。
-
能否提供结果查询的输出:echo "UPDATE comment SET like1 = '{$like}' WHERE id = '$com_id[$i]'"
-
@Andriy,所有 +1 都添加到“like1”列中的前一个值。所以结果是值+1,每次点击按钮。
-
@chris94 正如您在隐藏字段中将名称属性称为数组 [] 所说,您必须检查帖子值是否为数组。然后你必须通过 $_POST['lkcv'] 的 foreach 来检索它。例如
标签: php html mysql for-loop while-loop