![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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>
![「POSTを配列として送信し、キーと値を一」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/4/1050884_5497d830eb65e/M.jpg)
No.4ベストアンサー
- 回答日時:
>Parse error: syntax error, unexpected $end in ××× on line 32
これは構文エラーで、?>とかがちゃんと終わってないときに出るものなんですが、
見る限りおかしいところはありません。
とりあえず、以下参考になりそうな質問を見つけてきたので、確認してみてください。
http://oshiete.goo.ne.jp/qa/3026151.html
それと実際に私の方でも実行してみたのですが、いくつかミスがあるのと、
ロジック的な問題で、POSTした先で無限ループに陥ってしまいました。
まずはこの部分、
while($key_no = key($_POST["no"])+1){
このkey関数は現在の配列ポインタのキーを返し、
最後までいくとNULLを返しますが、
残念ながら実行しても内部ポインタは進みません。
なので、ループの最後で
next($_POST["no"]);
としてやって内部ポインタを進めてやらない限り永久に最初のキーを返し続けます。
それと +1 の部分。
whileは()の中の結果がFALSEと==にならない限りループを続けます。
いくらkey($_POST["no"])で配列の最後に達してNULLが返ってきたとしても、
+1 をされているので、NULLが0に暗黙変換され、key($_POST["no"])+1 の結果は 1 となってしまい、
$key_no に 1 が入り続けてしまいます。
ですので、+1はループの中で行ってください。
そうすると、
while($key_no = key($_POST["no"])){
になると思いますが、これでもだめで、$_POST["no"]の最初のキーは数字の0、
つまりこれはFALSEと==になってしまいます。
なので、この場合1ループも実行されません。
ですので、
while(NULL !== ($key_no = key($_POST["no"]))){
としてやる必要があります。
それとミスが一つ、
$values = htmlspecialchars($_POST[no],ENT_QUOTES);
この部分は
$values = htmlspecialchars($_POST["no"][$key_no],ENT_QUOTES);
ですね。
最後に、連想配列のキーを$array[key]といった感じで、クオートで囲わずに書いてますが、
これでも一応は動くのですが、これは間違いで、
連想配列のキーは文字列なので必ず $array["key"] といった感じで書いてやってください。
じゃぁなぜ動くの?って思いますが、
それはPHPの仕様で、意味を成さない文字列は文字列として自動解釈されてしまうからです。
本来、$array[key]と書いた場合、keyというまず定数を探しますから、
もし、keyという名前の定数が定義されていた場合、それに格納された値が返ってきてしまいます。
っと、長々と説明しましたが、
結局のところ配列と取り出す場合は、速度的に
foreach($_POST["no"] as $key => $value)
としてやるのが良いですし、一般的です。
EOS;の前のTABスペースが原因でした。削除したところちゃんと動きました。
while($key_no = key($_POST["no"])){の部分ですが、
内部ポインタが進まず正しく動かないのですね。
whileよりもforeachを基本としてやっていきます。
ありがとうございます。
No.5
- 回答日時:
追加で、
$values = htmlspecialchars($_POST["no"][$key_no],ENT_QUOTES);
の部分、すでに$key_noを+1した値が入ってるとだめなので、
やはり+1は表示する直前か、表示用の別の変数を用意してやってください。
No.3
- 回答日時:
>このコードを書いたphpファイルのパスを
>ブラウザのURL欄に入力してEnterを押しても何も表示されず、
>表示される画面は真っ白な状態です。
>ちなみに、試しにphpの部分を全て削除すればformの部分が表示されます。
思うようにどころか、それは動いてませんね。
ちなみに、phpの動作確認自体はとれてますか?
サーバーのエラー文がでないということはphpのエラーかもしれません。
単純にテスト環境であるなら、
php.iniの
display_errors = Off
のところをOnに変えて見てください。
なにかしらエラー文がでるかもしれません。
ありがとうございます。
再度試したところ、
Parse error: syntax error, unexpected $end in ××× on line 32
といったエラーが出てきました。
「解析エラー: 文法のエラー 予想外の$で終わっている。それは32列目で判断されました。」
という意味になるのでしょうか。32列目は</html>の列です。
$が抜けているか余分ということか見直してみたのですが、見つかりませんでした。
No.2
- 回答日時:
まず、どういう風に動かないか、なるべく正確にお教えいただけますでしょうか。
添付の画像は問題を示しているものなのでしょうか?
添付の画像と質問文を見る限りでは、何が間違っていて、どう動かないのか見当がつきません。
Apache/2.4.1 (Win32) PHP/5.2.17の環境で動かしています。
添付画像はイラストレーターで作ったもので実現したいイメージです。
このコードを書いたphpファイルのパスを
ブラウザのURL欄に入力してEnterを押しても何も表示されず、
表示される画面は真っ白な状態です。
ちなみに、試しにphpの部分を全て削除すればformの部分が表示されます。
No.1
- 回答日時:
foreachでまわすほうがロジックが簡略では?
その他いろいろ無駄な処理も整理できそうですね
<?php
if(isset($_REQUEST["no"]) and is_array($_REQUEST["no"])){
echo "<table border=\"1\"><tr><td>番号</td><td>内用</td></tr>";
foreach($_REQUEST["no"] as $key=>$val){
$key++;
$val = htmlspecialchars($val);
echo <<< EOS
<tr>
<td>{$key}</td>
<td>{$val}</td>
</tr>
EOS;
}
echo "</table>";
}
?>
<form>
1<input type="text" name="no[]"><br>
2<input type="text" name="no[]"><br>
3<input type="text" name="no[]"><br>
<input type="submit" value="送信">
</form>
ありがとうございます。
さっそく試してみましたが、ちゃんと動きませんでした。
ページを開いても真っ白な画面のままになってしまいます。
while($key_no = key($_POST[no])+1)は、
参考書を参考にしてやってみたのですが正しいでしょうか。
inputのvalueは空の場合は省略してもよいのですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP php ログイン 1 2022/11/01 00:24
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マッチング処理(1:N)
-
配列から順位を算出したい
-
PHPで連想配列のプルダウンメニ...
-
Excel VBAでフィルター後の対象...
-
PHPからCSVをアップロード後、m...
-
配列を回すとき、最後の要素だ...
-
配列の添え字が小数だとどうなる?
-
CSVデータの行数カウントをした...
-
別ファイルの構造体の値を読み...
-
配列の初期化
-
順位を付ける時のスコアの重複...
-
file_existsでファイル名の部分...
-
CSVファイルの最終行のデー...
-
foreachのなかで次のキーを参照...
-
チェックボックス複数選択 mys...
-
漢字のソートについて
-
配列の要素(value)に、変数を...
-
String だと「 ByRef引数の型が...
-
verilogで、配列の一部をタスク...
-
phpで、連想配列を普通の配列に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
重複確認
-
foreachで上限回数指定方法また...
-
マッチング処理(1:N)
-
Excel VBAでフィルター後の対象...
-
VB.NET で 二次元のハッシュは...
-
多次元配列を、1次元の配列にす...
-
SELECT 使用時の bindValue の...
-
Smartyでインクリメント
-
PHPでこのコード自体に意味は無...
-
PHP、{}記号の意味
-
配列を比較して同じものがあっ...
-
phpでforeachの中にforeachがあ...
-
多次元配列の中で条件に合う要...
-
sqlのデーターを『あ行』『か行...
-
ラジオボタンをランダムに表示...
-
キーが倍数の時の値の存在チェ...
-
三重県南部の温泉
-
foreachで配列を、左から縦3列...
-
ジャグ配列
-
構造体の中でユーザー定義型の...
おすすめ情報