PHP/MySQL更新数据库复选框选择
我正在尝试使用1或0更新数据库字段,具体取决于是否选中复选框 当复选框被选中时,它似乎起作用,但当复选框为空时则不起作用 有什么办法解决这个问题吗?代码如下。非常感谢,S 以下是我表格中的代码:PHP/MySQL更新数据库复选框选择,php,mysql,Php,Mysql,我正在尝试使用1或0更新数据库字段,具体取决于是否选中复选框 当复选框被选中时,它似乎起作用,但当复选框为空时则不起作用 有什么办法解决这个问题吗?代码如下。非常感谢,S 以下是我表格中的代码: $query = "SELECT * FROM istable WHERE assocProp = '".$_POST['id']."'"; $result = mysql_query($query); while($row = mysql_fetch_ar
$query = "SELECT * FROM istable WHERE assocProp = '".$_POST['id']."'";
$result = mysql_query($query);
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
echo '<li>
<label for="changePP'.$row['id'].'"><input id="changePP'.$row['id'].'" type="checkbox" name="showPP_ids[]" value="'.$row['id'].'"'.($row['showPP']=='1' ? ' checked="checked"':NULL).' /> Display</label>
</li>'. PHP_EOL;
}
这里没有将值设置为零的内容。未选中的框将从$\u POST数组中消失 您需要单独列出所有复选框的名称,并循环这些复选框,将它们与$\u POST数组进行比较 编辑:不打算编写任何代码,但是:
$allids = array('id1','id2','id3');
foreach ($allids as $oneid) {
$val = (int) isset($_POST[$oneid]); // will be 0 or 1
mysql_query("UPDATE istable SET showPP = $val WHERE id = ".mysql_real_escape_string($oneid));
}
请注意,这里并不真正需要mysql\u real\u escape\u字符串,因为我们知道所有id值都是安全的,但这是一种很好的做法,以防稍后有人出现并不小心更改了$allids数组
再次编辑:假设我们不知道要查找什么ID
mysql_query("UPDATE istable SET showPP = 0");
foreach ($_POST as $oneid=>$nothing) {
mysql_query("UPDATE istable SET showPP = 1 WHERE id = ".mysql_real_escape_string($oneid));
}
这里没有将值设置为零的内容。未选中的框将从$\u POST数组中消失 您需要单独列出所有复选框的名称,并循环这些复选框,将它们与$\u POST数组进行比较 编辑:不打算编写任何代码,但是:
$allids = array('id1','id2','id3');
foreach ($allids as $oneid) {
$val = (int) isset($_POST[$oneid]); // will be 0 or 1
mysql_query("UPDATE istable SET showPP = $val WHERE id = ".mysql_real_escape_string($oneid));
}
请注意,这里并不真正需要mysql\u real\u escape\u字符串,因为我们知道所有id值都是安全的,但这是一种很好的做法,以防稍后有人出现并不小心更改了$allids数组
再次编辑:假设我们不知道要查找什么ID
mysql_query("UPDATE istable SET showPP = 0");
foreach ($_POST as $oneid=>$nothing) {
mysql_query("UPDATE istable SET showPP = 1 WHERE id = ".mysql_real_escape_string($oneid));
}
因此,你的状况
if (isset($_POST['showPP_ids'])) {
foreach ($_POST['showPP_ids'] as $showPPId) {
将永远找不到未选中的复选框showPP
设置为0
。这样做:
$ppsql=mysql_query("UPDATE istable SET showPP = '0' WHERE id = ".mysql_real_escape_string($showPPId));
当您要将sql字段设置为0时- 您可以这样做(重用查询代码)
- 另一种选择是JavaScript:提供两个复选框,如果另一个复选框未选中,则将“not”-复选框设置为true,或者使用
并在复选框更改时更改其值。如果你对这个方法有疑问,请留下评论-我以前用过很多次李>
另一种方法
继续使用代码,您可以使用这种简单的方法(但请不要…):
因此,你的状况
if (isset($_POST['showPP_ids'])) {
foreach ($_POST['showPP_ids'] as $showPPId) {
将永远找不到未选中的复选框showPP
设置为0
。这样做:
$ppsql=mysql_query("UPDATE istable SET showPP = '0' WHERE id = ".mysql_real_escape_string($showPPId));
当您要将sql字段设置为0时- 您可以这样做(重用查询代码)
- 另一种选择是JavaScript:提供两个复选框,如果另一个复选框未选中,则将“not”-复选框设置为true,或者使用
并在复选框更改时更改其值。如果你对这个方法有疑问,请留下评论-我以前用过很多次李>
另一种方法
继续使用代码,您可以使用这种简单的方法(但请不要…):
干杯,但不是很<代码>isset($\u POST['showPP\u ids'])将始终计算为true。“另一种方法”的前六行执行此操作:
更新istable set showPP=0
。不需要循环。非常感谢您的回复,非常感谢。对您提供的代码进行了尝试,但无法使任何代码正常工作:(有点让awm正常工作,(请参见编辑)。SCheers,但不完全…isset($\u POST['showPP\u ids'))
将始终计算为真。“另一种方法”的前六行执行此操作:更新istable set showPP=0
。无需循环。非常感谢您的回复,非常感谢。对您提供的代码进行了尝试,但无法使任何代码正常工作:(有点了解awm的工作情况,(请参阅编辑).s如果您事先知道字段名,则此方法有效。将此方法与SQL查询结合起来,可以动态创建字段名列表。是的!另一方面,如果您事先不知道字段名,则必须更新整个表……在这种情况下,您可以先将它们全部设置为零,然后通过$\u POST数组循环。您好,非常感谢您的回复:使用您的代码可以让它正常工作,但它只更新第一个结果,而不更新其他结果。下面的代码:$newQuery=mysql\u query(“从ispdfs中选择*,其中assocProp=”。$\u POST['id'].“”);$newResult=mysql\u fetch\u数组($newQuery);foreach($newResult作为$showPP\u id){$val=(int)isset($\u POST['showPP_id'];mysql_查询(“更新ispdfs集showPP=$val WHERE id=“.mysql_real_escape_string($showPP_id));}
是,因为awm的解决方案不经过$\u POST['showPP_id']的字段
@awm:如果$nothing
是一个数组,则可以通过测试来完善代码示例->如果是,则循环它。@all:这仍然不理想。我会收集必要的更新(例如,在查询字符串中使用concat)并在循环中执行mysql_查询,但之后=只执行一次。不确定我是否在跟踪…你是说我需要将我的上述代码包装在if(isset($_POST['linkTitle_ID']){
或if($_POST['linkTitle_ID']){
中吗?如果你事先知道字段名,那么这种方法很有效。将此方法与你的