1

複数の削除機能を取得しようとしていますが、これは私がこれまでに持っているものです:

<?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 値を取得します。

4

3 に答える 3

1

問題はここにあります:

'<input type="checkbox" name="checkbox[]"'
. 'id="checkbox[]"  value='.$row['$upload_id']
.' />'

これを次のように変更します。

'<input type="checkbox" name="checkbox[]"'
. 'id="checkbox[]"  value="'.$row['upload_id'] . '"'
.' />'

値の周りにquotes( ") がなく、間違ったインデックスを出力しています。


また、動的要素を SQL クエリに埋め込むにはバインド変数を使用し、ページに出力する前に動的入力をエスケープしてください。

于 2012-05-13T05:23:36.247 に答える
0

私は問題を解決しました。他のすべてのオプションを使い果たした後、MySQLでgrant*パーミッションステートメントを実行しました。どうやら私はUploadsテーブルを作成する前にデータベースユーザーを作成していました。助けてくれてありがとう

于 2012-08-01T01:14:27.653 に答える
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
于 2012-05-13T02:24:08.280 に答える