我的数据库中有共享相同FK但唯一PK的信息,因此我循环将其显示在页面上。我想构建一个SQL更新查询以能够对其进行更新。我现在有2个循环,但是我不确定如何将它们完全结合起来,以使其合而为一。
我缺少什么或需要做什么才能获得所需的结果,以便在运行代码时它更新应该更新的唯一字段?我是否应该将for-each循环放在另一个for-each循环中,这样可行?
这是连接数据库并从数据库获取信息的代码,然后是循环以显示值和id字段。
//connect
$sql_awards = "select `awards`, `awardsid` from inf_awards where inf_id = $vId";
$rs_awards = mysqli_query($vconncvnl, $sql_awards);
//display inputs
while ($rs_awards_rows = mysqli_fetch_assoc($rs_awards)) {
echo '<input type="text" name="awardact[]" id="awardact" class="awardactadd" value="' . $rs_awards_rows['awards'] . '">';
echo '<input type="hidden" name="txtaward[]" value="'. $rs_awards_rows['awardsid'] .'">';
}
现在,我可以将信息获取到流程页面,我也有一条SQL更新语句和一个循环的
我用来显示奖赏ID的foreach循环,然后显示sql代码的foreach循环
//construction of loop for the awardsID field
$awardsId = '';
$award = $_POST['txtaward'];
foreach ($award as $awardid){
$awardsId .= $awardid;
}
//construction of the loop for building the SQL Update Query
$sql_up_award = '';
foreach ($vaccolates as $valuesawards) {
$sql_up_award .= sprintf("UPDATE inf_awards SET awards = %s WHERE inf_id = $vid AND awardsid = $awardsId ; ". "<br>", escapestring($vconncvnl, $valuesawards,'text'));
}
但是当我这样做时,它给了我
UPDATE inf_awards SET awards = 'john smith honorary' WHERE inf_id = 2 AND awardsid = 23;
UPDATE inf_awards SET awards = 'Best scorer' WHERE inf_id = 2 AND awardsid = 23;
我猜这是上一个循环的原因,因为当我在其中调用它时,它将循环满足条件的每个值,而此时的值只是“ 23”
我想要成为的结果就像
UPDATE inf_awards SET awards = 'john smith honorary' WHERE inf_id = 2 AND awardsid = 2;
UPDATE inf_awards SET awards = 'Best scorer' WHERE inf_id = 2 AND awardid = 3;
嵌套循环将无法解决它,因为您将获得4个更新。
您有两个数组,一个带有id,一个带有值。您可以创建一个for循环并按索引获取匹配的值。
但是,我认为这并不完全安全,因为恐怕人们会把文本弄成空白,从而弄乱了您的数组,因此至少要事先检查两个数组包含相同数量的项目,这一点很重要:
if (count($award) != count($valuesawards)) {
echo 'Please fill in all the names';
} else {
$sql_up_award = '';
//construction of the loop for building the SQL Update Query
$sql_up_award = '';
for ($i = 0; $i < count($award); $i++) (
$awardid = $award[$i];
$valuesawards = $vaccolates[$i];
$sql_up_award .= sprintf("UPDATE inf_awards SET awards = %s WHERE inf_id = $vid AND awardsid = $awardsId ; ". "<br>", escapestring($vconncvnl, $valuesawards,'text'));
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句