2012-02-20 6 views
2

私は本当に解決する方法が分からないという問題があります。私は同じプロジェクトの2つの異なるページを持っています。フォームを作成して別のWebページに送信することができます。また、フィールドのタイプ、名前、値を要求するバージョンと、ユーザーがフルフォームを手動で入力できるバージョンの2つのバージョンがあります。まったく同じhtmlですが、どうして違うのですか?

私の質問によれば、最初のケースでは完全に動作し、2番目のケースでは同じページに戻ってきて、それが私を狂わせてしまいます!最後にコードを記述しますが、エラーを再現する手順があります。

  1. ゴーフィールドでこれを入れてhttp://saveyourself.vacau.com/form/
  2. に(これはこのページのために、実際にテストアカウントです):私はテスト目的のためにそれを使用しているとして、これまでのところ、それは自由のためにホストされているページです

    • ページ:http://newfutureuniversity.org/
    • 方法: "ポスト"
    • 名1: "ユーザー"
    • 値1: "ユーザー"
    • タイプ1: "テキスト"
    • 名2: "合格"
    • 値2: "パスワード"
    • タイプ3: "パスワード"
    • 名3: "ログイン"
    • 値3 : "1"
    • タイプ3: "非表示"。
  3. を押して「表示形式」、およびフォームは、今まで「</form>

  4. 移動このページhttp://saveyourself.vacau.com/form/manual/にページのソースコードを見て、「<form...>」からコピー
  5. を表示しますそこに貼り付けてください。
  6. 「フォームを表示」を押すと、手順3の後に同じページが表示されます(htmlを確認してください.100%同じですが、アドレスは/ manual /です)。

ここでは、このトリックです。両方のページがまったく同じHTMLを持っているにもかかわらず、手順3の後に「フォームを送信」ボタンを押すと、新しいページにログインしますが、手順6の後に「フォームを送信」ボタンを押すと(/ form/manual /)、そのページがリフレッシュされ、貼り付けたフォームが削除されます。これはどのように可能ですか?私が知る限り、フォームが表示されているときには単純なhtmlであり、新しいページはPHP全体を処理する必要があるため、ここにはPHPは関係ありません。それで、同じフォームを受け取ったら、同じ方法で答える必要がありますよね? 2番目のページでは、 "$ _SERVER ['HTTP_REFERER'];" (訪問者がどこから来るか)、類似のものはありません。また、0のJavaScriptがあります。私はこれを助ける場合にはHTMLを、PHP(あまりにも多くのコードを入れないでください)のいくつかを投稿します。

したがって、質問は、誰にも2番目のフォームが機能しない理由を知っていますか?

ありがとうございました。

HTMLコード(それはステップ3の後、両方のページで同じだか6):

//Header, body and others go before of this 
<?php 
if ($_POST['sent']==1&&empty($_POST['source'])) //If form is submited 
    { 
    $i = 1; 
    ?> 
    <form action="<?php echo $_POST['page']; ?>" method="<?php echo $_POST['method']; ?>"> 
     Web page: <?php echo $_POST['page']; ?><br> 
     Method: <?php echo $_POST['method']; ?><br><br> 
     <table style="margin-left: auto; margin-right: auto;"> 
      <?php 
      while (!empty($_POST['nam'.$i])) 
       { ?> 
       <tr> 
       <td style="text-align: right;"> 
       <?php echo $_POST['nam'.$i].":</td><td><input type='".$_POST['typ'.$i]."' name='".$_POST['nam'.$i]."' value='".$_POST['val'.$i]; ?>'></td> 
       </tr> 
       <?php 
       $i++; 
       } 
      ?> 
     </table><br> 
     <input type="submit" value="Send form"> 
    </form> 
<?php 
    } 


elseif (!empty($_POST['source'])) //If user just wants to create a form and see the code 
    { 
    //I think this bit is irrelevant codereview, so I skipped it. 
    } 


else  //Body of the first page shown 
    { ?> 
<form method="post"> 
    Web page: <input type="text" name="page"> 
    Method to send: <select name="method"><option value="POST">Post</option><option value="GET">Get</option></select><br> 

    <table style="border: 1px solid #AAA; margin-left: auto; margin-right: auto;"> 
     <tr> 
      <td>Number</td> 
      <td>Name</td> 
      <td>Value</td> 
      <td>Type</td> 
     </tr> 
<?php for ($i = 1; $i <= 10; $i++) 
    { ?> 
     <tr> 
      <td><?php echo $i; ?></td> 
      <td><input type="text" name="nam<?php echo $i; ?>"></td> 
      <td><input type="text" name="val<?php echo $i; ?>"></td> 
      <td> 
      <select name="typ<?php echo $i; ?>"> 
       <option value="text">Text</option> 
       <option value="password">Password</option> 
       <option value="radio">Radio</option> 
       <option value="checkbox">Checkbox</option> 
       <option value="hidden">Hidden</option> 
       <option value="reset">Reset</option> 
       <option value="submit">Submit</option> 
      </select> 
      </td> 
     </tr> 
    <?php } ?> 
    </table><br> 

    Don't worry, a submit button is automatically added.<br> 
    <input type="hidden" name="sent" value="1"> 
    <input type="submit" value="Show form"> 
    <input type="submit" name="source" value="Form code"> 
    </form><?php } ?> 
</body> 
</html> 

:ページの作業(http://saveyourself.vacau.com/form/)から

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
     <title>Send form</title> 
     <meta content="text/html; charset=utf-8" http-equiv="content-type" /> 
</head> 
<body style="background: #DDFFFF; width: 80%; height:100%; margin: 0 10% 0 10%; text-align: center;"> 
<h1>Send form</h1> 

    <form action="http://newfutureuniversity.org/" method="POST"> 
     Web page: http://newfutureuniversity.org/<br> 
     Method: POST<br><br> 
     <table style="margin-left: auto; margin-right: auto;"> 
          <tr> 
       <td style="text-align: right;"> 
       User:</td><td><input type='text' name='User' value=''></td> 
       </tr> 
           <tr> 
       <td style="text-align: right;"> 
       Pass:</td><td><input type='password' name='Pass' value=''></td> 
       </tr> 
           <tr> 
       <td style="text-align: right;"> 
       Login:</td><td><input type='text' name='Login' value='1'></td> 
       </tr> 
         </table><br> 
     <input type="submit" value="Send form"> 
    </form> 
</body> 
</html> 

簡体字PHPコードページの完全なPHPコードが機能しない(http://saveyourself.vacau.com/form/manual/):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title>Send form</title> 
    <meta content="text/html; charset=utf-8" http-equiv="content-type" /> 
</head> 
<body style="background: #DDFFFF; width: 80%; height:100%; margin: 0 10% 0 10%; text-align: center;"> 
<h1>Send form</h1> 

<?php 
if ($_POST['sentbrr']==1) //If form is submited 
    echo stripslashes($_POST['code']); 

else //First time 
    { ?> 
    <form method="post"> 
    Enter the code for the form manually<br> 
    <textarea name="code" style="width: 100%; min-height: 450px;"></textarea><br> 
    <input type="hidden" name="sentbrr" value="1"> 
    <input type="submit" value="Show form"> 
    </form> 
    <?php 
    } ?> 

</body> 
</html> 
+0

どのChrome版をお使いですか? – tutuDajuju

+0

Google Chrome 17.0.963.46をLinuxで使用しています(debパッケージはUbuntu 11で動作しています)。10) –

答えて

2

短い回答:これはブラウザの不具合(バグ?)です。

長い回答:動作はブラウザによって異なります。 IE9、Firefox、およびSafariでテストしたところ、この問題はWebキットのバグのようです。答えは明らかなようではないですが、

Kyprosは、右のようだ: この仮説はまたnumerious crbug.comで報告「フォーム/アクション」の問題とbugs.webkit.org


研究によって支えられています。

フォームが送信されたときに正しい「リクエストURL」を送信しなかったページに移動し、フォームの検査を試みると(「Chrome開発ツール」など)、フォームが表示されます"action"属性は実際には空です。

これは、属性が正しく設定されていることを示すソースコードビューとは対照的です。

PHP(またはブラウザ?)は実際のDOMから「アクション」フィールドを削除することで私たちを保護しているようですが、理由はわかりません。これを確認するには

私はにコードを変更:

echo '<form action="http://newfutureuniversity.org/" method="POST">'; 
echo $_POST['code']; 

..andフォームの残りの部分に貼り付けます。これはうまくいきます。それは "縞模様"から来ているようではありません。あなたはまた、単に(代わりに内部の「コード」の)別のフォーム入力として、「アクション」に渡すことができ、それはまた、単に作品:私はIE9で同じシナリオを実行した後

echo '<form action="'.$_POST['action'].'" method="POST">'; 
echo stripcslashes($_POST['code']); 

- 「問題」がいないようです存在する!これは、ブラウザのセキュリティが原因だと私に考えさせる。それがクロム/ウェブキットのバグだとすれば、私はopened a bug in crbug.com、アップデートはここに掲載されます。

+1

うわー。バグレポートを開いても、それはあなたから多くの努力を払っていました。ほんとうにありがとう。最初のページのツールが作成された理由は、手動でフォームの一部を編集するようにユーザーに指示するという点は実際には分かりませんので、おそらく2番目のページを削除するだけです。そして、他のブラウザに問題がなければ(私は自分自身を最初にチェックしておくべきだったが、それはページのエラーだと思った...)、私は主な質問があなたと両方から完全に答えられた情報。ありがとうございました。 –

+0

私はあなたがテストのために作ったページだと思った。しかし、本当に問題はありませんでした。私は本当に好奇心が強く、燃える時期がありました。 – tutuDajuju

+0

はい、ページアドレスはテストのためのものですが、コードがうまくいけば、私はどこか便利な場所に置いていました。 –

6

あなたは第二(動作しない)のページを見れば、あなたが持っている:それに接続されていないaction=""属性を持つ

<form method="post"> 

を。したがって、あなたのフォームはどこにフォームを提出するかを知らない。

+0

質問を読んで忍耐がありましたことを感謝します! – Nirmal

+0

私は質問がまだ答えられていないと思う:もし両方のPHPスクリプトが同じhtmlページ(上記)を出力すると、そのページのフォームを提出した結果がどうなるのだろうか? – tutuDajuju

+0

@Kypros、tutuDajujuが述べたように、「ソースを参照」を選択すると、action = "example.com"が設定されますが、あなたが述べたように、要素を調べると、アクションは空です!それは本当に大した助けではありませんが、それをすべて読んでチェックしてくれてありがとう。 –

関連する問題