我正在尝试获得多个删除功能,这就是我到目前为止所拥有的:
<?php
echo '<h3>Welcome to your profile, '. $_SESSION['first_name'] . '</h3>';
require_once ('../mysqli_connect.php'); //Connect to the db
// Make the query
$q = "SELECT upload_id, title, genre, length, created, views
FROM upload
WHERE owner_id =". $_SESSION['user_id'] ."
ORDER BY title ASC";
$r = mysqli_query ($dbc, $q); // Run the query
if($r) {
?>
<table align="center" cellspacing="3" cellpadding="3" width="75%">
<tr>
<td align="left"><b>Title</b></td>
<td align="left"><b>Genre</b></td>
<td align="left"><b>Pages</b></td>
<td align="left"><b>Submitted</b></td>
<td align="left"><b>Views</b></td>';
<form action="/nbproject/newwriter_profile.php" method="post">
<?php
while ($row = mysqli_fetch_array($r,MYSQLI_ASSOC)) {
echo '<tr><td align="left">'
. $row['title'] . '</td><td align="left">'
. $row['genre'] . '</td><td align="left">'
. $row['length'] . '</td><td align="left">'
. $row['created'] . '</td><td align="left">'
. $row['views'] . '</td><td align="left">'
. '<input type="checkbox" name="checkbox[]"'
. 'id="checkbox[]" value='.$row['$upload_id'] //this upload id is auto-increment (see first note)
.' />'.' </td>'. '</tr>';
}
?>
</table>
<input type="submit" name="delete" value="Delete" align="right"/>
</form>
<?php
mysqli_free_result ($r); // Free up the resources
} else { // If it did not run okay
// Public Message:
echo '<p class="error">Your submissions could not be retrieved. We apologize for any inconvenience.</p>';
// Debugging message:
echo '<p>' . mysqli_error($dbc) . '<br /><br />Query: ' . $q . '</p>';
} // End of if ($r) IF.
mysqli_close($dbc); // Close the database connection
if($_POST['delete']) {
require_once ('../mysqli_connect.php'); //Connect to the db
$checkbox = $_POST['checkbox']; //from name="checkbox[]"
$countCheck = count($_POST['checkbox']);
for($i=0;$i<$countCheck;$i++) {
$del_id = $checkbox[$i];
//----------------------------------
$sql = "DELETE from `upload` where `upload_id` = $del_id AND `owner_id` = {$_SESSION['user_id']}";
$result = $mysqli->query($sql) or die(mysqli_error($mysqli)); //added session information after hearing about google spider armageddon scenarios
}
if($result) {
header('Location: newwriter_profile.php');
} else {
echo "Error: ".mysqli_error();
}
}
?>
第一个注意事项:基本上注册用户会受到他们的个人资料页面的欢迎,该页面向他们显示他们的上传内容和一些上传信息。我想在每个上传旁边有一个复选框,在页面上的任何其他地方都有一个删除按钮。所以我尝试了这个。
现在它将重定向而没有错误,并且没有任何内容被删除。此外,在未选中复选框的情况下点击 Delete 会返回错误。提前感谢您的帮助,解决这个问题也将解决我遇到的另一个问题,这将是一个巨大的解脱。
我想不出一种方法来将上传 ID 链接到复选框。我的脑袋疼。
编辑:这是复选框的视图源的当前输出,使用 dcoder 的推荐和 vardump 测试。输入类型="checkbox" name="checkbox[]" id="checkbox[]" value="" />
vardump 测试输出:array(3) { [0]=> string(0) "" [1]=> string(0) "" [2]=> string(0) "" }
编辑:删除功能目前如下:
function submit_delete() {
if($_POST['delete'] && $_POST['checkbox[]']) { //Check to see if a delete command has been submitted.
//This will dump your checkbox array to your screen if the submit works.
//You can manually check to see if you're getting the correct array with values
//var_dump($_POST['checkbox']);//Comment this out once it's working.
deleteUploads($_POST['checkbox[]']);
}
}
function deleteUploads ($id_array) {
if (count($id_array) <= 0) { return; }//bail if its empty
$delete_success = false;
foreach ($id_array as &$id) {
$sql = "DELETE from `upload` where `upload_id`=$id AND `owner_id`= {$_SESSION['user_id']}";
$result = $mysqli->query($sql) or die(mysqli_error($mysqli));
if ($result) { $delete_success = true; }
}
if($delete_success) {
header('Location: newwriter_profile.php');
} else {
echo "Error: ".mysqli_error();
}
}
//Test deleteUploads (remove once you know the function is working)
//$test_ids = array();
//$test_ids[] = 5;//make sure this id is in the db
//$test_ids[] = 7;//this one too
submit_delete();
deleteUploads($id_array);//should remove ids 10 and 9//
mysqli_close($dbc);
编辑:目前如下:
while ($row = mysqli_fetch_array($r,MYSQLI_ASSOC))
{
echo '<tr><td align="left">' .
$row['title'] . '</td><td align="left">'
. $row['genre'] . '</td><td align="left">'
. $row['length'] . '</td><td align="left">'
. $row['created'] . '</td><td align="left">'
. $row['views'] . '</td><td align="left">' //. var_dump($row) //dump row value for testing
. '<input type="checkbox" name="checkbox[]"'. 'id="checkbox[]" value= "'.$row['upload_id'].'"'.' />'.' </td>'. '</tr>';
注释掉 vardump,表明每个复选框都获得了正确的 upload_id ...
function submit_delete() {
if(!is_null($_POST['delete']) && !is_null($_POST['checkbox[]'])) { //Check to see if delete command has been submitted.
//This will dump your checkbox array to your screen if the submit works.
//You can manually check to see if you're getting the correct array with values
//var_dump($_POST['checkbox']);//Comment this out once it's working.
deleteUploads($_POST['checkbox[]']);
}
else {
echo "Error: submit_delete called without valid checkbox delete.";
}
}
function deleteUploads ($id_array) {
if (count($id_array) <= 0) { echo "Error: No deletes in id_array!"; var_dump($id_array); return; }//bail if its empty
$delete_success = false;
foreach ($id_array as &$id) {
$sql = "DELETE FROM `upload` WHERE `upload_id`=$id AND `owner_id`= {$_SESSION['user_id']}";
$result = $mysqli->query($sql) or die(mysqli_error($mysqli));
if ($result) { $delete_success = true; }
}
if($delete_success) {
header('Location: newwriter_profile.php');
} else {
echo "Error: ".mysqli_error();
}
}
//Test deleteUploads (remove once you know the function is working)
//$test_ids = array();
//$test_ids[] = 5;//make sure this id is in the db
//$test_ids[] = 7;//this one too
submit_delete();
//deleteUploads($id_array);//should remove ids 10 and 9//
mysqli_close($dbc);
在页面加载时,我在勾选一些框并点击删除后收到错误“submit_delete called...”...我收到同样的错误。摆脱 $_POST['checkbox[]'] 并获得 NULL 值。