0

Perl を使用して Web ページから MySQL テーブルの行を削除しようとしています。チェックボックスを繰り返し処理したいのですが、チェックボックスがオンになっていると、データベースからその行が削除されます。チェックボックスの値を自動増分キー値にしました。これが私のコードの一部です。テーブルごとに、私がどこにいるのかがわかります。

while (@data = $STH1->fetchrow_array()) {
    print "<tr>";
    print " <td>$data[2]</td>";
    print " <td>$data[3]</td>";
    print " <td>$data[7]</td>";
    print " <td>$data[6]</td>";
    print " <td>$data[4]</td>";
    print " <td>$data[5]</td>";
    print " <td>$data[1]</td>";
    print "<td>";
    print '<form><center>';
    print checkbox(
        -name     => 'delete',
        -value    => 'data[0]',
        -selected => 0,
        -label    => 'delete'
    );
    print '<center></form>';
    print "</td>";
    print "</tr>";
}

チェックボックスがオンになっている場合に行を削除する方法がわかりません。

4

4 に答える 4

0

データを2番目のperlスクリプトにPOSTしたいとします。2番目のperlスクリプトでは、行をクエリパラメータとして取得します。削除する行のIDがあります。次に、SQLが含まれているIDを使用してdeleteRow関数を呼び出します。

私は現在http://template-toolkit.org/を使用して、基本的にあなたが説明したことを実行しています。

于 2012-06-14T16:46:31.123 に答える
0

を使用して、その中にすべてのチェックボックスを含む をCGI作成します。form

次に、別のスクリプトで、CGI送信されたフォームの値を読み取り、選択したチェックボックスに基づいて SQLdeleteコマンドを実行して、要求された行をテーブルから削除します。

idフォームのチェックボックスの識別子として一意の列を使用してください。

于 2012-06-14T16:41:25.417 に答える
0

チェックボックスへの呼び出しを少し調整する必要があると思います:

print checkbox(
    -name => 'delete',
    # -value => 'data[0]'
    # should be
    -value => $data[0],
    # do you need this ?
    # -selected => 0,
    -label => 'delete'
);

次に、CGIまたはオブジェクトで:

my @ids_to_delete = $q->param( 'delete' );

IDで削除する行を取得し、削除ステートメントを作成して実行するだけです。

于 2012-06-14T16:45:20.860 に答える
0

フォームがループ内にあるため、チェックボックスごとに異なるフォームが作成されます。

複数の削除をサポートしたい場合は、フォームの開始タグと終了タグをループの外に移動する必要があります。

次に、ループ内に非表示の入力を追加します。非表示の名前には「id」を使用し、チェックボックスには「delete」を使用します。

cgi についてはよくわかりませんが、フォームを 2 つのフィールドの 2 次元配列として取得する必要があります。その収集をループします。チェックボックスが存在し、チェックされている場合 (チェックされていないチェックボックスが返されない場合があります)、ID を探します。次に、ID をリストに追加し、ループを続けます。

次に、リストから削除ステートメントを作成します。削除された行数を確認し、そのメッセージをユーザーに返します。

それが役立つことを願っています...

于 2012-06-14T19:55:28.767 に答える