我的问题是当用户点击复选框时,则会激活用户。这段代码工作正常。但是当用户再次单击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>
答案 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
}