2012-02-24 28 views
0

下面是我一直試圖用來從mysql數據庫中刪除一行的代碼。我一直在搜索論壇,但我還沒有找到問題。我知道我的連接工作正常,因爲我可以毫無問題地使用INSERT INTO命令。我確信很明顯,我是新手,尋找簡單的解決方案。PHP使用DELETE FROM刪除mysql中的行

<?php 

$_POST[title]; 
$jimmy = $_POST[title]; 
echo $jimmy; ## this echo is here to make sure I was getting form data sent over  correctly 
include("dogs.inc"); 
$cxn = mysqli_connect($host,$user,$passwd,$dbname) 
     or die("Couldn't connect to server"); 

$sql = "DELETE FROM ashly3 WHERE title = '$jimmy' " ; 
mysqli_query($cxn, $sql); 

include("ashly.php"); 


?> 
+0

你得到的錯誤是什麼?你確定有一行標題符合'$ jimmy'的值嗎?也請清理您的用戶輸入。 – 2012-02-24 16:51:56

+1

啊,它是'$ jimmy',加入''jimmy',[小巴比表](http://imgs.xkcd.com/comics/exploits_of_a_mom.png)期待你。 – soulmerge 2012-02-24 16:52:09

+0

嘗試改變這個'mysqli_query($ cxn,$ sql);'到'mysqli_query($ cxn,$ sql)或死('執行查詢錯誤');' – 2012-02-24 16:55:02

回答

1
$jimmy = $_POST[title]; 

$jimmy = $_POST['title']; 

但是,這並不是它不工作的原因,PHP應該修正你的錯誤與警告。

另外,從$_POST插入文本而不會轉義會導致SQL注入麻煩。試想一下,如果用戶在標題文本字段中插入hello' OR 1。使用http://phptutorial.info/?mysqli.real-escape-string

+0

我把報價放進去,沒有成功,就像你想的那樣。 php文件由主機控制,因此可能需要一點點才能修復。 – James30 2012-02-24 18:14:07

-1

嘗試突破變量出$ SQL行:

$sql = "DELETE FROM ashly3 WHERE title = '".$jimmy."' " ; 
+0

爲什麼這會有幫助? – 2012-02-24 16:53:43

+0

它不會。浪費評論。 – Basti 2012-02-24 16:54:55

+0

這可能有幫助,因爲它使事情變得更清晰。它也可能導致$變量成爲字面名稱,即放入字符串「$ jimmy」。 – Ocracoke 2012-02-24 17:36:06

0

的一種方法是這樣,這是爲我工作

<?php 
require '../access/dbaccess.php'; 
$dtlname= $_POST['remove_dtlname']; 
mysql_query("delete from `sample_tbl` where `dtl_name`='$dtlname'"); 
?> 

哪裏dbaccess.php是

<?php 
$link = mysql_connect('<your server>', '<username>', '<password>'); 
     if (!$link) 
      die('Could not connect: ' . mysql_error()); 
mysql_select_db('btp'); 
?> 
+0

他正在使用'mysqli',而且你的代碼很容易受到SQL注入的影響。我不會向新人提出這個建議。 – Basti 2012-02-24 16:59:53

+0

是的,我知道這很簡單..只是建議這樣的技術可能工作 – 2012-02-24 17:01:25

+0

然後爲http://xkcd.com/327的愛請清理用戶輸入'$ dtlname = mysql_real_escape_string($ _ POST ['remove_dtlname' ]);'。我們不會教導有缺陷的例子。 – Basti 2012-02-24 17:08:39

1

你應該真的考慮對數據庫使用PDO。
無論如何,爲您的解決方案,以識別錯誤:試試這個:
mysqli_query($ cxn,$ sql)或die(mysqli_error());

另外,請使用mysqli_real_escape_string()在你的用戶輸入:)

+0

你能給我一個你認爲我應該使用的代碼的概念嗎?謝謝您的幫助。 – James30 2012-02-24 20:48:19

+0

使用PDO連接到數據庫後,您可以這樣做: $ sql =「從sample_tbl中刪除,其中dtl_name' =:dtl_name」; $ param [':dtl_name'] =數組($ dtlname,PDO :: PARAM_STR); $ result = $ db-> query($ sql,$ param); – mewm 2012-03-08 10:42:40

1

,我認爲你的錯誤是$ _ POST [標題]應該是$ _ POST [「標題」],反正試試這個代碼。

<?php 
error_reporting(E_ALL); 
//$_POST[title]; 
$jimmy = $_POST['title']; 
echo $jimmy; ## this echo is here to make sure I was getting form data sent over  correctly 
include("dogs.inc"); 
$cxn = mysqli_connect($host,$user,$passwd,$dbname) 
     or die("Couldn't connect to server"); 

$sql = 'DELETE FROM `ashly3` WHERE title = \''.mysqli_real_escape_string($cxn,$jimmy).'\''; 

$retval=mysqli_query($cxn, $sql); 
echo "retval:";var_dump($retval); 
if($retval===false) 
{ 
echo "mysqli_error:";var_dump(mysqli_error($cxn)); 
} 
include("ashly.php"); 


?>