从javascript到php使用$\u GET和ID列表删除多行MySQL

从javascript到php使用$\u GET和ID列表删除多行MySQL,php,mysql,Php,Mysql,我花了好几个小时在这件事上,运气不好。我正在尝试删除用复选框标记的列表元素,然后按delete按钮。每个复选框都有一个与实际id列值相关的html id属性。我使用MySQL语句根据适当的ID删除行(我可以从html中删除元素,但不能从MySQL表中删除) 示例id。。。id=“45644454” javascript遍历并找到复选框的id值,并将其发送到php文件。这部分很好。从警报语句中,我可以验证它是否提供了正确的ID。下面是按下delete按钮时调用的方法 function remove

我花了好几个小时在这件事上,运气不好。我正在尝试删除用复选框标记的列表元素,然后按delete按钮。每个复选框都有一个与实际id列值相关的html id属性。我使用MySQL语句根据适当的ID删除行(我可以从html中删除元素,但不能从MySQL表中删除)

示例id。。。id=“45644454”

javascript遍历并找到复选框的id值,并将其发送到php文件。这部分很好。从警报语句中,我可以验证它是否提供了正确的ID。下面是按下delete按钮时调用的方法

function removeCheckedTask(){
var checkBoxes = $('toDoList').getElementsByClassName('box');
var deletedID = new Array(); var indexID =0;
for (var i = 0; i < checkBoxes.length; i++) {
  if (checkBoxes[i].checked){
        deletedID[indexID]=checkBoxes[i].getAttribute('id');indexID++;
        var par = checkBoxes[i].parentNode;
        $('toDoList').removeChild(par);
        i--;
        for(var a=i+1; a<checkBoxes.length; a++){//moves other elements
            par = checkBoxes[a].parentNode;
            par.style.top = (a*40)+"px";
        }
    }

}
if(deletedID.length>0){
    $('message').innerHTML = "Just a second..."
    // Set te random number to add to URL request
    nocache = Math.random();
    // Pass the login variables like URL variable
    var ids = 'id='+deletedID[0];
    for(var i=1; i<deletedID.length; i++){
        ids+= ',' + deletedID[i];
    }
    alert('removeTasks.php?'+ids);
    http.open('get', 'removeTasks.php?'+ids);
    http.onreadystatechange = deleteReply;
    http.send(null);
    }
    function deleteReply() {
    if(http.readyState == 4){ 
        var response = http.responseText;
        $('message').innerHTML = 'Task removed:'+response;
    }
}

resetIDs();//resets ids of list elements, don't worry about it
由于我对$q字符串进行了更改,所以响应echo有点变化,但是最近在这个简单的版本中,它一直在打印MySQL错误-

注意:第13行的C:\xampp\htdocs\todo\removeTasks.php中的未定义变量:q 您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“0”附近使用的正确语法。如何进入if语句,然后说它是未定义的

如果我使用

"DELETE FROM todolist WHERE ID IN ("+$_GET['id']+")"
我在第13行的C:\xampp\htdocs\todo\removeTasks.php中得到了错误-注意:未定义的变量:q 您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“457”附近使用的正确语法

457是第一个身份证


这里和mysql都是新的,如果我遗漏了什么,请告诉我。

您会收到通知,因为您的变量“q”没有定义,您试图添加一些内容。您会得到一个sql错误,因为与javascript不同,“+”在php中表示数字。因此,sql语句可能会转换为零,这就是为什么会出现“0”错误。正确的方法是:

$q .= "DELETE...";
另外,我建议单独调用每个查询,因为这样您就可以返回每个查询的结果(或错误):

你是在学习php还是它是一个实际的应用程序?因为正如前面有人说的,这不是一个好方法。GET不应用于对数据有永久更改的任何内容。您应该有一个POST表单和一些隐藏字段来检查请求是否确实来自该表单。 您应该使用mysql转义函数,因为在查询之后可以插入任何内容。有关更多信息,请查阅mysql注入


祝你好运

“删除…使用$\u GET”noooooooo!!!!!!!!!!是的,我知道……它不是供任何公众使用的,别担心;我只是想完成这项工作。也可以使用unescaped$\u get删除。哈哈,我知道我知道;黑客会抓住我的。这是一个介绍夏季网页设计的课程,我们刚刚开始学习AJAX。而且,我只使用JEE为另一个班级开发了一个web应用程序。所以,我做的每件事都是第一次。是的,只是让它成为一个等号;加号是使用和数组以及其他东西留下的。谢谢你的第二双眼睛和最后的改变。
"DELETE FROM todolist WHERE ID IN ("+$_GET['id']+")"
$q .= "DELETE...";
 $q = null;
 $ids = explode(",",$_GET["id"]);
 foreach($ids as $id) {
      $id = (int)$id; //VERY basic security thing
      $q = "DELETE FROM todolist WHERE ID = ".$id;
      mysql_query($q) or die(mysql_error());
 }