2012-01-28 10 views
0

データベースからレコードをフェッチするPHPスクリプトを作成しようとしていますが、フェッチは正常に機能していますが、DELETE BUTTONをクリックするとデータベースからすべてのレコードが削除されますここで行う必要があるのは、特定のレコード(行のレコードのみ)を削除することです。どのようにすればいいですか?出力はブラウザに送信されている間、あなたのページが構築されている間、あなたはすべてのあなたのレコードを削除しているので、MySQLデータベースからレコードを1つ削除する

<table width="99%" border="0"> 
     <tr> 
      <td align="center">ID</td> 
      <td align="center">Username</td> 
      <td align="center">EDIT</td> 
      <td align="center">DELETE</td> 
     </tr> 

      <? 
     while ($fetch=mysql_fetch_array($q)) 
{ 
    ?>   
     <tr> 
      <td align="center"><? echo $fetch['useId']; ?></td> 
      <td align="center"><? echo $fetch['userUserName']; ?></td> 
      <td align="center"><? echo $fetch['useId']; ?></td> 
      <td align="center"> <input name="delete" type="submit" value="DELETE " onclick="<? mysql_query("DELETE FROM user WHERE useId = ". $fetch['useId'] ."") ?> "/></td> 
      </tr> 
      <? } ?> 

     </table> 
+1

ページを開くだけですべてのレコードが削除されるようです。あなたはjavascriptとphpを混ぜています。 – jeroen

+0

@jeroenいいえ私はonClickを置くので、それはしません。つまり、アクションを実行するにはクリックする必要があります。ありがとう:) –

+0

はい、それはページがブラウザに送信される前にPHPが処理されるためです。 – jeroen

答えて

1

が、あなたはPHPとJSを混合している、削除を行います別のページにフォームを投稿してください。ページが表示される前にPHPが解析されているため、JS関数を呼び出すことによってページ上でPHPを実行することはできません。何をする必要がある、それは行を削除するためのコードをリロードし呼び出すように戻っページにデータをポストするためにあなたのonClickイベントを使用している:

<table width="99%" border="0"> 
    <tr> 
    <td align="center">ID</td> 
    <td align="center">Username</td> 
    <td align="center">EDIT</td> 
    <td align="center">DELETE</td> 
    </tr> 

    <? 
    if(isset($_POST['useId']) && is_numeric($_POST['useId'])) 
    { 
     mysql_query("DELETE FROM user WHERE useId = ". $_POST['useId'] .""); 
    } 

    while ($fetch=mysql_fetch_array($q)) 
    { 
    ?> 
    <form method="post" action="yourPHPScript.php"/> 
    <tr> 
     <td align="center"><? echo $fetch['useId']; ?></td> 
     <td align="center"><? echo $fetch['userUserName']; ?></td> 
     <td align="center"><? echo $fetch['useId']; ?></td> 
     <input type="hidden" name="useId" value="<? echo $fetch['useId']; ?>"/> 
     <td align="center"> <input name="delete" type="submit" value="DELETE "/></td> 
    </tr> 
    </form> 
    <? } ?> 

    </table> 

私はここでやったことを追加するようにコードを修正しますページが読み込まれたときにPOST変数useIdを確認します。これは、フォームがフォームを送信した後に存在します。 (私はGETを使用している場合はそれに応じて、あなたのフォームでmethod = "POST"を使用していると仮定しています)。ページが更新された後で削除されたユーザーがリストに表示されないように、$ qクエリを実行する前に実際に削除クエリを実行する必要があることに注意してください。

また、ユーザーIDが数字であると仮定して、useIdがセキュリティチェックとして数字であることを確認して、誰かが偽のデータをクエリに送信しないようにします。最後に、ユーザーIDを含むフォームに非表示フィールドを追加しました。

編集:テーブルの各行は、その行のuserIDだけをuseID値として送信したいので、これが正しく動作するように、別のフォームにする必要があることを忘れてしまいます。または、JSを使用して削除する行を特定し、userIDをGET varとして確定することができます。

+0

隠したすべての入力の名前が 'userId'であるため、これは最後のレコードを常に削除します。私の答えをチェックして、この設定が機能するためにはすべてのエントリーにフォームを追加する必要があります。 – jeroen

+0

私がそれを投稿するとすぐに実現しました:)コードを更新します – TheOx

2

PHPは、/の前に処理されます。

は、ここに私のコードです。あなたが短い中で行う必要がある何

される(これは、それを解決するためのひとつの方法です...):

  • 各エントリに別々のフォーム
  • を与えるのIDのための隠しフィールドを追加エントリー
  • は、ユーザーが送信したときのJeroenはコメントで述べたように、フォーム
関連する問題