2013-03-08 61 views
0

我已經更新了代碼,但不斷收到新的錯誤。 我真的希望有人能幫助我,看看我的代碼,看看有什麼不對。 我有一個網頁上的數據庫表,我有一個編輯按鈕和每個錶行上的一個刪除按鈕。目前我只是試圖讓刪除按鈕工作,即使我選擇了該ID,它也不會刪除數據庫中的行。它看起來像是在拾取正確的ID。我的代碼有什麼問題?數據不會從數據庫中刪除

有人可以說出了什麼問題嗎?以下是代碼...

<?php 

    require 'connect.inc.php'; 

    if (isset($_POST['delete']) && isset($_POST['id'])) { 
     $id = get_post('id'); 
     $query = "DELETE FROM movies WHERE id='.$id.' LIMIT 1"; 

     if (!mysql_query($query, $db_server)) 
      echo "DELETE failed: $query<br>". 
      mysql_error() . "<br><br>"; 
    } 

    $query = "SELECT * FROM movies, categories WHERE movies.genre_id = categories.genre_id"; 
    $result = mysql_query($query); 

    if (!$result) die ("Database access failed:" .mysql_error()) ; 
    $rows = mysql_num_rows($result); 

    echo '<table><tr><th>Title</th><th>Release year</th><th>Genre</th><th>Director</th><th>Update</th><th>Delete</th></tr>'; 

    for ($j = 0 ; $j < $rows ; ++$j) { 
    $row = mysql_fetch_row($result); 
    //$id = $row[0]; 
    echo '<tr><td>' .$row[1] . '</td>' ; 
    echo '<td>' .$row[2] . '</td>' ; 
    echo '<td>' .$row[3] . '</td>' ; 
    echo '<td>' .$row[4] . '</td>' ; 
    echo '<td>'."<a href='edit_movie.php?edit=" . $row[0] . "'>Edit</a>".'</td>'; 
    echo '<td><form action="index.php" method="POST"> 
       <input type="hidden" name="delete" value="yes" /> 
       <input type="hidden" name="id" value="'. $row[0] .'" /> 
       <input type="submit" value="Delete" /></form> 
       </td></tr>' ; 
    } 
    echo '</table>'; 

    include 'add_movie.php'; 

?> 
+0

請不要使用mysql_ *函數。他們[已棄用](http://php.net/manual/en/intro.mysql.php)。通過[PDO](http://php.net/pdo)或[MySQLi](http://php.net/mysqli)使用[預先準備的語句](http://goo.gl/vn8zQ)。 – peterm 2013-03-08 03:37:11

+0

@peterm嗨!感謝您的評論!我知道,但它是一個學校作業,我們想用這個...我是一個初學者,所以還沒有讀過那些其他技巧: – Lisa 2013-03-08 03:40:51

+0

你的get_post()函數在哪裏定義? – Sean 2013-03-08 03:44:34

回答

1

只是要清楚:「 mysql_query'和附帶的命令已被棄用,應該不會被使用。然而,OP表示它是一項任務所必需的。取而代之的最簡單方法是使用'mysqli_ *'。對於使用參數綁定,以避免SQL注入的例子: http://www.php.net/manual/en/mysqli-stmt.bind-param.php

它不應該是:

if (isset($_POST['delete']) && isset($_POST['id'])) { 
     $id = mysql_real_escape_string($_POST['id']); 
     ... 

請參閱此鏈接上 'get_post' 一些信息: PHP: Having a problem with get_post

問題有一個函數'get_post'被定義在課程文獻的下一頁,這個提問者沒有注意到。

變量$ _POST ['id']包含通過HTTP POST請求從表單發送的id值。你檢查是否設置了這個值,然後你應該像我寫的那樣將它賦值給'$ id'。

+0

哦,也許我應該交換$ id = get_post('id');到是什麼?事情是我坐在我的書裏,並沒有完全理解我所做的一切:( – Lisa 2013-03-08 03:51:46

+0

是的,這就是我的意思。'get_post'不是一個標準的php函數,請參閱鏈接 – Whistletoe 2013-03-08 03:55:07

+0

已經改變了它,但關閉當我得到另一個錯誤。我認爲我是如此接近在解決這個問題:( – Lisa 2013-03-08 03:57:41

2

您忘記關閉操作屬性。

你有echo '<td><form action="index.php method="POST">將其更改爲

echo '<td><form action="index.php" method="POST"> 
+0

謝謝!我沒有看到!但是現在我得到了這個錯誤:致命錯誤:調用未定義的函數get_post()在C:\ Program Files文件(x86)\ EasyPHP-12.1 \ www \ mymovielibrary \ index.php在線19 – Lisa 2013-03-08 03:38:58

+1

@Karolina我看不到get_post ()在你的頁面中的定義.. ??確保函數包含在index.php文件中。 – 2013-03-08 03:41:34

+0

謝謝你的幫助! – Lisa 2013-03-08 04:03:22

0

您刪除SQL有錯誤報價

$query = "DELETE FROM movies WHERE id='.$id.' LIMIT 1"; 

更改爲

$query = "DELETE FROM movies WHERE id=".$id." LIMIT 1"; 

$query = "DELETE FROM movies WHERE id=$id LIMIT 1"; 
+0

謝謝你的幫助!問題解決了! – Lisa 2013-03-08 04:03:48

0

嘗試改變形式的行動

'<td><form action="index.php" method="POST"> 

另外,請檢查您的數據庫連接正確建立

或許,這可能會幫助get_post

PHP: Having a problem with get_post

+0

謝謝!我沒有看到我錯過了「mark :(但是我現在有一個新的錯誤:(只是更新了這個問題。) – Lisa 2013-03-08 03:43:39

+1

請檢查上面的鏈接get_post – GBRocks 2013-03-08 03:47:33

+0

也許我應該拿走嗎?我真的不使用get_post任何地方...我應該換成$ id = $ _POST ['id'];? – Lisa 2013-03-08 03:52:44

相關問題