2016-12-17 12 views
0

私のウェブサイト用のユーザシステムを作成しました。それを開くと、すべてのユーザーのリストが表示され、データベースの "n_gesperrt"を1または0に変更することで、ロックまたはロック解除できます.1はロックされていることを意味します。 ここに表示されるフォームは、常に最後のユーザーID(n_id)を最上位のPHPスクリプトに送信します。だから私が何かを変更したいのであれば、それはリストに表示された最後のユーザーとしか動作しません。 どうすれば問題を解決できますか? DATABASEで編集HTMLフォームが間違ったデータベースIDを送信するPHP

while ($zeile = mysqli_fetch_assoc($res)) 
{ 
echo "<form name=\"nutzer_sperren\" method=\"POST\" action=\"index.php?page=nutzer_sperren\">"; 
    echo "<input type=\"hidden\" name=\"n_id\" value=\"".$zeile['n_id']."\">"; 
    echo $zeile['n_id']; 
     if($zeile['n_gesperrt'] == 0){ 
      echo "<input type =\"submit\" name=\"sperren\" value=\"Nutzer sperren\">"; 
     } 
     else { 
      echo "<input type =\"submit\" name=\"entsperren\" value=\"Nutzer entsperren\">"; 
     } 
    echo '</form">';  

FORM:以下のような配列 として

 if(isset($_POST['sperren'])) 
{ 
    $sperrung = mysqli_real_escape_string($verbinde, 1); 
    mysqli_query($verbinde, 'UPDATE nutzer SET n_gesperrt ="'.$sperrung.'" WHERE n_id ='.$_POST["n_id"].'') or die(mysqli_error($verbinde)); 
    echo "Daten wurden erfolgreich geändert. <br>Bitte aktualisieren Sie die Seite!"; 
    echo $_POST["n_id"]; 
    echo "<hr>"; 
} 



if(isset($_POST['entsperren'])) 
{ 
    $entsperren = mysqli_real_escape_string($verbinde, 0); 
    mysqli_query($verbinde, 'UPDATE nutzer SET n_gesperrt ="'.$entsperren.'" WHERE n_id ='.$_POST["n_id"].'') or die(mysqli_error($verbinde)); 
    echo "Daten wurden erfolgreich geändert. <br>Bitte aktualisieren Sie die Seite!"; 
    echo $_POST["n_id"]; 
    echo "<hr>"; 
} 
+0

Holly molly、あなたの母国語で変数に名前を付けないでください。常に英語を使用してください。そうでなければstackoverflow.deに助けを求めるだけです。 :P – TigOldBitties

答えて

0

のようなあなたのコードに変更する必要がいくつかあります:

  • は...あなたはここを参照してくださいフォームは常にに(n_idを)最後のユーザIDを送信しています上のPHPスクリプト。だから私が何かを変更したいのであれば、それはリストに表示された最後のユーザーとしか動作しません。あなたは隠さ入力要素のすべてに同じname属性を割り当てたためだ

    。このように、ユーザーの応答を処理するために2個の別々のifのブロックを使用する必要はありませんので、

    ... name='n_id[]' ... 
    
  • が変更name属性は、要素だけsubmitへの提出、以下の方法であなたのname属性を変更します。

  • echo '</form">';から二重引用符を削除します。そうしないと、フォームが壊れます。

だからあなたwhile()ループは次のようにする必要があります:私は上記の言ったように

while ($zeile = mysqli_fetch_assoc($res)){ 
    echo "<form method='POST' action='index.php?page=nutzer_sperren'>"; 
    echo "<input type='hidden' name='n_id[]' value='".$zeile['n_id']."'>"; 
    if($zeile['n_gesperrt'] == 0){ 
     echo "<input type ='submit' name='submit' value='Nutzer sperren'>"; 
    } 
    else { 
     echo "<input type ='submit' name='submit' value='Nutzer entsperren'>"; 
    } 
    echo '</form>'; 
} 

さらに、次の2個の別々のifのブロックを使用する必要はありません、ちょうどかどうかを確認する1個のifブロックを使用フォームが送信またはないし、あなたのUPDATE操作でn_gesperrt列の値を切り替え、このようなものです:

if(isset($_POST['submit'])){ 
    mysqli_query($verbinde, 'UPDATE nutzer SET n_gesperrt = IF(n_gesperrt = 1, 0, 1) WHERE n_id ='.$_POST["n_id"][0]) or die(mysqli_error($verbinde)); 
    echo "Daten wurden erfolgreich geändert. <br>Bitte aktualisieren Sie die Seite!"; 
} 
+0

それは完全に動作します!私はそれについて十分にあなたに感謝することはできません:) – luki512

+0

@ luki512喜んで私は助けることができます。問題を解決した場合は、*その答えを受け入れてください*。 [Stack Overflowでの回答を受け入れる方法は?](http://meta.stackexchange。com/a/5235) –

0

仲間の使用名、あなたは配列にあなたの結果を取得します

これらは、コードの断片です
 while ($zeile = mysqli_fetch_assoc($res)) 
    { 
    echo "<form name=\"nutzer_sperren\" method=\"POST\" action=\"index.php?page=nutzer_sperren\">"; 
     echo "<input type=\"hidden\" name=\"n_id[]\" value=\"".$zeile['n_id']."\">"; 
     echo $zeile['n_id']; 
      if($zeile['n_gesperrt'] == 0){ 
       echo "<input type =\"submit\" name=\"sperren[]\" value=\"Nutzer sperren\">"; 
      } 
      else { 
       echo "<input type =\"submit\" name=\"entsperren[]\" value=\"Nutzer entsperren\">"; 
      } 
     echo '</form">'; 

投稿ページの値はです$ name = $ _ POST ['entsperren'];

print_r($name); 
関連する問題