用php复选框问题

时间:2011-02-24 09:19:46

标签: php javascript

我的问题是当用户点击复选框时,则会激活用户。这段代码工作正常。但是当用户再次单击uncheckbox时,再次用户取消激活。怎么做?这是我的工作代码。

用户点击复选框

时激活用户
if($_GET['doAction'] == 'Activate') {
    if(!empty($_GET['q'])) {
        $userid = $_GET['q'];
        $conn = db_connection();
        $query = "UPDATE user SET activate = '1' WHERE userid = '".$userid."' ";
        $result=$conn->query($query);
    }
}

这是我的复选框

<input type="checkbox" name="app" onchange="callUser(this.value,doAction.value);" value="<?php echo $userid;?>" <?php if($row['approved'] == '1'){ echo "checked=\"true\""; }?>/>
<input type="hidden" name="doAction" id="doAction" value="Approved" />

非常感谢你。 :-) 编辑 - &GT;这是calluser()函数

<script type="text/javascript">
function callUser(str,action,third)
{
 var xmlhttp;    
if (str=="")
{
document.getElementById("txtHint").innerHTML="";
return;
}
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari 
  xmlhttp=new XMLHttpRequest();
}
else
 {// code for IE6, IE5
 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
 }
xmlhttp.onreadystatechange=function()
 {
if (xmlhttp.readyState==4 && xmlhttp.status==200)
 {
 document.getElementById("txtHint").innerHTML=xmlhttp.responseText;

}
}
xmlhttp.open("GET","adminPanel.php?    q="+str+"&doAction="+action+"&app="+third,true);
    xmlhttp.send();
}
 </script>

这是截屏http://i.stack.imgur.com/MpQfC.png

4 个答案:

答案 0 :(得分:4)

您应该发送复选框的状态而不是隐藏的字段值。

onchange="callUser(<?php echo $userid;?>,this.value);"

然后在PHP方面你可以做一个

$userid = $_GET['q'];
if(!empty($_GET['doAction']) {
   ... activate ...
}
else { ... deactivate ... }

此外,请注意您的代码示例和我的anwser都非常不安全。您对SQL注入攻击和潜在的权限问题持开放态度。

编辑:修复不发送用户ID。

答案 1 :(得分:1)

更新:看到刚刚发布的Javascript方法如何破坏网页的默认表单发送功能,请忽略此答案。

提交表单时,未选中的复选框不会传递回服务器。所以,在这种情况下:

if($_GET['doAction'] == 'Activate') {
    if(!empty($_GET['q'])) {
        $userid = $_GET['q'];
        $conn = db_connection();

        if (!empty($_GET['app'])) {
            $query = "UPDATE user SET activate = '1' WHERE userid = '".$userid."' ";
        }
        else {
            $query = "UPDATE user SET activate = '0' WHERE userid = '".$userid."' ";
        }
        $result=$conn->query($query);
    }
}

希望这有帮助

此外,您最好使用参数并将变量绑定到SQL而不是连接字符串。这将有助于防止SQL注入攻击。

答案 2 :(得分:0)

如果用户取消选中复选框,则需要doAction ='停用'? 在这里发布callUser函数的源代码

答案 3 :(得分:0)

另一件事是你不使用值来设置是否检查,

checked="checked"表示在输入标记中启用

然后谁说过它没有被发送是正确的你检测它们的最佳方法是使用a isset($_REQUEST['checkBx'])

E.G

if(isset($_REQUEST['checkbx'])){
  // code for they are enabled
}else{
  // code for they are disabled
}