2014-03-27 96 views
-4

我在這裏做錯了什麼?我試圖創建一個表格,每行旁邊都有一個刪除按鈕/鏈接,點擊後刪除該行。爲什麼我的PHP刪除按鈕不起作用?

<?php 

ini_set('display_errors',1); 
error_reporting(E_ALL); 

mysql_connect('localhost', 'root', 'ca229'); 

mysql_select_db('testdb'); 

$result = mysql_query('select * from products'); 

$numrows = mysql_numrows($result); 

//**************************************************************** 
print "<table border = 3 style = width:400px>"; 


for($i = 0; $i < $numrows; $i++) 
{ 
    $row = mysql_fetch_row($result); 

    print "<tr>"; 


    foreach($row as $cell) 
    { 

     print "<td>"; 
     print $cell; 
     print "</td>"; 



    } 
     print "<td><a href='delete.php?id=".$row["id"] ."' >Delete</a> " ; 


    print "</tr>"; 


} 


print "</table>"; 
//*************************************************************** 

mysql_close(); 

?> 

和...

<?php 

$id = $_GET["id"]; 
$delete = " DELETE * from products where id = ". $id ; 

mysql_query($delete) ; 

?> 
+0

嘗試,並把你刪除''Delete你'裏面的foreach($行爲$細胞)'循環。另外,如下所述,在刪除後刪除'*' –

+0

您是否收到錯誤消息?究竟發生了什麼? –

+1

如果這是一個在公共互聯網上的應用程序,我會更關注**巨大的[SQL注入漏洞](http://bobby-tables.com/),因爲你完全不顧一切[正確的轉義做法](http://bobby-tables.com/php)。請不要用'mysql_query'編寫新的代碼,因爲它很糟糕,並且在不久的將來會從PHP中刪除。 – tadman

回答

1

添加數據庫連接線delete.php文件的開頭。

mysql_connect('localhost', 'root', 'ca229'); 
mysql_select_db('testdb'); 

您需要打開mysql_query連接才能在您的數據庫上工作。

1

在我們繼續討論這些好東西之前,讓我先指出原始錯誤的來源。由於$row = mysql_fetch_row($result);創建了一個枚舉數組(如:array(0 =>'value1',1 =>'value2',...)),而不是關聯數組,所以$row["id"]將不確定。這仍然會生成HTML,但所有的刪除按鈕都沒有指定id。

這條線:

$delete = "DELETE * from products where id = ". $id; 

你不需要*只是做:

$delete = "DELETE from products where id = ". $id; 

現在,好東西)---順便說一句,我使用了id - product - city作爲列示例。

這是mysqli_*版本。將xxx替換爲您的數據庫憑證。

<?php 
ini_set('display_errors',1); 
error_reporting(E_ALL); 

DEFINE ('DB_HOST', 'xxx'); 
DEFINE ('DB_USER', 'xxx'); 
DEFINE ('DB_PASSWORD', 'xxx'); 
DEFINE ('DB_NAME', 'xxx'); 

$db = mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) 
OR die("could not connect"); 

$results = mysqli_query($db,"select * from products"); 

print "<table border=1 cellspacing=\"0\" cellpadding=\"3\">\n"; 

echo "<tr>\n"; 
echo '<td width="25%"> 
     <p align="center">ID</td> 
    <td width="25%"> 
     <p align="center">PRODUCT</td> 
    <td width="25%"> 
     <p align="center">CITY</td> 
    <td width="25%"> 
     <p align="center">ACTION</td> 
    </tr>'; 

while ($row = mysqli_fetch_assoc($results)) { 

    print "<tr><td>" . $row['id'] . "</td>\n<td>" . $row['product'] . "</td>\n" . "<td>" . $row['city'] . "</td>\n" . "<td>\n" . "<a href='delete.php?id=".$row["id"] ."'>Delete</a>\n</td>\n</tr>\n"; 

} 

print "</table>\n"; 

echo "<hr>"; // simply a seperator. You can delete this 

mysqli_close($db); 

?> 

刪除代碼 - mysqli_*(delete.php)

<?php 
DEFINE ('DB_HOST', 'xxx'); 
DEFINE ('DB_USER', 'xxx'); 
DEFINE ('DB_PASSWORD', 'xxx'); 
DEFINE ('DB_NAME', 'xxx'); 

$db = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) 
OR die("could not connect"); 

$id = (int)$_GET["id"]; 

$delete = "DELETE from products where id = ". $id; 
// You can also use 
// $delete = "DELETE from products where id=$id"; 

if (mysqli_query($db,$delete)) 
    { 
    echo "Database updated successfully"; 
    } 
else 
    { 
    echo "An error occurred: " . mysqli_error($db); 
    } 

?> 

mysql_*功能取消通知:

http://www.php.net/manual/en/intro.mysql.php

此擴展從PHP 5.5.0開始不推薦使用,不建議用於編寫新代碼,因爲它將在未來刪除。相反,應使用mysqliPDO_MySQL擴展名。請參閱MySQL API Overview以獲取進一步幫助,同時選擇MySQL API。

這些函數允許您訪問MySQL數據庫服務器。有關MySQL的更多信息,請參見»http://www.mysql.com/

有關MySQL的文檔可以在»http://dev.mysql.com/doc/找到。

這裏是準備語句的一些教程,你可以學習和嘗試:

這裏有幾個教程上PDO:

+0

你對他的過程和循環結果的解釋完全不正確。 –

+0

不好意思?你需要詳細說明。我不提交*只是cuz * @DanielWilliams - 我用OP的代碼在循環之外測試了它,它不起作用。我建議你自己測試一下,沒有根據的證據。 -1也是不被要求的(來自誰低估了它)。 –

+0

您對$ cell ['id']的解釋不正確。他正在遍歷行的列,因爲行是一個簡單的數組,然後嘗試像關聯數組那樣使用它(這是他的錯誤)。根據他的假設,他的印刷品也處於良好的位置。所以它當然不起作用。但不是因爲你給的原因。 –