2017-06-08 5 views
0

私はウェブ開発シーンが比較的新しく、呼び出しをログできるウェブサイトの作成に割り当てられています。 これを達成するために私はHTMLフォームを使用しました - 私は過去にこれらの多くを作ってきましたが、これまでにこの問題に遭遇したことはありません。PHPフォームがHTMLフォームの提出時に '失われています'

マイページには、通話をログする1つ、通話を転送する1つ、すべての通話記録を表示する3つのボタンがあります。

<button type=submit value=log onclick="window.location.href='reception.php?log=1';">Log a call.</button> 

そして、ページの残りの部分に適切なコンテンツを表示するには、PHPのGETを使用して:私は、ボタンでonclickの方法を使用することによって、これを達成します。

   try { 
        $log = $_GET["log"]; 
       } 
       catch(Exception $ex) { 
        die(); 
       } 

       if($log) { 
        ?> 
        // create form 

これは完全に機能し、以下のようにフォームを作成しました。

<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post" name="log"> 
<p> 
    <label>Call date: </label> 
    <input type="date" name="date" value=<?php echo date("Y-m-d"); ?>> 
    <span class="error"><sup>&emsp;<?php echo $dateErr; ?></sup></span> 
</p> 
<br> 
<p> 
    <label>Does the client have a contract?</label> 
    <select name="contract"> 
     <option value="default" selected disabled>Please select...</option> 
     <option value="true">Yes</option> 
     <option value="false">No</option> 
    </select> 
    <span class="error"><sup>&emsp;<?php echo $contractErr; ?></sup></span> 
</p> 
<br> 
<p> 
    <label>Client forename:</label> 
    <input type=text name="fname" <?php if(isset($fname)) echo "value='".$fname."'";?>> 
    <span class="error"><sup>&emsp;<?php echo $fnameErr; ?></sup></span> 
</p> 
<br> 
<p> 
    <label>Client surname:</label> 
    <input type=text name="sname"> 
    <span class="error"><sup>&emsp;<?php echo $snameErr; ?></sup></span> 
</p> 
<br> 
<p> 
    <label style="position: relative; top: -135px;">Client enquiry:</label> 
    <textarea name=enq style="font-size: 14px; height: 150px; width: 300px;"></textarea> 
    <span class="error"><sup>&emsp;<?php echo $enqErr; ?></sup></span> 
</p> 
<br> 
<p> 
    <button type=submit name=submit value=submit style="position:relative; right: -115px; height:40px; width: 100px;">Submit</button> 
</p> 

それだけで正常に動作します。しかし、フォームを送信するときに問題が発生します。なぜなら、何らかの理由で、私が定義したすべてのPHP変数は、送信がクリックされたときに空になります。つまり、自動補完/エラーメッセージは表示されません。あなたが私のフォームコードで見ることができるように、テストとして、ユーザーがすでにそれを設定していても機能しない場合は、 "fname"フィールドを自動入力しました。ここで

は、検証のための私のPHP(それはまだ完了していない、私はちょうど「ISSETは初のチェックのすべてをやってみたかった)です:最後に

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
      if(isset($_POST["submit"])) { 
       $go = true; 
       $query = "INSERT INTO callLog VALUES(NULL, '"; 
       if(empty($_POST["date"])) { 
        $dateErr = "* Please enter a date."; 
        $go = false; 
       } 
       else { 
        $query .= date('Y-m-d', strtotime($_POST["date"]))."', "; 
       } 

       if(empty($_POST["contract"])) { 
        $contractErr = "* Please select 'Yes' or 'No'."; 
        $go = false; 
       } 
       else { 
        $contract = test_input($_POST["contract"]); 
        if($contract == "Yes") { 
         $contract = "TRUE"; 
        } 
        else { 
         $contract = "FALSE"; 
        } 
        $query .= $contract.", '"; 
       } 

       if(empty($_POST["fname"])) { 
        $fnameErr = "* Please enter a forename."; 
        $go = false; 
       } 
       else { 
        $fname = test_input($_POST["fname"]); 
        $query .= $fname."', '"; 
       } 

       if(empty($_POST["sname"])) { 
        $snameErr = "* Please enter a surname."; 
        $go = false; 
       } 
       else { 
        $sname = test_input($_POST["sname"]); 
        $query .= $fname."', '"; 
       } 

       if(empty($_POST["enq"])) { 
        $enqErr = "* Please enter an enquiry."; 
        $go = false; 
       } 
       else { 
        $query .= $enq."');"; 
       } 

       if($go) { 
        $conn->query($query); 
        header('Location: reception.php'); 
       } 

       ?><script> 
        $(document).ready(function() { 
         window.location.href='reception.php?log=1'; 
        }); 
       </script><?php 
      } 
     } 

JS単純になるようにページです「コールログ」ボタンを再度クリックするのではなく、データが送信されると、コールログフォームページにリダイレクトされます。

なぜこれが機能しないのか私は完全に迷っています。ページを表示するための 'GET'メソッドを除いて、私は過去にあったようにすべてうまくいっています。 「GET」メソッドが干渉しているのですか、何か不足していますか?

私は、Ajaxのようなものを使って、それがうまくいくかどうかを調べる可能性があると考えましたが、私はJQueryをよく知っているわけではなく(使い方も知らない) Ajax。

ありがとうございます!

答えて

0

あなたはフォーム提出をハイジャックしています。あなたはonclick="window.location.href='reception.php?log=1';"なので、フォームアクションにはPOSTではなく、そのページにGETリクエストを送信するだけです。

+0

ああご覧ください!速い答えをありがとう。私は前もって「GET」を扱ったことはありませんでした。私は、ボタンをPHPで実行する別の方法は見ていませんでした。 これを回避する方法はありますか? – CallumP

+0

''はうまくいきます。 あなたは '<?php echo htmlspecialchars($ _ SERVER [" PHP_SELF "]);を期待していますか? ?> 'と同じにするにはreception.php? –

+0

基本的に私は自分のホームページに3つのボタンがあります。それぞれのボタンをクリックすると、 'GET'を使ってページに異なるコンテンツが表示されます。これは、フォームを開くために使用されただけであるため、送信ボタンとは別です。 問題がフォームを送信すると、すべての変数が失われます。私は、フォームが提出されても、私が持っているページ構造を維持しながら、GETなどを使って、すべての変数を保持できるようにしたいだけです。私が期待しているのは '<?php echo htmlspecialchars($ _ SERVER [" PHP_SELF "]); ?>は、フォームデータを送信したり、必要に応じて受信時にエラーや自動入力データを表示することです。 – CallumP

関連する問題