2009-05-10 12 views
19

私はBMI計算機を作成しようとしています。これにより、人々はメートル法または帝国測定のいずれかを使用できるようになります。PHPからフォームの 'name'変数にアクセスする方法

私は自分の問題を解決するために隠れたタグを使用することができることを認識していますが、これは私が尋ねる前に私に迷惑をかけることがあります:$_POST['variableName']を使って、しかし...私はどのような形式がであるかを確認する方法を知らないか、または見て、変数を提出するを使用します。

私のコードは、(私はそれが問題に厳密に関連するだか分からないが)以下です:

<?php 
    $bmiSubmitted  = $_POST['bmiSubmitted']; 

    if (isset($bmiSubmitted)) { 
     $height  = $_POST['height']; 
     $weight  = $_POST['weight']; 
     $bmi  = floor($weight/($height*$height)); 

     ?> 
      <ul id="bmi"> 
      <li>Weight (in kilograms) is: <span><?php echo "$weight"; ?></span></li> 

      <li>Height (in metres) is: <span><?php echo "$height"; ?></span></li> 

      <li>Body mass index (BMI) is: <span><?php echo "$bmi"; ?></span></li> 

      </ul> 
     <?php 
    } 

    else { 
    ?> 

    <div id="formSelector"> 

    <ul> 
     <li><a href="#metric">Metric</a></li> 
     <li><a href="#imperial">Imperial</a></li> 
    </ul> 

     <form name="met" id="metric" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="form/multipart"> 

      <fieldset> 
       <label for="weight">Weight (<abbr title="Kilograms">kg</abbr>):</label> 
        <input type="text" name="weight" id="weight" /> 

       <label for="height">Height (<abbr title="metres">m</abbr>):</label> 
        <input type="text" name="height" id="height" /> 

       <input type="hidden" name="bmiSubmitted" id="bmiSubmitted" value="1" /> 
      </fieldset> 

      <fieldset> 
       <input type="reset" id="reset" value="Clear" /> 

       <input type="submit" id="submit" value="Submit" /> 
      </fieldset> 
     </form> 

     <form name="imp" id="imperial" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="form/multipart"> 

      <fieldset> 

      <label for="weight">Weight (<abbr title="Pounds">lbs</abbr>):</label> 
       <input type="text" name="weight" id="weight" /> 

      <label for="height">Height (Inches):</label> 
       <input type="text" name="height" id="height"/
      <input type="hidden" name="bmiSubmitted" id="bmiSubmitted" value="1" /> 
      </fieldset> 

      <fieldset> 
       <input type="reset" id="reset" value="Clear" /> 
       <input type="submit" id="submit" value="Submit" /> 
      </fieldset> 
     </form> 

    <?php 
    } 
?> 

私はそれが働いていることを確認(検証なしで、現時点では-Iは、群衆の私にしたくなかったのに質問が多すぎる)私はフォームを追加しましたが、帝国のための処理はまだありません。

+1

以下に記載されているように、フォームの名前は実際には重要ではありません。あるフォームまたは別のフォームとデータを区別する必要がある場合は、各フォームが異なるアクションを持つ方がよいでしょう。 – rojoca

答えて

81

、あなたが使用することができます。

  • 隠し入力フィールドを。
  • [送信]ボタンの名前または値。

フォームの名前は、POSTデータの一部としてサーバーに送信されません。

あなたはエコー$の高さを持つことを実現します続い

<form name="myform" method="post" action="" enctype="multipart/form-data"> 
    <input type="hidden" name="frmname" value=""/> 
</form> 
+2

2番目のポイントは素晴らしいです。 – jmucchiello

+5

もう2番目のポイントが必要です。 –

13

フォーム名は送信されません。各フォームに非表示のフィールドを追加し、それを1日と呼びます。

+0

本当ですか?それはフォームの半分の実装のようだ... o.Oまだ、私はそれがどのように動作するか見ることができないために良い感じ。 –

+0

@ricebowlフォームの名前は、DOM操作などでのみ有効です。 – strager

+1

@ricebowl:これもHTTPの仕組みを理解しています。それはPHPとは関係ありません。 – Narcissus

0

フォームフィールドの名前のみが送信され、フォーム自体の名前は送信されません。しかし、その中に名前を持つ隠しフィールドを設定することができます。送信されたフォームを識別するために

0

ように、コードを使用することができます。あなたのアプリケーションに非常に深刻なセキュリティホールが広がっていますよね?

+0

私は...しませんでした。結果が奇妙に予想外になった場合は、入力値を見られるようにすることのみを意図していました。どのように...これはセキュリティホールですか?サニタイズの一環として、高さまたは重量のいずれかの値が破棄され、ユーザーがエラーメッセージとともにフォームに戻ったことに注意してください。 –

+0

もちろん、テッサリアが指摘したように、「意図と結果はまれに一致している」 –

+0

これは深刻なセキュリティホール、Googleの攻撃のためのGoogleです。基本的に、誰かがその変数にいくつかのjavascriptを追加すると、その変数があなたのページに追加され、ログインしたユーザーのCookieを盗み出してアプリケーションとしてアクセスすることができます。BIGのセキュリティホール:) – PeterV

2

petervandijck.comと指摘されているように、このコードはある種のログインシステムの背後にあるか、他のコードに埋め込まれているとXSS攻撃の影響を受けやすい可能性があります。

<?php echo "$weight"; ?> 

は、あなたが代わりに書く必要があります:

あなたが書いたXSS攻撃を防ぐために、

<?=htmlentities($weight); ?> 
+2

はどこでもサポートされていません。 PHPのバージョンが最新の場合でも、最新のオプションがPHP設定ファイルでオフになっていても、共有ホスティングに気付いた – happy

8

で:より良いように書くことができ

<?php echo htmlentities($weight); ?> 

フォーム提出ボタン(フォームのIDメソッドはpost):

PHPファイルで
<input type="submit" value="save" name="commentData"> 

:あなたはこのようにそれを行うことができます

if (isset($_POST['commentData'])){ 
    // Code 
} 
13

<input type="text" name="myform[login]"> 
<input type="password" name="myform[password]"> 

何らかの理由で掲示値

if (isset($_POST['myform'])) { 
    $values = $_POST['myform']; 

    // $login = $values['login']; 
    // ... 
} 
+0

ありがとうございました!これは私にとってはうまくいく。 – HCN

+0

私はそれについて行くその方法が本当に好きです!私の唯一の質問は、チェックボックスやラジオのような入力グループではどうすればいいのでしょうか? 'name =" myform [chkgrp] [] "'は有効ですか? – eklingen

5

の名前を確認してくださいサブミット時に送信ボタンがスーパーグローバル$_POSTに渡されませんAjax/jQueryに悩まされている。それが誰かを助け念の

...

2

あなたは、私がログイン/登録組み合わせたページを作る時はいつでも私が使用して、フォームのactionパラメータでGETを使用することができます。例えば

action="loginregister.php?whichform=loginform"

は、この情報がお役に立てば幸い!

0

送信ボタンに名前を付けて、それに基づいて行う必要があることを実行できます。私はページにいくつかのフォームを持っていて、それだけです。ボタン名を渡し、ボタン名=ボタン名が何かをしたら。

関連する問題