mySQL 到 PHP 带有删除整个记录的删除按钮的下拉列表
mySQL to PHP DropDown List with a delete button that removes entire record
大家好。我想创建一个下拉列表,其中包含一堆图书馆书籍,这些书籍来自 mySQL 数据库中名为“图书馆”的 table。
我能够创建一本书添加到 img 中显示的 table 部分。我无法正确使用我的下拉列表。
删除部分的代码是:
<?php $result = mysqli_query($conn, "DELETE FROM library WHERE 'Book_ID' = '$_GET[Book_ID]'");?>
<?php $result = mysqli_query($mysqli, "SELECT * FROM library"); ?>
<table>
<select>
<option>
<tr>
<td>Book_ID</td>
<td>Author</td>
<td>Author_Age</td>
<td>Author_Genre</td>
<td>Genre</td>
<td>Book</td>
<td>Year</td>
<td>Age_Group</td>
<td>Author_ID</td>
</tr>
</option>
</select>
<?php
$i = 0;
while($row = mysqli_fetch_array($result)) {
?>
<tr>
<td><?php echo $row['Author']; ?></td>
<td><?php echo $row['Author_Age']; ?></td>
<td><?php echo $row['Author_Genre']; ?></td>
<td><?php echo $row['Genre']; ?></td>
<td><?php echo $row['Book']; ?></td>
<td><?php echo $row['Year']; ?></td>
<td><?php echo $row['Age_Group']; ?></td>
<td><?php echo $row['Author_ID']; ?></td>
<td><?php echo $row['Book_ID']; ?></td>
<td><a href="deleteProcess.php?Book_ID=<?php echo $row["Book_ID"]; ?>">Delete</a></td>
<?php echo "<td><a href=\"deleteProcess.php?id=".$row['Book_ID']."\">Delete</a></td>"; ?>
</tr>
<?php
$i++;
}
?>
</table>
我的 deleteProcess.php 看起来如下:
<?php
include_once ('database.php');
$sql = "DELETE FROM library WHERE Book_ID ='" . $_GET["Book_ID"] . "'";
if(mysqli_query($conn, $sql)){
echo "Record deleted successfully";
} else{
echo "Error deleting record: " . mysqli_error($conn);
}
mysqli_close($conn);
?>
我该怎么做?如果有人能指出错误或指出正确的方向。我在网上找到的东西没有用。
我认为您在 deleteProcess.php
中使用了 2 个参数
- URL 中的第一个参数是
<td><a href="deleteProcess.php?Book_ID=<?php echo $row["Book_ID"]; ?>">Delete</a></td>
中的 Book_ID
URL 中的第二个参数是 <?php echo "<td><a href=\"deleteProcess.php?id=".$row['Book_ID']."\">Delete</a></td>"; ?>
中的 id
那么,您能说说为什么要分别使用他们的 2 条线路吗?
通常情况下,人们永远不会使用 GET
进行这样的删除操作 - POST
更常见,但是您可以尝试这样的操作。最初执行测试以检查查询字符串(GET 请求数据)中是否存在 book_id
,然后构建 Prepared Statement 以减轻 SQL 注入威胁。
<?php
/************************
deleteProcess.php
*/
if( !empty( $_GET['Book_ID'] ) ){
require 'database.php';
$sql='delete from `library` where `book_id`=?';
$stmt=$conn->prepare( $sql );
$stmt->bind_param('s',$_GET['Book_ID']);
$stmt->execute();
$rows=$stmt->affected_rows;
# After the delete operation, go back to previous page... change the uri!
exit( header( 'Location: /path/to/previous/page.php?status=' . $rows ) );
}
?>
select
菜单不能包含任意的 HTML - 唯一允许的子元素是 option and optgroup 元素,因此尚不清楚这是拼写错误还是误解。也就是说,要填充下拉列表,您可以像为最终显示目的那样遍历记录集来轻松地做到这一点。要稍后重新使用记录集,您可能需要 rewind
到第一条记录 - 此处显示为 data_seek(0)
由于 select
菜单的意图不明确,我弹出了 onchange
事件处理程序来说明如何使用它... none 测试了 errors/mistooks 虽然 ;-)
<?php
$result=$conn->query('select * from library');
?>
<select name='books' onchange='changehandler(event)'>
<?php
while( $row = $result->fetch_assoc() ) printf('<option value="%s">%s', $row['Book_ID'], $row['Book'] );
#rewind recordset
$result->data_seek(0);
?>
</select>
<script>
const changehandler=function(e)=>{
alert( ' Do interesting things..... ' + this.value + ' ' + this.options[ this.options.selectedIndex ].text )
};
</script>
<table>
<tr>
<td>Book_ID</td>
<td>Author</td>
<td>Author_Age</td>
<td>Author_Genre</td>
<td>Genre</td>
<td>Book</td>
<td>Year</td>
<td>Age_Group</td>
<td>Author_ID</td>
</tr>
<?php
while( $row = $result->fetch_assoc() ) {
?>
<tr>
<td><?php echo $row['Author']; ?></td>
<td><?php echo $row['Author_Age']; ?></td>
<td><?php echo $row['Author_Genre']; ?></td>
<td><?php echo $row['Genre']; ?></td>
<td><?php echo $row['Book']; ?></td>
<td><?php echo $row['Year']; ?></td>
<td><?php echo $row['Age_Group']; ?></td>
<td><?php echo $row['Author_ID']; ?></td>
<td><?php echo $row['Book_ID']; ?></td>
<td>
<a href="deleteProcess.php?Book_ID=<?php echo $row["Book_ID"]; ?>">Delete</a>
</td>
</tr>
<?php
}
?>
</table>
大家好。我想创建一个下拉列表,其中包含一堆图书馆书籍,这些书籍来自 mySQL 数据库中名为“图书馆”的 table。
我能够创建一本书添加到 img 中显示的 table 部分。我无法正确使用我的下拉列表。
删除部分的代码是:
<?php $result = mysqli_query($conn, "DELETE FROM library WHERE 'Book_ID' = '$_GET[Book_ID]'");?>
<?php $result = mysqli_query($mysqli, "SELECT * FROM library"); ?>
<table>
<select>
<option>
<tr>
<td>Book_ID</td>
<td>Author</td>
<td>Author_Age</td>
<td>Author_Genre</td>
<td>Genre</td>
<td>Book</td>
<td>Year</td>
<td>Age_Group</td>
<td>Author_ID</td>
</tr>
</option>
</select>
<?php
$i = 0;
while($row = mysqli_fetch_array($result)) {
?>
<tr>
<td><?php echo $row['Author']; ?></td>
<td><?php echo $row['Author_Age']; ?></td>
<td><?php echo $row['Author_Genre']; ?></td>
<td><?php echo $row['Genre']; ?></td>
<td><?php echo $row['Book']; ?></td>
<td><?php echo $row['Year']; ?></td>
<td><?php echo $row['Age_Group']; ?></td>
<td><?php echo $row['Author_ID']; ?></td>
<td><?php echo $row['Book_ID']; ?></td>
<td><a href="deleteProcess.php?Book_ID=<?php echo $row["Book_ID"]; ?>">Delete</a></td>
<?php echo "<td><a href=\"deleteProcess.php?id=".$row['Book_ID']."\">Delete</a></td>"; ?>
</tr>
<?php
$i++;
}
?>
</table>
我的 deleteProcess.php 看起来如下:
<?php
include_once ('database.php');
$sql = "DELETE FROM library WHERE Book_ID ='" . $_GET["Book_ID"] . "'";
if(mysqli_query($conn, $sql)){
echo "Record deleted successfully";
} else{
echo "Error deleting record: " . mysqli_error($conn);
}
mysqli_close($conn);
?>
我该怎么做?如果有人能指出错误或指出正确的方向。我在网上找到的东西没有用。
我认为您在 deleteProcess.php
- URL 中的第一个参数是
<td><a href="deleteProcess.php?Book_ID=<?php echo $row["Book_ID"]; ?>">Delete</a></td>
中的
Book_ID
URL 中的第二个参数是 <?php echo "<td><a href=\"deleteProcess.php?id=".$row['Book_ID']."\">Delete</a></td>"; ?>
id
那么,您能说说为什么要分别使用他们的 2 条线路吗?
通常情况下,人们永远不会使用 GET
进行这样的删除操作 - POST
更常见,但是您可以尝试这样的操作。最初执行测试以检查查询字符串(GET 请求数据)中是否存在 book_id
,然后构建 Prepared Statement 以减轻 SQL 注入威胁。
<?php
/************************
deleteProcess.php
*/
if( !empty( $_GET['Book_ID'] ) ){
require 'database.php';
$sql='delete from `library` where `book_id`=?';
$stmt=$conn->prepare( $sql );
$stmt->bind_param('s',$_GET['Book_ID']);
$stmt->execute();
$rows=$stmt->affected_rows;
# After the delete operation, go back to previous page... change the uri!
exit( header( 'Location: /path/to/previous/page.php?status=' . $rows ) );
}
?>
select
菜单不能包含任意的 HTML - 唯一允许的子元素是 option and optgroup 元素,因此尚不清楚这是拼写错误还是误解。也就是说,要填充下拉列表,您可以像为最终显示目的那样遍历记录集来轻松地做到这一点。要稍后重新使用记录集,您可能需要 rewind
到第一条记录 - 此处显示为 data_seek(0)
由于 select
菜单的意图不明确,我弹出了 onchange
事件处理程序来说明如何使用它... none 测试了 errors/mistooks 虽然 ;-)
<?php
$result=$conn->query('select * from library');
?>
<select name='books' onchange='changehandler(event)'>
<?php
while( $row = $result->fetch_assoc() ) printf('<option value="%s">%s', $row['Book_ID'], $row['Book'] );
#rewind recordset
$result->data_seek(0);
?>
</select>
<script>
const changehandler=function(e)=>{
alert( ' Do interesting things..... ' + this.value + ' ' + this.options[ this.options.selectedIndex ].text )
};
</script>
<table>
<tr>
<td>Book_ID</td>
<td>Author</td>
<td>Author_Age</td>
<td>Author_Genre</td>
<td>Genre</td>
<td>Book</td>
<td>Year</td>
<td>Age_Group</td>
<td>Author_ID</td>
</tr>
<?php
while( $row = $result->fetch_assoc() ) {
?>
<tr>
<td><?php echo $row['Author']; ?></td>
<td><?php echo $row['Author_Age']; ?></td>
<td><?php echo $row['Author_Genre']; ?></td>
<td><?php echo $row['Genre']; ?></td>
<td><?php echo $row['Book']; ?></td>
<td><?php echo $row['Year']; ?></td>
<td><?php echo $row['Age_Group']; ?></td>
<td><?php echo $row['Author_ID']; ?></td>
<td><?php echo $row['Book_ID']; ?></td>
<td>
<a href="deleteProcess.php?Book_ID=<?php echo $row["Book_ID"]; ?>">Delete</a>
</td>
</tr>
<?php
}
?>
</table>