2010-12-22 58 views
0

PHP代碼不會使用「$ noteid」從數據庫中刪除項目。如果我在它的位置放置一個數字,但是當我嘗試使用「$ noteid」時。它不會這樣做。它會一切正確地嘗試刪除。PHP不會從MySQL中刪除

下面是如何獲得 「$ noteid」:

//javascript 
function viewnote(noteid) { 

    window.location = "noteview.php?noteid=" + noteid; 

} 

//button in body 
<input type="button" value="Edit" onclick="editnote('<?= $noteid ?>')" /> 

下面的代碼的鏈接頁面:

<?php 

$noteid = $_REQUEST['noteid']; 

if (isset($_POST['delete'])){ 
mysql_query("DELETE FROM notes WHERE noteid='$noteid'"); 
header ('Location: index2.php'); 
} 
?> 

<body> 
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" style="margin:0px; pading:0px"><input type="submit" name="delete" value="Delete"></form> 
</body> 

**它的工作現在! ** 它的工作原理是一個隱藏的表單字段。

下面的代碼:

<?php 
if (isset($_POST['delete'])){ 
     $nid = $_REQUEST['notenum']; 
    mysql_query("DELETE FROM notes WHERE noteid='$nid'"); 
    header ('Location: index2.php'); 
} 
?> 

//body cody 
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" style="margin:0px; pading:0px"><input type="text" name="notenum" value="<?php echo $noteid; ?>" style="display:none" /><input type="submit" name="delete" value="Delete"></form> 

感謝大家的幫助!這個網站現在是我最喜歡的網站。

+1

可能是$ _REQUEST ['noteid']爲空。嘗試`vardump($ _ REQUEST)`並且看看你正在使用什麼。 – dnagirl 2010-12-22 14:23:06

+2

$ noteid =「'; drop table notes; - 」; – DampeS8N 2010-12-22 14:24:26

+0

請注意`<?php echo $ _SERVER ['PHP_SELF']; ``也是一個潛在的XSS漏洞。它不應該被使用。 – eis 2012-12-07 07:53:33

回答

1

您遇到的問題是$_REQUEST['noteid']將不會在表格發佈後設置。在這種情況下,您可以添加一個隱藏的表單字段來存儲查詢字符串中的值。您還需要看看與mysql_real_escape_string消毒你的變量,並使用$_GET$_POST而不是$_REQUEST

5

您使用了很多不好的做法:

<?= $noteid ?> 

不支持所有的PHP版本,改用以下:

<?php echo $noteid; ?> 

其次,

mysql_query("DELETE FROM notes WHERE noteid='$noteid'"); 

停在那裏。 Go learn about SQL injection before coding.我不是在開玩笑。 權代碼:

mysql_query('DELETE FROM notes WHERE noteid="'.mysql_real_escape_string($noteid).'"'); 

還要確保PHP可變$noteid不之前onclick="editnote(...)" />存在。

1

請考慮使用Binds and Prepared statements。幾乎所有來自「x from PHP的問題都不適用於SQL」的問題可以通過使用預準備語句來解決。