2012-07-27 46 views
0

我花了几个小时在这个没有运气。我试图删除已用复选框标记的列表元素,并在之后按下删除按钮。每个复选框都有一个html id属性,用于关联实际的ID列值。我使用MySQL的语句删除基于适当的IDS行(我可以删除从HTML元素,但不是MySQL表)

"DELETE FROM todolist WHERE ID IN (".$_GET['id'].")" 

例如ID ... ID =“456444454”

javascript会通过并找到选中框的id值并将它们发送到php文件。这部分没有问题。从警报中,我可以验证它是否提供了正确的ID。这是按下删除按钮时调用的方法。

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 

}

这里是没有连接东西,我的PHP代码。它使它成为声明。

if(isset($_GET['id'])){ 
    $q+="DELETE FROM todolist WHERE ID IN (".$_GET['id'].")"; //line 13 
    mysql_query($q) or die(mysql_error()); 
echo "tried to delete stuff"; 
} else { 
echo("Bad delete"); 
} 

响应回波已经变了一下,因为我已经修改了$ Q字符串,但最近这个简单的版本,它已经打印了MySQL错误 -

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

如果我使用

"DELETE FROM todolist WHERE ID IN ("+$_GET['id']+")" 

我得到的错误 - 注意:未定义的变量:●在C:\ XAMPP \ htdocs中\待办事项\ removeTasks.php上线13 你在你的SQL语法错误;请检查与您的MySQL服务器版本对应的手册,以在第1行'457'附近使用正确的语法。

457是第一个ID。

新到这里和MySQL,所以让我知道,如果我留下任何东西。

+3

“删除...使用$ _GET” ** NOOOOOOOOOOO !!!!!!!!!! ** – 2012-07-27 01:12:19

+0

雅,我知道...这不是对任何公众使用也不用担心;只是想完成这件事。 – user1556328 2012-07-27 01:34:06

+0

也使用未转义的$ _GET进行删除。 – ceejayoz 2012-07-27 01:34:08

回答

0

您会收到一条通知,因为您的变量“q”未定义,您尝试向其添加内容。你会得到一个sql错误,因为“+”是用于php中的数字,与javascript不同。所以你的sql语句可能会被转换为零,这就是为什么你会得到“0”错误。该correnct方法是:

$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()); 
} 

你学习PHP或这是一个实际的应用程序?正如有人说,这不是一个好办法。 GET不应该用于任何对您的数据进行永久更改的内容。你应该有一个POST表单和一些隐藏字段来检查请求是否来自该表单。 而你应该使用mysql转义函数,因为查询后可能插入任何东西。查看mysql注入了解更多信息。

好运

+0

雅,只是使它成为一个等号;加号是从使用和数组和东西遗留下来的。感谢第二组的眼睛,并得到最后的改变。 – user1556328 2012-07-27 01:32:52