我正在尝试获得多个删除功能,这是我到目前为止所做的:
<?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链接到复选框。我的大脑疼。
编辑:这是复选框的viewsource的当前输出,使用dcoder的推荐和vardump测试。 input type =“checkbox”name =“checkbox []”id =“checkbox []”value =“”/&gt;
vardump测试输出:array(3){[0] =&gt; string(0)“”[1] =&gt; string(0)“”[2] =&gt; 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值。
答案 0 :(得分:1)
问题在于:
'<input type="checkbox" name="checkbox[]"'
. 'id="checkbox[]" value='.$row['$upload_id']
.' />'
将此更改为以下内容:
'<input type="checkbox" name="checkbox[]"'
. 'id="checkbox[]" value="'.$row['upload_id'] . '"'
.' />'
您在值周围缺少引号("
),而您输出的索引错误。
另外,请先将bind variables用于将动态元素嵌入到SQL查询中,然后使用escape dynamic input将其输出到页面中。
答案 1 :(得分: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']);
} 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
答案 2 :(得分:0)
我解决了这个问题。在用完所有其他选项后,我在MySQL中运行了grant *权限声明。显然我在创建Uploads表之前创建了数据库用户。谢谢大家的帮助