1

チェックボックスを使用してMySQLの日付の行を削除しようとしています。以下のスクリプトを適用すると、私が望んでいることを実行できません。アクションは実行されません..そして私は

Undefined variable: checkbox in C:\wamp\www\project\topics.php on line 108

私は実行のために送信されている実際のSQLをエコーアウトしようとしました、そしてそれはこれを与えました

DELETE FROM forum_topics WHERE topic_id = intval()

PHP

<?php        

$topics = mysql_query(" SELECT topic_id , topic_head , 
                               topic_tags , topic_owner , topic_date
                        FROM   forum_topics ") or die (mysql_error());?>

         <form method='post' action='topics.php'>
             <div class='admin'><table>       
                        <tr>
                            <td >DELETE</td>
                            <td >ID</td>
                            <td>Title</td>
                            <td>Tags</td>
                            <td>Owner</td>
                            <td>Date</td>  
                        </tr>

                        <?php
        while($row=mysql_fetch_array($topics)){ ?>
                   <tr align=center> 
                     <td align="center" bgcolor="black">
<input name="checkbox[]" type="checkbox" value="<?php echo $row['topic_id'];?>">
                </td>
                 <td><?php echo intval($row['ID']); ?></td>
                 <td><?php echo htmlspecialchars($row['topic_head']); ?></td>
                 <td><?php echo htmlspecialchars($row['topic_tags']); ?></td>
                 <td>><?php echo htmlspecialchars($row['topic_owner']); ?></td>
               <td>
                            <?php           
                                  $date = date_create($row['topic_date']) ;
                                  echo  date_format($date, 'F j, Y, g:i A'); 
                            ?>
                        </td>
                        <?php echo"
                        </tr>"; 
                        }?> 

         <td ><input name="delete" type="submit" value="DELETE"></td>
        <?php
         // Check if delete button active, start this
        if (isset($_POST['delete'])) {
          for($i=0;$i<$count;$i++){ 
           $del_id = $checkbox[$i]; 
          $sql = "DELETE FROM forum_topics WHERE topic_id = intval($del_id)"; 
                  mysql_query($sql);
                 }   
               }
            ?>
                       </table>
                       </form>
                       </div>
4

3 に答える 3

3

さて、あなたはあなたの削除ロジックをこのようなものに書き直す必要があります

if (isset($_POST['delete']) && isset($_POST['checkbox'])) {
    foreach($_POST['checkbox'] as $del_id){
        $del_id = (int)$del_id;
        $sql = "DELETE FROM forum_topics WHERE topic_id = $del_id"; 
        mysql_query($sql);
    }
    header('Location: topics.php');
}

mysql_*また、非推奨プロセスが開始されたため、関数を使用しないことを検討してください。

編集if条件に欠落した括弧を追加しました

編集 また、フォームの送信後にユーザーを同じページにリダイレクトすることをお勧めします。これにより、ページの更新時にフォームが繰り返し送信されるのを防ぐことができます。更新されたコードを参照してください。そしてもちろん、選択を行う前に削除ロジックを配置する必要があります

于 2012-09-12T21:11:31.623 に答える
2

配列から値をどこで取得していますか?

あなたは次のようなものを持っている必要があります

$array = $_POST[checkbox];

その後、あなたはのために行うことができます

foreach($array as $delID){

          $sql = "DELETE FROM forum_topics WHERE topic_id = $delID"; 
                  mysql_query($sql);

}

num値の検証は、すべての前に行います

于 2012-09-12T21:03:00.863 に答える
1

これらの行を置き換えてみてください。

 for($i=0;$i<$count;$i++){ 
    $del_id = $checkbox[$i]; 

これのために

 $count=count($_POST['checkbox']);
 for($i=0;$i<$count;$i++){ 
    $del_id = $_POST['checkbox'][$i]; 

phpディレクティブregister_globalsがオンの場合、$checkbox変数は機能するはずですが、セキュリティ関連の問題のため、PHP 5.3.0で非推奨になり、PHP 5.4.0で削除されたほか、そのディレクティブは長い間デフォルトでオフになっています。

于 2012-09-12T21:09:03.373 に答える