2012-07-27 44 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