0

各ユーザーが自分のログを挿入して表示できるログイン システムを備えた Web サイトを作成しています。

今、テーブルから行全体をクリックすると削除される削除ボタンを作成しようとしています。

「削除ボタン」をクリックしてphpmyadminシェルから行を確認すると、行がなくなっているため、正常に機能しています。

問題は、最初のクリックで行が Web ページに表示されたままになり、ボタンをもう一度クリックしたときにのみ行が消えることです。

これが私のコードです: -

<?php   
    $entries = mysql_query("SELECT `id`,`date`, `location`, `description` FROM `logs` WHERE `username` = '$current_user'");


if(mysql_num_rows($entries)==0){

    echo 'No entries, yet.';}
    else{


        while($entries_row = mysql_fetch_assoc($entries)){          
            echo    " 
                <hr> 
                <form action='' method='post'> 
                <input type='hidden' name='id' value='".$entries_row['id']."'> 
                <table align='center' border='1' width='80%' cellpadding='5'> 
                <tr> 
                <td width='20%'><strong>Date:</strong></td> 
                <td>" . $entries_row['date'] . "</td> 
                </tr>     
                <tr> 
                <td width='20%'><strong>Location:</strong></td> 
                <td>" . $entries_row['location'] . "</td> 
                </tr> 
                <tr> 
                <td width='20%'><strong>Description:</strong></td> 
                <td>" . $entries_row['description'] . "</td> 
                </tr> 
                <tr> 
                <td colspan='2' align='right'><input type='submit' name='delete' value='Delete Entry'></td> 
                </tr> 
                </table> 
                </form> 
                    "; 
        }
    }   

}else{
    echo 'Could not connect at this time.';
}

if(isset($_POST['delete']))
    { 
    mysql_query("DELETE FROM `logs` WHERE `id` = '".$_POST['id']."' ");
    } 


?>
4

4 に答える 4

1

フォームにはアクションがありません。同じページに送信したいようです。

<form action='THISPAGE.php' method='post'> 

次に、$_POST['id'] を変数に設定するだけです。これは、MySQL が以前に配列をいじったことがあるからです。また、クエリの後に別のページにリダイレクトして、存在しない ID のフォームが与えられないようにします。

if(isset($_POST['delete']))
{ 
   $id = $_POST['id'];
   mysql_query("DELETE FROM `logs` WHERE `id` = '$id' ");
   header("Location: someOtherPage.php"); 
   exit(); //Exit to force redirect
} 

内容がエコーされた後はヘッダーを変更できないため、 isset コードを echo ステートメントの上に移動する必要がある場合があります。

于 2013-04-29T17:20:52.073 に答える
0

削除ボタンを押した後、ページは更新されますか? コードにキャッシュ コマンドのリフレッシュとクリアを追加してみてください。

于 2013-04-29T17:35:25.403 に答える
0

削除後にページにリダイレクトするか、データを削除したら、再度選択クエリを使用して新しいデータを取得します。このようなことをしてください

if(isset($_POST['delete']))
{ 
    mysql_query("DELETE FROM `logs` WHERE `id` = '".$_POST['id']."' ");
    header("location:yourpage.php");
} 
于 2013-04-29T17:17:08.920 に答える
0

行クエリの上に削除コードを移動する必要があると思います

if(isset($_POST['delete']))
    { 
    mysql_query("DELETE FROM `logs` WHERE `id` = '".$_POST['id']."' ");
    } 

$entries = mysql_query("SELECT `id`,`date`, `location`, `description` FROM `logs` WHERE `username` = '$current_user'");

行を削除する前に、すべての行を照会しています。

また...

上記のサミサのコメントに注意してください。

行全体を削除するのではなく、テーブルに「削除済み」列を追加し、行が「削除」されたときにタイムスタンプを「削除済み」列に追加することをお勧めします。次に、クエリは次のようになります。

$entries = mysql_query("SELECT `id`,`date`, `location`, `description` FROM `logs` WHERE `username` = '$current_user' AND `deleted` != `NULL`");
于 2013-04-29T17:21:34.453 に答える