我一直致力于与餐厅相关的项目,超级管理员和餐馆老板都可以更新餐厅资料。餐厅老板&管理员几乎有相同的字段和&很少是不同的。
我的问题是有一个共同的领域是从一些没有选择一些食物类型。的复选框。当管理员更改复选框状态时,它会完全反映在餐馆老板部分。但是,当餐厅老板更改复选框状态时,它会起作用,但只有当餐馆老板选中复选框时,如果所有者取消选中该复选框,则不会更新。意味着所有者无法取消选中食物类型状态。
我不知道发生了什么,为什么只有在餐馆老板检查任何复选框时才更新,而不是当所有者取消选中任何复选框时。超级管理员方面正确地工作。
让我知道如何解决这个问题。
我用于获取复选框的代码,这不是完整的代码..它仅用于复选框
<?php
$j=0;
$query="SELECT * FROM cuisine ORDER BY name ASC";
$rs=mysql_query($query);
while($rs1=mysql_fetch_array($rs))
{
$qid=$rs1["id"];
$qname=$rs1["name"];
$j=$j+1;
?>
<td width="200" class="style1"><input
<?php $emprolequery="select count(id) as jj from restuarantcuisine where resid='$resid' and cuisineid='$qid' ";
$emprolers=mysql_query($emprolequery) or die(mysql_error());
while($emprolers1=mysql_fetch_array($emprolers))
{
$yes=$emprolers1["jj"];
}
if($yes>0)
{
?> checked="checked"
<?php } ?>
type="checkbox" name="chkq[]" value="<?php echo $qid; ?>" /><?php echo $qname; ?> </td>
<?php
if($j%2==0 && $j!=0)
{
?>
</tr>
<tr><td> </td></tr>
<tr>
<?php }
}?>
以下代码用于接收上述代码中的详细信息......
<?php
ob_start();
session_start();
include("admin/conn.php");
$resid=$_REQUEST['id'];
$txtname=ltrim($_REQUEST['txtname']);
$txtemail=ltrim($_REQUEST['txtemail']);
$txtwebsite=ltrim($_REQUEST['txtwebsite']);
$txtphone=ltrim($_REQUEST['txtphone']);
$txtcellphone=ltrim($_REQUEST['txtcellphone']);
$provider=ltrim($_REQUEST['provider']);
$restaurantemail=ltrim($_REQUEST['restaurantemail']);
$txtaddress=ltrim($_REQUEST['txtaddress']);
$txtcity=strtoupper($_REQUEST['txtcity']);
$txthours=ltrim($_REQUEST['txthours']);
$txtlogo=ltrim($_REQUEST['txtlogo']);
$txtspecialcode=ltrim($_REQUEST['txtspecialcode']);
$txtdescription=addslashes($_REQUEST['txtdescription']);
$rddelivery=ltrim($_REQUEST['rddelivery']);
$delivery_fee="0";
if($rddelivery=='Y')
$delivery_fee=ltrim($_REQUEST['delivery_fee']);
$rdrescall=ltrim($_REQUEST['rdrescall']);
$txtmenu=ltrim($_REQUEST['txtmenu']);
$time1=ltrim($_REQUEST['time1']);
$time2=ltrim($_REQUEST['time2']);
$time3=ltrim($_REQUEST['time3']);
$time4=ltrim($_REQUEST['time4']);
$time5=ltrim($_REQUEST['time5']);
$time6=ltrim($_REQUEST['time6']);
$time7=ltrim($_REQUEST['time7']);
$time11=ltrim($_REQUEST['time11']);
$time22=ltrim($_REQUEST['time22']);
$time33=ltrim($_REQUEST['time33']);
$time44=ltrim($_REQUEST['time44']);
$time55=ltrim($_REQUEST['time55']);
$time66=ltrim($_REQUEST['time66']);
$time77=ltrim($_REQUEST['time77']);
if($_FILES['txtlogo']['name'])
{
$fileimage=$_FILES['txtlogo']['name'];
$ext=substr(strrchr($fileimage,'.'),1);
$rander=rand();
$logoimage=$rander.".".$ext;
$path="logo/".$logoimage;
copy($_FILES['txtlogo']['tmp_name'],$path);
$query="update restuarant set logo='$logoimage' where id='$resid'";
mysql_query($query);
}
if($_FILES['txtmenu']['name'])
{
$fileimage=$_FILES['txtmenu']['name'];
$ext=substr(strrchr($fileimage,'.'),1);
$rander=rand();
$menuimage=$rander.".".$ext;
$path="menu/".$menuimage;
copy($_FILES['txtmenu']['tmp_name'],$path);
$query="update restuarant set menu='$menuimage' where id='$resid'";
mysql_query($query);
}
$query="update restuarant set name='$txtname',address='$txtaddress', phone='$txtphone',cellphone='$txtcellphone',provider='$provider',restaurantemail='$restaurantemail',email='$txtemail', website='$txtwebsite', city='$txtcity',
description='$txtdescription', delivery='$rddelivery',delivery_fee='$delivery_fee', resorcall='$rdrescall', time1='$time1', time2='$time2', time3='$time3', time4='$time4', time5='$time5', time6='$time6', time7='$time7', time11='$time11', time22='$time22', time33='$time33', time44='$time44', time55='$time55', time66='$time66', time77='$time77' where id='$resid'";
//die($query);
//echo $query;
mysql_query($query) or die(mysql_error());
$restuarantid=mysql_insert_id();
$box[]=$_REQUEST['chkq'];
foreach ($box as $key => $value)
{
foreach ($value as $key1 => $value1)
{
$rs = mysql_query("INSERT INTO `restuarantcuisine` ( `resid`, `cuisineid`) VALUES ( '$resid','$value1' );");
}
}
header("Location:restprofile_edit.php?flag=true");
?>
我不是这个网站的原始编码器..这是我正在更新和修复一些问题的其他代码...如果我没有使用正确的方法,那么我如何能够将复选框状态更改为根据我在超级管理部分的需要。
答案 0 :(得分:0)
您需要检查是否已过帐复选框,如果未将其设置为零 例如
$checkbox = ($_POST['checkbox']) ? $_POST['checkbox'] : 0;
因为如果用户没有选中复选框,则它没有通过POST数组发送
答案 1 :(得分:0)
如果选中复选框字段,则它们仅出现在post数组中。您的PHP代码必须考虑到这一点。
假设您的复选框名称为food1,值为1
如果选中,则$_POST['food1']
为'1'
如果未选中,则$_POST['food1']
未定义。
如果您的PHP代码依赖$_POST['food1']
存在,则会出现您描述的问题。
由于您没有显示您的代码,因此这只是一个有根据的猜测。
此代码存在缺陷:
$box[]=$_REQUEST['chkq'];
foreach ($box as $key => $value)
就像我说的那样,不会提交未选中的复选框。因此$box
只会包含已选中复选框的值,但绝不会包含未选中复选框的值。
为了使代码正常工作,您必须从数据库中获取当前复选框的列表,然后与$box
进行比较以删除未选中的复选框。