複数の削除機能を取得しようとしていますが、これは私がこれまでに持っているものです:
<?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 テスト出力: 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 値を取得します。