好的,我知道这已经回答了几次,但我似乎无法让我的工作!
我的数据库中有 8 周(设置为列),我用 php 显示这些值,如下所示
<form method="post" id="updating" action="<?php $_PHP_SELF ?>">
<?php
$count = 1;
foreach ($results as $v) {
while($count<9){
$week = Week.$count;
$checkvalue = $v -> $week;
?>
Week<?echo $count;?> <input type="checkbox" id="Week<?php echo$count;?>" name="week[]" value="<?php echo $checkvalue;?>" <?php if($checkvalue==1){?>
checked="checked"
<?php } ?>
/>
<?php
$count++;
}
}
?>
<input name="update" type="submit" id="update" value="Update">
</form>
我知道它可能没有应有的优雅,但它确实为我输出了正确的 HTML 并显示了数据库中显示的信息。
<form method="post" id="updating" action="">
Week1 <input type="checkbox" id="Week1" name="week[]" value="1" checked="checked"
/>
Week2 <input type="checkbox" id="Week2" name="week[]" value="0" />
Week3 <input type="checkbox" id="Week3" name="week[]" value="1" checked="checked"
/>
Week4 <input type="checkbox" id="Week4" name="week[]" value="1" checked="checked"
/>
Week5 <input type="checkbox" id="Week5" name="week[]" value="0" />
Week6 <input type="checkbox" id="Week6" name="week[]" value="1" checked="checked"
/>
Week7 <input type="checkbox" id="Week7" name="week[]" value="1" checked="checked"
/>
Week8 <input type="checkbox" id="Week8" name="week[]" value="1" checked="checked"
/>
<input name="update" type="submit" id="update" value="Update">
</form>
我遇到的问题是,当我勾选或取消勾选这些复选框时,更新的值似乎没有被捕获,因此数据库没有正确更新。这是处理自我发布请求的地方。
<?php if(isset($_POST['update']))
{
$count = 1;
if(isset($_POST['week']) && !empty($_POST['week']))
foreach($_POST['week'] as $w){ echo $w; //prints 1 all the time
$week = Week.$count;
echo $week;//prints out weeks I want to update correctly (database headings)
$query = $db->getQuery(true);
// Fields to update.
$fields = array(
$week.'=' . $db->quote( $w ));
// Conditions for which records should be updated.
$conditions = array(
'UserID='. (int) $user_id);
$query->update($db->quoteName('tools_engage'))->set($fields)->where($conditions);
$db->setQuery($query);
try {
$result = $db->query(); // Use $db->execute() for Joomla 3.0.
echo ("Values saved and updated </br>");
$count++;
} catch (Exception $e) {
// Catch the error.
}
}
}?>
我在 Joomla 中执行此操作,因此使用了奇怪的数据库更新语法,但它确实有效,而且我在该程序的其他地方使用过它们,所以我知道它们不是问题
正如我在代码中评论的那样,无论我选中或取消选中哪些框,数组 week[] 似乎都包含所有值 1。然后导致数据库中的每个值都更新为 1/true,这显然是不正确的。
我怀疑问题出在我的更新表单的 HTML 输出中,但似乎无法破解它,非常感谢任何帮助!
更新: 好的,继续 nvuono 的建议,我已将我的表格更新为这样
<?php
$count = 1;
foreach ($results as $v) {
while($count<9){
$week = Week.$count;
$checkvalue = $v -> $week;
?>
Week<?echo $count;?> <input type="checkbox" id="Week<?php echo$count;?>" name="week[<?php echo $count;?>]" value="1" <?php if($checkvalue==1){?>
checked="checked"
<?php } ?>
/>
<?php
$count++;
}
}
?>
那么现在每个名称在数组中都有一个索引,不是吗?如果是这样的话,我应该
if(isset($_POST['update']))
部分现在不是按照输入的顺序打印出数组中的所有值吗?
IE。我的逻辑是它打印出 1,0,0,1,0,0,0(选中框 1 和 4)或选中的框。但它只是打印出 1,1 所以我无法知道它们是什么索引,以及随后我应该在哪一周更新