2016-12-11 96 views
0

我目前正在研究酒店預訂系統。我無法刪除數據庫中的行/記錄。 PHP/MYSQLi

我正在專門研究刪除我正在處理的測試數據庫中的字段。

我可以查看(SELECT)數據庫的內容並將其放在表中,如果需要,我也想刪除它。

但我無法讓它工作。

管理員端/表的代碼。

// get the records from the database 
if ($result = $mysqli->query("SELECT * FROM guestdetails")) { 
    // display records if there are records to display 
    if ($result->num_rows > 0) { 
    // display records in a table 
    echo "<table class = \"table\">"; 

    // set table headers 
    echo "<tr> 
      <th>Guest ID</th> 
      <th>First Name</th> 
      <th>Last Name</th> 
      <th>Email</th> 
      <th>Contact Number</th> 
      <th>Extra Requests</th> 
      <th>Gender</th> 
      <th>Action</th> 
     </tr>"; 

    while ($row = $result->fetch_object()) { 
     // set up a row for each record 
     echo "<tr>"; 
      echo "<td>" . $row->user_id . "</td>"; 
      echo "<td>" . $row->firstname . "</td>"; 
      echo "<td>" . $row->lastname . "</td>"; 
      echo "<td>" . $row->email . "</td>"; 
      echo "<td>" . $row->contactnumber . "</td>"; 
      echo "<td>" . $row->requestMessage . "</td>"; 
      echo "<td>" . $row->gender . "</td>"; 
      // edit function, under construction 
      // echo "<td><a href='records.php?id=" . $row->id . "'>Edit</a></td>"; 
      echo "<td><a href='../guestdetails/deleteGuestDetails.php?id=" . $row->user_id . "'>Delete</a></td>"; 
     echo "</tr>"; 
    } 

echo "</table>"; 

// if there are no records in the database, display an alert message 
} else { 
echo "No results to display!"; 
} 

// show an error if there is an issue with the database query 
} else { 
echo "Error: " . $mysqli->error; 
} 

// close database connection 
$mysqli->close(); 

這工作得很好。

下面是delete.php代碼

<?php 

// connect to the database 
include('dbConnect.php'); 

// confirm that the 'id' variable has been set 
if (isset($_GET['user_id']) && is_numeric($_GET['user_id'])) { 

// get the 'id' variable from the URL 
$user_id = $_GET['user_id']; 

// delete record from database 
if ($stmt = $mysqli->prepare("DELETE FROM guestdetails WHERE user_id = ? LIMIT 1")) { 
    $stmt->bind_param("i",$user_id); 
    $stmt->execute(); 
    $stmt->close(); 

} else { 
    echo "ERROR: could not prepare SQL statement."; 
} 

$mysqli->close(); 

// redirect user after delete is successful 
header("Location: ../admin/mainADMINreserve.php"); 

// if the 'id' variable isn't set, redirect the user 
} else { 
    header("Location: ../admin/mainADMINreserve.php"); 
} 

?> 

我認爲問題就出在這裏某處此代碼:(mainADMINreserve.php)

echo "<td><a href='../guestdetails/deleteGuestDetails.php?id=" . $row->user_id . "'>Delete</a></td>"; 

,它並沒有設置在這裏:(delete.php)

if (isset($_GET['user_id']) && is_numeric($_GET['user_id'])) { 

這就是爲什麼我總是重定向到的該else部分代碼在delete.php中。

我一直在學習幾個小時,但我無法得到它的工作。順便說一下,我從不同的網站上得到了一段代碼,比如這個here。它幫助我創造了很多,但我在刪除中遇到了問題。什麼似乎是問題?非常感謝您提前! ![enter image description here] 如果有人好奇,這就是它在表格中的樣子。對不起,我不得不隱藏內容,但重點是我可以查看我從我的數據庫輸入的字段。問題在於代碼中所述的刪除按鈕。

+1

非常好的第一個/第二個問題。對你有好處! –

+1

這是一個錯字問題。你正在使用這個GET數組''_GET ['user_id']'還有''id' –

+0

@noɥʇʎPʎzɐɹC謝謝! :D在這樣的社區獲得幫助是一個很大的幫助。 – Kenny

回答

1

它應該是<td><a href='../guestdetails/deleteGuestDetails.php?user_id=。參數名稱和GET索引名稱​​應匹配。

+1

它的完全有效,並且通常是一個好主意 –

+0

如果'user_id'是唯一的,那麼不需要LIMIT。如果它不是唯一的,則應在DELETE查詢中使用主鍵以避免錯誤的行爲。 –

+0

非常感謝! '?user_id ='是個問題。 :) – Kenny