2014-10-08 45 views
1

我正在編寫一些視頻上傳腳本,現在我正在使用管理控制檯。 在那裏我有一個所有視頻列表。每個視頻在右側都有一個刪除按鈕。 當我點擊按鈕,然後這個視頻應該從數據庫中刪除,但它沒有工作後,我點擊按鈕沒有任何反應。PHP - 從MySQL中刪除項目的按鈕

<?php 

    $query = mysql_query("SELECT * FROM `videos`"); 
    while($row = mysql_fetch_assoc($query)) 
    { 
    $id = $row['id']; 
    $name = $row['name']; 

    echo "<a href='watch.php?id=$id'>$name</a><br /> 
    <input type='submit' name='remove' value='Delete'<br />"; 
} 

    if (isset($_POST['remove'])) 
{ 
     foreach ($_POST['id'] as $the_id) 
     { 
      if (!mysql_query("DELETE FROM videos WHERE id = '$the_id'")) 
      { 
       echo mysql_error(); 
      } 
     } 
} 


?> 

當然在頭上我有mysql連接查詢。這只是列出所有視頻並嘗試刪除的php代碼。

+3

請,或不使用'mysql_ *'功能(http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php) ,它們不再被維護,並且[已正式棄用](https://wiki.php.net/rfc/mysql_deprecation)。學習[準備的語句](http://en.wikipedia.org/wiki/Prepared_statement),並使用[PDO](http://us1.php.net/pdo)或[MySQLi](http:// us1.php.net/mysqli)。 [本文](http://php.net/manual/en/mysqlinfo.api.choosing.php)將幫助你決定。 – 2014-10-08 15:31:45

+0

你在使用表格嗎?您需要爲每個視頻製作一個表單。 – 2014-10-08 15:33:29

+0

定義「沒有任何反應。」該頁面是否不會發布到服務器?如果是這種情況,那麼問題不在於服務器端代碼,而是客戶端。如果頁面發佈到服務器,是否存在期望的表單值?服務器端代碼的行爲如何?哪裏*具體*這是否失敗? – David 2014-10-08 15:33:55

回答

0

這裏是庫MySQLi這樣做,包括綁定參數,以避免SQL注入的例子 -

if (isset($_POST['remove'])) { 
    $remove = $mysqli->prepare("DELETE FROM `videos` WHERE `id` = ?"); 

    $vid_id = $_POST['vid_id']; 
    $remove->bind_param('s', $vid_id); 

    if(!$remove->execute() === true) { 
     echo $mysqli->error;    
    } 
} 

$query = "SELECT * FROM `videos`"; 

if ($result = $mysqli->query($query)) { 
    while($row = $result->fetch_object()){ 
     $id = $row->id; 
     $name = $row->name; 
     echo "<a href='watch.php?id=$id'>$name</a><br />"; 
     echo "<form name='delete_vid' method='post'>"; 
     echo "<input type='hidden' name='vid_id' value='$id'>"; 
     echo "<input type='submit' name='remove' value='Delete'<br />"; 
     echo "</form>"; 
    } 
} else { 
    echo mysqli_error($connection); 
} 
$result->close(); 

當然,你必須提供一個$ connection`到數據庫,但是這應該讓你不僅可以開始使用MySQLi,還可以爲每個視頻添加一個表單。

More on SQL Injection

+0

我只是嘗試你的代碼,但現在它不顯示任何視頻...因爲我使用MySQL開始連接到數據庫,你的代碼是MySQLi? – Jerome 2014-10-08 15:55:01

+0

同意@tadman,只是想讓OP開始,並且是Jerome,你必須修改所有的東西以使用[MySQLi函數](http: //php.net/manual/en/book.mysqli.php) – 2014-10-08 15:56:57

+0

Leaving al在代碼中間使用的代碼是一個糟糕的主意,尤其是沒有任何警告。 – tadman 2014-10-08 15:58:17

0

也許問題出在html中,每個刪除按鈕都必須是獨立的形式,並帶有一個帶有id的隱藏輸入。

echo "<a href='watch.php?id=$id'>$name</a><br /> 
    <form method='post'><input type='hidden' value='$id'><input type='submit' name='remove' value='Delete'<br /></form>"; 
+0

謝謝!我試了一下,但沒有工作......它加載頁面1秒,沒有任何反應..並且條目仍在MySQL – Jerome 2014-10-08 15:43:22

+0

隱藏的輸入需要一個名稱 - >' – Sean 2014-10-08 15:45:00

+0

即使當我給你輸入一個像你這樣的名字時,它仍然可以工作。 :( – Jerome 2014-10-08 15:47:25

-1
<form method="post" > 
<?php 

    $query = mysql_query("SELECT * FROM `videos`"); 
    while($row = mysql_fetch_assoc($query)) 
    { 
    $id = $row['id']; 
    $name = $row['name']; 

    echo "<a href='watch.php?id=$id'>$name</a><br /> 
    <button name='id' value='".$id."' type='submit' >Delete</button> 
    <br />"; 
} 


      if (!mysql_query("DELETE FROM videos WHERE id = '".$_POST['id']."'")) 
      { 
       echo mysql_error(); 
      } else { 
       echo 'successfully deleted'; 
      } 



?> 
</form> 
+0

**警告**這將導致每個視頻被刪除! – Sean 2014-10-08 15:47:07

+0

是的,我剛剛看到它:D .... – Jerome 2014-10-08 15:48:57

+1

如果你要提供一個答案,請[不要使用'mysql_ *'函數](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php) – 2014-10-08 15:54:22