2017-09-22 8 views
0

このコードは、ボタンがアクティブになったらデータベースにデータを入れてから取り出して、(質問保存!)で置き換えます。問題は、それが消えるように2回試みることです(ボタン)。 $ numofrowは、アクションが一度行われたかどうかを確認するために使用されます(サブミット・ボタンのアクション)。問題はデータベース、クエリなどではなく、本当にボタンです。御時間ありがとうございます。私は送信ボタンを2回押す必要があります(PHP)

これは私のコードです:

if(isset($real_domaine)){ 

    $tt = "SELECT*FROM uniwix.table0 WHERE id= '$id' "; 
    $rr = mysqli_query($database,$tt); 

    while($rows = mysqli_fetch_assoc($rr)){ 

     [rows call...] 

     $md = "SELECT*FROM uniwix.table1 WHERE usern='$us' and question='$sujet'"; 
     $ao = mysqli_query($database,$md); 
     $numofrow = mysqli_num_rows($ao); 

     if($numofrow == 0){ 
      echo '<form action="" method="POST"> 
       <input type="submit" name="sauvegarder" value="Save the question"/> 
       </form>'; 

      if(isset($_POST['sauvegarder'])){ 
       $qu = "INSERT INTO database (usern,question) VALUES('".$us."','".$sujet."')"; 
       $sm = mysqli_query($database,$qu); 
      } 
     }else{ 
      echo 'Question saved!'; 
     } 

    //end of while loop 
    }  

// end of if(isset($real_domaine)) 
} 
+0

HTMLは無関係です。エラーはロジックにあります。 – axiac

+0

私は$ real_domaineとは何か不思議です。したがって、ユーザーと質問がデータベースに見つからないときにフォームを表示します。あなたは「質問が保存されました!既にデータベースに入っているときは、「質問は保存されました!」挿入クエリの下にエコーする必要があります。 '質問は既に保存されました'に変更する必要があります – Chad

答えて

1

問題は、データベース、クエリなど、その本当にボタンではありません。

ボタンはほとんどパッシブです。押したときにデータをサーバーに送信するだけです。エラーは、PHPコードのロジックの欠如にあります。

初めてスクリプトを実行する場合、$numofrow0です。ボタンでフォームを生成するechoを実行し、$_POST['sauvegarder']が設定されているかどうかを確認します。もちろん、ページが初めて読み込まれるときには、GETメソッドが使用されるため、設定されません。

ユーザーがボタンを押すと、データはPOSTを使用して送信され、コードが再び実行されます。 $numofrowはまだ0(データベースにデータがまだ挿入されていません)の場合フォームが再び表示されますしかし今回は$_POST['sauvegarder']が設定され、ブラウザから受信したデータがデータベースに保存されます。

あなたのロジックを再考する必要があります。

詳細は、フォームが空です。たぶんそれは動作しますが、これはフォームを書く正しい方法ではありません。サーバーに送信する入力フィールドは、フォーム内にとどまる必要があります。

さらに重要なことは、データベースコードはSQLインジェクションの候補です。 文字列連結を使用してクエリを作成しないでください。 prepared statementsを使用してください。また、how prevent SQL injection in PHPについても読んでください。

関連する問題