0

自分自身に送信するフォームのPOSTREDIRECTGETパターンの基本を理解していないため、人生で最も苦労しています。主な問題は、ユーザーがページに戻ったり更新したりすると、データベースに重複したエントリが表示されることです。したがって、基本的に、それぞれが自分自身に送信する2つのフォームを含むページがあります。PRGパターンに関していくつかのコードを実装していますが、機能していないようです。私がしていることを説明しようとする簡単な例を投稿します。

    <?php
    function saveUser1($UserName_1)
    {
    include 'db_conn.php';
    //MySQL code etc...    
        if($result) return 1; //registro correcto
        else return -2; //error
        header('Location: samepage.php' , true, 303);
    exit();
    }

    function saveUser2($UserName_2)
    {
    include 'db_conn.php';
    //MySQL code etc...    
        if($result) return 1; //registro correcto
        else return -2; //error
        header('Location: samepage.php' , true, 303);
    exit();
    }

    $error1 = 0;
    $error2 = 0;

    if(isset($_POST['userForm1']))
    {
        $error1 = saveUser1(clean_form($_POST['txtUserName_1']);
    }
    if(isset($_POST['userForm2']))
    {
        $error2 = saveUser2(clean_form($_POST['txtUserName_2']);
    }
    ?>

今HTML

    <form action="" name="userForm1" method="POST">
    <label for="data">Some Data</label>
    <input type="text" value="some test data to post" name="txtUserName_1" id="txtUserName_1" /><br />
    <input type="submit" name="userForm1" id="userForm1"/>
    </form>

    <form action="" name="userForm2" method="POST">
    <label for="data">Some Data</label>
    <input type="text" value="some test data to post" name="txtUserName_2" id="txtUserName_2" /><br />
    <input type="submit" name="userForm2" id="userForm2"/>
    </form>

私が達成しようとしていることの例としてこのコードを作成したばかりですが、PGRパターンには何の運もありませんでした。エラーがどこにあるか教えていただけますか?または、このテーマに関するいくつかの良いチュートリアルに私をリダイレクトしますか(冗談ではありません)?私はたくさんの質問/回答、ブログを探していましたが、(私の観点からは)本当にしっかりしたものを見つけることができません。前もって感謝します。

4

3 に答える 3

0

フォーム名自体をチェックする代わりに、フォーム内の一意のフィールドをチェックします。例:If(isset($ _ POST [txtUserName_1'']))

フォーム名自体は投稿に存在しません。

何が投稿されるかを確認するには、次のことを試してください。

print_r($ _ POST); 出口;

于 2013-01-22T19:37:16.367 に答える
0

投稿アクションを同じページに設定する必要があるかもしれません。
また、フォームの名前を送信ボタンと同じにすることはできません(それについてはよくわかりません)。

<form name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" >    
<label for="data">Some Data</label>
<input type="text" value="some test data to post" name="data" id="data" /><br />
<input type="submit" name="submit1" id="userForm1"/>
</form>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" name="form2" method="POST">
<label for="data">Some Data</label>
<input type="text" value="some test data to post" name="data" id="data" /><br />
<input type="submit" name="submit2" id="userForm2"/>
</form>

PHPの場合:

if(isset($_POST['submit1']))
{
    $error1 = saveUser1(clean_form($_POST['txtUserName_1']);
}
if(isset($_POST['submit2']))
{
    $error1 = saveUser1(clean_form($_POST['txtUserName_2']);
}

実行されたかどうかを確認するための非表示フィールドを追加できます。

<input type="hidden" name="executed" value="0"/>

次に、mysqlクエリを実行したときに0に設定できます

function saveUser1($UserName_1)
{
if($_POST['executed'] == 0)
{
include 'db_conn.php';
//MySQL code etc...    
    if($result) $_POST['executed'] = 1; //registro correcto
    header('Location: samepage.php' , true, 303);
exit();
}
}
于 2013-01-22T19:47:12.687 に答える
0

以下は、試してみたい場合のサンプルコードです。

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    Name: <input type="text" name="name">
    Email: <input type="text" name="email">
    Password: <input type="password" name="password">
    <input type="submit" value="submit" name="send">
</form>

PHPコードとcommon.phpはデータベース接続ファイルです

<?php
   require_once "common.php";

   if(isset($_REQUEST['send']))
   {
      $name = $_POST['name'];
      $email = $_POST['email'];
      $password = $_POST['password'];

      $check = "SELECT * FROM user WHERE name = '".$name."' AND email = '".$email."' AND password = '".$password."'";
      $check_result = mysql_query($check) or die(mysql_error());

      if(mysql_num_rows($check_result) > 0)
      {
        header('Location : post.php');
      }
      else
      { 
        $sql = "INSERT INTO user (name,email,password) VALUES ('$name','$email','$password')";
        $result = mysql_query($sql) or die(mysql_error());
      } 
   }    
?>
于 2013-01-23T10:57:29.370 に答える