我正在尝试获得多个删除功能,这就是我到目前为止所拥有的:
<?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();
}
}
?>
第一注意:基本上,注册用户会看到他们的个人资料页面,该页面向他们显示他们的上传和一些上传信息。 我想要每次上传旁边都有一个复选框,并在页面上的其他任何位置添加一个删除按钮。 所以我试了这个。
现在它将重定向,没有错误,也不会删除任何内容。 此外,在未选中复选框的情况下点击删除将返回错误。 提前感谢您的帮助,解决此问题也将解决我遇到的另一个问题,并且将是一个巨大的解脱。
我想不出将上传ID链接到复选框的方法。 我的脑子疼。
编辑:这是复选框的视图源的当前输出,使用dcoder的建议和vardump测试。 输入类型="复选框" 名称="复选框[]" id="复选框[]" 值= "/>
vardump test 输出: 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调用..."在我勾选一些框并点击删除后...我得到同样的错误。在 $_POST['checkbox[]'] 上纾困并获得 NULL 值。
问题就在这里:
'<input type="checkbox" name="checkbox[]"'
. 'id="checkbox[]" value='.$row['$upload_id']
.' />'
将其更改为以下内容:
'<input type="checkbox" name="checkbox[]"'
. 'id="checkbox[]" value="'.$row['upload_id'] . '"'
.' />'
您在值周围缺少引号("
(,并且输出了错误的索引。
此外,请使用绑定变量将动态元素嵌入到 SQL 查询中,并在将动态输入输出到页面之前对其进行转义。
我已经将您的功能分解为可以调用的函数。前一个函数将帮助您测试是否获得了正确的值。您可以使用数据库中已知的值手动填充数组,以检查后一个函数。
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']);
} else {
echo "Error: submit_delete called without valid checkbox delete.";
}
}
function deleteUploads ($id_array) {
if (count($id_array) <= 0) { //bail if its empty
echo "Error: No deletes in id_array!";
return;
}
$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[] = 10;//make sure this id is in the db
$test_ids[] = 9;//this one too
deleteUploads($test_ids);//should remove ids 10 and 9
我解决了这个问题。 在用尽所有其他选项后,我在 MySQL 中运行了一个授予 * 权限语句。显然,我在创建上传表之前已经创建了数据库用户。 谢谢大家的帮助