$HTTP_POST_VARSの値の受け渡しについて

このQ&Aのポイント
  • PHP側でフォームで入力した内容をPOSTで受け渡す方法について説明します。
  • 特定の名前のときにPOSTから値が返らない原因について考えられる要素を解説します。
  • 文字コードの統一によって値の受け渡しに問題が発生する可能性についても触れます。
回答を見る
  • ベストアンサー

$HTTP_POST_VARSの値の受け渡しについて。

PHP側でフォームで入力した内容をPOSTで受け渡すように しているのですが、 ☆HTML側☆ <FORM NAME="f1" ACTION="/point.php" METHOD="POST"> <TABLE> <TR><TD NOWRAP ALIGN="right"><font color="#444444"><b>記入者</b> </font></TD><TD>:</TD> <TD><input type="text" size="25" name="signedname" value="{val signedname}"> </TD></TR> </TABLE> </FORM> ☆PHP側☆ $req_data = $HTTP_POST_VARS; echo($req_data['signedname']); 特定の名前のときにPOSTからも値が返ってきません。 例えば、テキストに東と入力すると値が入るのですが、 西と入力すると値がわたりません。 なにか考えられる原因はあるのでしょうか? 文字コードはEUCで統一しています。 ご教授お願いいたします。

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • togino
  • ベストアンサー率75% (97/129)
回答No.1

上記のプログラムで実験させて頂いたところ 問題なく、「西」でも「東」でも値は渡りました。 ■ 質問であげて頂いたプログラム以外に   何か処理されている部分がありませんか? 例えば、aiurai54 さんは先の質問で $req_data = $HTTP_POST_VARS; $req_data = array_merge($req_data, $HTTP_GET_VARS); とされています。今回はこの merge 部分はカット されているんですよね。 HTML 側においても同様に、他に <input> はないのですか?<input type="submit"> で他の属性はどうされてます? ■ $HTTP_POST_VARS をお使いですけど、これを使われているということは PHP のバージョンが 4.1 以前であるのかな?と推測します。 その場合、register_globals = on である可能性が高く 意図しない GET データのグローバル変数化が あったりしないでしょうか? 極端な例 point.php?HTTP_POST_VARS[signedname]=hoge みたいな感じです。 ■ 文字コード EUC で統一されているとのことですが、 「ブラウザが誤って、例えば UNICODE で送っていた」 みたいな可能性はないでしょうか? POST をすべて GET にしてみても同じ症状でしょうか? ■ スコープ $HTTP_POST_VARS はグローバル変数ですが $req_data はローカル変数であって、その違いで 値が入っていないと勘違いしてしまっている可能性 とかはないでしょうか? POST で送られているかどうかは、直接 print_r($HTTP_POST_VARS) でチェックしてみてください。 --- 質問文だけでは問題がないように見えますので ありとあらゆる可能性を疑ってしまい、aiurai54 さんには 不愉快な思いをさせてしまったかもしれません。 すみません。 もう少し情報をいただけないでしょうか?

aiurai54
質問者

お礼

とてもいろいろな情報を頂きありがとうございます。 PHPのバージョンが古いため何かしら不具合が生じていると考えました。 PHP.iniファイルにはEUC-JPが優先であって、 文字コードが不明のときもEUC-JPとするといった形をとっていました。 ところがフォームで日本語を一文字だけ送信することはまずありえないですよね~? なので、hidden値で文字を入れておくことにし。解決いたしました。 お手数おかけいたしました。 早くバージョンをあげるように努力します!!

関連するQ&A

  • POST GET HTTP 404 未検出

    POSTメソッドとGETメソッドの混在したFORMで404エラーとなります。 具体的には、次のようなFORMを考えています。 <form action="login.php?hoge=hogehoge" method="POST"> <table border="0"> <tr><td>ユーザ名</td><td><input type="text" name="name"></td></tr> <tr><td>パスワード</td><td><input type="password" name="pass"></td></tr> <tr><td colspan="2"><input type="submit" value="ログイン"></td></tr> </table> </form> Windows XPではうまく機能するのですが、 Vineではうまくいきません。「HTTP 404 未検出」となります。 どうしたらいいのかさっぱり分からない状態です。 エラーの原因を教えていただければと思います。 詳しい環境: OS:Vine PHP:5.2.8 Apache:2.0

    • 締切済み
    • PHP
  • <?php ?>内にてformを使用して$POSTに値を送る

    ※PHP初心者なのでお手柔らかにお願いします。 現在PHPを使用して掲示板を作成しているのですが、 掲示板の書き込みフォームの作成で詰まっています。 下記ソースを実行してもテーブルが表示されません。 テーブルのみ表示を試してみたらうまくいったので、 inputタグがおかしいのではと思いますが何が NGなのかよく分かりません。 誰か教えてください。 <?php $Temp = '<div align="center">       <form action="bbs_input.php" method="POST">       <table border="0" width="100%">         <tr>           <td width="20%" align="right" bgcolor="E0FFFF">             <b><font size="2" color="#696969">お名前(HN)               </font></b>           </td>           <td>             <input type="text" name="NAME" size="30"             maxlength="20" value="<?=$_POST['NAME'] ?>">           </td>         </tr>      </table>      </form>      </div>'; print ($Temp); ?>

    • ベストアンサー
    • PHP
  • POSTデータをフォームに残す方法

    同一フォーム内PHPへ、フォームをポストした際、 フォーム入力チェックを行い誤りがあれば、 元のフォームに入力したデータを残したいのですがどのようにすればよいでしょうか? 結果によって分岐せずに、フォームに必ず値が残ると言う方法でもかまいません。 //ここから <form method="post" action =""> <table> <tr> <td><input name="title" size="20"></td> <td><input type="submit" name="send" value=" 登録 "></td> </tr> </table> </form> <?php if(len_check($_POST['title'])>8){ echo "文字数オーバーです。"; //フォームに値を戻す処理。 }else{ echo "入力した文字={$_POST['title']}"; //フォームの値は破棄。 } function len_check($s){ return strlen(bin2hex($s)) / 2; } ?>

    • ベストアンサー
    • PHP
  • textareaでのデータ受け渡し

    入力画面と参照画面を作成しています 入力画面にtextareaと参照ボタンがあります 両画面ともPHPとテンプレートファイルを使用しています 下記のようにテンプレートファイルに記入しています <tr> <td>内容</td> <td> <textarea name=srinaiyou rows=5 cols=42></textarea> </td> </tr> <tr> <td>仕入先</td> <td> <input type=text name=sritokcd value="" size=10 maxlength=8> <input type=submit name=sub_refer value=参  照> </td> </tr> 参照画面は下記のようにPHP内で記入しています 得意先のデータが複数行になるためPHPに記入しています <table width=50% border=1 cellspacing=0 cellpadding=0> <tr bgcolor=#ccccff> <th width=15% nowrap>得意先コード</th> <th width=42% nowrap>得意先名</th> </tr> <tr> <td align=center>12354879</td> <td align=center><table border=0 cellspacing=0 cellpadding=0><form name=frm12354879 method=post action=/beta/index.php><tr><td><input type=hidden name=page value=T_SyuuriEntry> <input type=hidden name=srinaiyou value=テスト 備考> <input type=hidden name=sritokcd value=12354879> <a href=JavaScript:document.frm12354879.submit()>ABC工務店建設会社</a></td></tr></form></table></td> </tr> 入力画面のtextareaに テスト 備考 と入力して参照ボタンを押して参照画面を表示します 参照画面から得意先名を選択したら入力画面に戻るようにしていますが 入力画面が表示されるとtextareaには"テスト"しか表示されません。"備考"が消えてしまいます うまくデータが受け渡しできません 参照画面を表示した時にはデータが渡っているみたいですが... 同じような質問を見て自分なりにいろいろと試しましたが解決できません 何卒よろしくお願いします

    • ベストアンサー
    • PHP
  • POSTを配列として送信し、キーと値を一覧で表示

    formに入力した値をPOSTを配列として送信し、 そのキーと値の一覧表を作ってみようとしたのですが、 思うように動いてくれません。何が間違っているのでしょうか。 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>POSTを配列で送信して取得する</title> </head> <body> <?php if($_SERVER[REQUEST_METHOD]=="POST"){ if(isset($_POST["submit_no"])){ echo "<table border=\"1\"><tr><td>番号</td><td>内用</td><tr>"; while($key_no = key($_POST[no])+1){ //+1は番号を1から表示させるため $values = htmlspecialchars($_POST[no],ENT_QUOTES); echo <<< EOS <tr> <td>$key_no</td> <td>$values</td> </tr> EOS; } echo "</table>"; } } ?> <form action="post_hairetu.php" method="POST" enctype="multipart/form-data"> 1<input type="text" name="no[]" value="" /><br /> 2<input type="text" name="no[]" value="" /><br /> 3<input type="text" name="no[]" value="" /><br /> <input type="submit" name="submit_no" value="送信" /> </form> </body> </html>

    • ベストアンサー
    • PHP
  • phpのpostについて

    a.phpの値をb.phpにpostしたいのですがうまく値が渡せません post元にはname属性に変数を用いているのですがpost先でnameをどのように指定したらいいかわかりません <a.php> <form action="foo.php" method="POST"> <div id="button"> <input type="submit" name ="PostGo" value="postTime" style="margin-right:30px;" /> </div> <table> <?php for ($data = 1; $data < 5; $data++) { ?> <tr><td> <select name="test<?php echo $data?>"> <option value=1>1 <option value=2>2 <option value=3>3 <option value=4>4 </select> <?php } ?> </table></form> <b.php> <?php for($i=1;$i<5;$i++){ $test =($_POST['test']);←ここの部分のpostをどう指定したらいいかわかりません echo $test; } ?> ※$_POST['test' + $i] これでも取れませんでした

    • ベストアンサー
    • PHP
  • データの受け渡し(表内に収めたいのですが)

    phpで表から表へデータを飛ばし表示させようとしています。 例 ___________________ |_A___|__B___|___C__| |_____|______|_______| ↓ ___________________ |_A___|__B___|___C__| |_____|______|_______| 例えば、下記のようなソースsample.php→sample4.php を作りました。 データは飛ばすことが出来ますが、表内に収める場合 どのようにすればよいですか? ちなみに、YPHPSampleは、ソースがおいてあるディレクトリです。 (1)sample.php <html> <head> <title>サンプル</title> <head> <body> <table border="2"> <tr bgcolor="#AAAAAA"> <td><th>都市名</th></td> <td><th>最高気温</th></td> <td><th>最低気温</th></td> </tr> <tr bgcolor="#AAAAAA"> <td><th> <form action="http://localhost/YPHPSample/sample4.php" method="post"> <input type="text" name="aut"/> </th></td> <td><th> <form action="http://localhost/YPHPSample/sample4.php" method="post"> <input type="text" name="soft"/> </th></td> <td><th> <form action="http://localhost/YPHPSample/sample4.php" method="post"> <input type="text" name="hard"/> </th></td> </tr> </table> <input type="submit" value="送信"/> </form> </body> </html> (2)sample4.php <html> <head> <title>サンプル</title> </head> <body> <table border="2"> <tr bgcolor="#AAAAAA"> <td><th>都市名</th></td> <td><th>最高気温</th></td> <td><th>最低気温</th></td> </tr> </table> <?php if($_POST["aut"]) print"{$_POST["aut"]}<br/>\n"; if($_POST["soft"]) print"{$_POST["soft"]}<br/>\n"; if($_POST["hard"]) print"{$_POST["hard"]}<br/>\n"; ?> </body> </html>

    • 締切済み
    • PHP
  • $_REQUESTの値を保存する方法

    データを更新する画面を作成しています。 HTML・PHP・MYSQLを使用。 1本目のPHPはコードを入力し、 フォーム内のSUBMITボタンで、次のPHPを呼び出します。 ================================================ a.php <?php 入力チェック エラーがないとき header(省略. "/b.php?CODE=" . ($_REQUEST["CODE"])); exit(); ?> <form action="a.php" method="post"> <input type="text" name="code"> <input type="submit" name="submit" value="登録"> </form> とあって、入力チェックでエラーがなければ 別のPHPに入力したコードをパラメーターとして 持って移動。 ================================================= b.php <?php $code = $_REQUEST[CODE]; このフォームのエラーチェック エラーがないとき header(省略. "/a.php); exit(); ?> <form action="b.php" method="post"> <table> <tr><td><?php echo($code); ?></td></tr> <tr><td><input type="text"></td></tr> </table> <input type="submit" name="submit" value="更新"> </form> 受け取ったコードに対する情報を入力し、 更新ボタンを押す⇒エラーがなければデータを更新、もとの画面に。 最初にb.phpを表示したときは、$codeに値が入っていて、画面にコードが表示されますが、 更新ボタンを押して、画面にエラーがあるとき、 エラーチェックをして画面表示をすると、$codeの値が消えてしまいます。 この値を残す方法を探しています。 $_REQUESTの値を残す、もしくは、他のプログラムから パラメーターを取得し使用する方法を どなたか、教えてください!

    • ベストアンサー
    • PHP
  • ページ間の値の受け渡しについて

    緊急でPHPを用いて開発しなければならず、値の受渡し方法が調べても 結果がうまく出来ないために教えて下さい。 説明がうまくできないので、ソースの一部を下記に記載しております。 【keikaku.php】 <?php $link = DB接続 $query = "SELECT (1) , (2) , (3) FROM KEIKAKU WHERE 営業所= '東京'"; $res_result = mysql_query($query,$link); echo ("<form action='keikaku_input.php' method='POST'>"); while($row = mysql_fetch_array($res_result)){  echo ("<table border=1>");  echo ("<tr>");  echo ("<td><input type='radio' name='name' value=''></td>");  echo ("<td>");  echo $row['(1)'];  echo ("</td><td>");  echo $row['(2)'];  echo ("</td><td>");  echo $row['(3)'];  echo ("</td>");  echo ("</tr>"); } echo ("<input type='submit' value='次へ'>"); echo ("</form>"); ?> というSQLで一覧を表示させて、対象行のラジオボタンが選択されると (1)と(2)の値を使い、【keikaku_input.php】で更に別のSQLを実行後に 結果を表示させる事を行ないたいのです。 【keikaku.php】→【keikaku_input.php】へ(1)と(2)の値を渡したい場合 はどのようにすれば良いかご教授願えませんでしょうか?

    • ベストアンサー
    • PHP
  • htmlファイルからphpファイルへの値の受け渡し

    表を使った問い合わせフォームを作成したのですが、データを受け渡す方法がわかりません!! 初めの問い合わせページは以下のようにhtmlファイルで記述しました。 この場合、次のページにデータを引き渡すphpファイルには、どうのような記述をしたら良いのでしょうか? <form method="post" action="info.php"> <table class="table margin01" width="592" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="190" align="left" bgcolor="#FFF09D">お名前 <span class="tabletext1">※必須</span></td> <td><input name="name" type="text" class="form01" id="name" /><br /> 入力例:山田 太郎 </td> </tr> <tr> <td align="left" bgcolor="#FFF09D">メールアドレス <span class="tabletext1">※必須</span></td> <td><input name="mail" type="text" class="form01" id="mail" /><br /> 入力例:●●●●●●@yamada.co.jp </td> </tr> <tr> <td align="left" bgcolor="#FFF09D">メールアドレス(確認) <span class="tabletext1">※必須</span></td> <td><input name="mail2" type="text" class="form01" id="mail2" /></td> </tr> <tr> <td align="left" bgcolor="#FFF09D">お問い合せ内容 <span class="tabletext1">※必須</span></td> <td> <select name="list" id="list"> <option>お問い合せ内容をお選びください</option> <option>事業内容について</option> <option>求人について </option> <option>その他</option> </select> </td> </tr> <tr> <td align="left" bgcolor="#FFF09D">内容 <span class="tabletext1">※必須</span></td> <td><textarea name="content" id="内容" cols="45" rows="5"></textarea></td> </tr> </table> <p align="center" class="margin01"> <input type="reset" value="クリア" /> <input type="submit" value="送信内容を確認する" /> </p> <input type="hidden" name="test" value="cloud" /> </form>

    • ベストアンサー
    • PHP

専門家に質問してみよう