0

現在、配列にチェックボックスを設定し、配列変数を内破し、その変数を DELETE 関数内の IN 句で使用しています。var_dump は、正しいクエリを作成していることを示していますが、削除を行うことはできません。これは、私が 1 か月ほど抱えていた既存の問題に対する新しいアプローチです。

これが私が持っているものです。

//Connect to the db
$id_array = NULL;

// Make the query to display user's uploads
 $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)
    {
        // If it ran okay, display the records
        echo '<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>
           </tr>';

        // Fetch and print all the records:
?><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">' //. var_dump($row) //dump row value for testing
       . '<input type="checkbox" name="checkbox[]"  value= "'.$row['upload_id'].'"'.' />'.' </td>'. '</tr>';
    }
   echo '</table>'; // Close the table
        ?>

上記のコードは単純なテーブルを作成し、各レコードには対応するチェックボックスが表示されます。削除するにはチェックを入れてから「削除」をクリックします

         <input type="submit" name="delete" value="Delete" align="right"/> 
       </form>

<?php
   } // End of if ($r) IF.
    mysqli_close($dbc); // Close the database connection

カスタム削除機能:

function submit_delete() {
  if(!is_null($_POST['delete']) && !is_null($_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.
    $id_array = $_POST['checkbox'];
    $id_array = array_map('intval', $id_array);
    $id_array = array_unique($id_array);
    $id_array = implode(',',$id_array);
    //var_dump($id_array);
    deleteUploads($id_array);

  }
  else {
    echo "Error: submit_delete called without valid checkbox delete.";//var_dump($_POST['checkbox']);
  }
}

$delete_success = false;
function deleteUploads ($id_array) {
    require_once(my connection to db);

    mysqli_free_result($r);

  if (count($id_array) <= 0) {   echo "Error: No deletes in id_array!"; echo 'wtf'; }

  //var_dump($id_array);

上記の var ダンプは、私の mysql データベースに示されているように正しい ID を示しています

    $gone = "DELETE  FROM `upload` WHERE `upload_id` IN ("."$id_array".")";
    var_dump($gone);

上記の var は、カンマで区切られた ID を使用して、クエリが正しく形成されていることを確認します

    $goodbye = mysqli_query($dbc, $gone);

    if ($goodbye) { $delete_success = true; var_dump($delete_success);}
    else { $delete_success = false;}
    var_dump($delete_success);

上記の var ダンプは bool false を示しています

    //mysqli_close($dbc);
    if($delete_success == true) { echo 'done';
    header('Location: newwriter_profile.php');
  } else
      {
    echo "Error b/c delete failed";

上記のエコーは、任意の数のボックスをチェックして削除を押した後に表示されます

      }

  }


submit_delete();

mysqli_free_result($goodbye);
mysqli_close($dbc);


?> 
4

2 に答える 2

0

私は自分の問題を解決しました。偶然の開発中に、アップロードテーブルを実際に作成する前に、関連付けられた権限を持つデータベースユーザーを作成したことに気付きました。データベースユーザーに対してgrantpermissionステートメントを実行しましたが、奇跡的に上記のコードを使用して削除できます。これにより、ページ間でSESSION変数が失われるという別の問題も解決されました。

これは絶対的な悪夢でした-これが他の誰かにも役立つことを願っています。ご入力いただきありがとうございます。

于 2012-08-01T01:10:24.487 に答える
0

あなたのコードから:

$id_array = implode(',',$id_array);        //-> You convert array into string.
//var_dump($id_array);
deleteUploads($id_array);                  //-> Call function for delete with string parameter.

削除関数コード内で、文字列パラメーター ($id_array) をカウントします。

if (count($id_array) <= 0) { ...

削除関数内からコードを切り取ります:

if (count($id_array) <= 0) {   echo "Error: No deletes in id_array!"; echo 'wtf'; }

配列を文字列に変換する前に挿入します。

$id_array = array_unique($id_array);
if (count($id_array) <= 0) {   echo "Error: No deletes in id_array!"; echo 'wtf'; }
$id_array = implode(',',$id_array);
//var_dump($id_array);
deleteUploads($id_array);
于 2012-07-26T08:00:12.787 に答える