スレッド表示 | フラット表示〕 全トピック 920 件中 54 番目 次≫ ≪前

$_POSTで値が取得できているのにエラーログに残ってしまう。

created: 2008-05-29 14:34 | modified: 2008-05-29 21:09 | reply: 8

[4159] $_POSTで値が取得できているのにエラーログに残ってしまう。

user: ほうじ茶 | created: 2008-05-29 14:34
はじめまして!

Apache/2.0.59 (Unix) Zend Core/2.0.1 PHP/5.2.1 OS/OS400
にてPHP開発に取り組んでおります。

今回、入力値よりSQLを使ってDBを集計しPHP/SWF Charts というツールを使ってフラッシュの3D円グラフを作成している中なのですが、

<HTML>側で
<form action="source2.php"method="POST">
<select name="year">
<option value="2007">2007</option>
</select>
<input type="submit"value=" 検索 ">
(※不要な箇所は省いています・・)
より"2007"という値を"year"という名前でsource2.phpへPOST送信しています。

一方、<PHP>側で
$a = htmlspecialchars ( $_POST["year"], ENT_QUOTES );
を使って取得し、変数$aに代入しています。

var_dump($_POST);したところ
array(1) { ["year"]=> string(4) "2007" }、

echo $b;したところ
2007

とただしく値が取れている感じでした。
次のSQLも正しく実行できました。

ですがログにPHP Notice: Undefined index: year in ~が出ており
肝心のグラフ作成が出来ません。

$a = "2007";//htmlspecialchars ( $_POST["year"], ENT_QUOTES );
のようにリテラルで値を入れるとちゃんとしたグラフが出来上がるのですが・・・

リテラルではうまくいくということは$_POSTは連想配列として値を持っているからうまくいかないということなのでしょうか??

PHP/SWF Charts というツールについての質問をするつもりではないのですが何が問題なのか不明なため質問させていただきました。

宜しくお願いいたします。
reply: 4160 返信 編集 削除

[4160] Undefined index とコンボボックス

user: ゆうじ | created: 2008-05-29 16:03
$a = "2007";//htmlspecialchars ( $_POST["year"], ENT_QUOTES );
のようにリテラルで値を入れるとちゃんとしたグラフが出来上がるのですが・・・

リテラルではうまくいくということは$_POSTは連想配列として値を持っているからうまくいかないということなのでしょうか??

ちょっと不可解な現象ですね。
でも、Notice: Undefined index: year が出てるので
$_POSTが連想配列だからということではなく
$_POST["year"]が初期化されて無いことが原因だと思います。

year はコンボボックスですが何も選択しなかった場合、
値が空になってるのではないでしょうか。(HTMLの仕様?)

以下のようにデフォルトの選択値を与えても現象は同じでしょうか。
<option value="2007" selected="selected">2007</option> 
Parent: 4159  reply: 4161 返信 編集 削除

[4161] :RE

user: ほうじ茶 | created: 2008-05-29 16:21
ご回答ありがとうございます。

selectedを加えても駄目でした・・・
説明の為省きましたがtextでの入力フォームも設けてありそれもUndefined indexとなっていしまいます。
しかし、送信されてきた(未定義といわれている)値を使ってのSQLは正しく実行されています。
SQLを実行する関数のWarningも出ていますが。
ホント不可解ですよね・・・・

後続の円グラフツールの処理で色々やっているのを言い訳に諦めたほうがいいのでしょうか・・
Parent: 4160  reply: 4162 返信 編集 削除

[4162] スーパーグローバル変数はどこへ?

user: ゆうじ | created: 2008-05-29 17:11
selectedを加えても駄目でした・・・
説明の為省きましたがtextでの入力フォームも設けてありそれもUndefined indexとなっていしまいます。

値が空でもindexは作られますね。
これは勘違いでした。すみません。


以前、スーパーグローバル変数が
受け取れないという現象ではまりましたが、
http://www.sound-uz.jp/php/bbs/thread/4103?view=flat
このときは PHP4.1&register_globals=Onってのが
原因でした。PHP5なので関係ないですね。
variables_order は関係するかもしれませんが。


$a = "2007";

↑これで正常に動作するのであれば、
これより前に原因がありますので
現象を再現できる最小限のコードを挙げてもらえれば
私も試してみます。
Parent: 4161  reply: 4163 返信 編集 削除

[4163] 長々とすいません;;

user: ほうじ茶 | created: 2008-05-29 18:01
register_globalsはOffになっており、
variables_order は "GPCS"となっています。

コードは本当に単純なので書くまでも無いかと思いますが
<html>が以下です。
↓↓↓
<html><head><title></title></head><body>
<form action="source2.php"method="POST">
<input type=text name="parm"size="6"maxlength="10"value="">
<select name="year">
<option value="2006">2006</option>
<option value="2007">2007</option>
</select>
<input type="submit"value=" 検索 ">
</form></body></html>

<php>側が以下となっています。
↓↓↓(source2.php)
<?php
$a = htmlspecialchars ( $_POST["parm"], ENT_QUOTES );
$b = htmlspecialchars ( $_POST["year"], ENT_QUOTES );
↓db2_@@という関数を使用しています;;↓
$i5link = db2_connect("*LOCAL","QPGMR ","QPGMR ");       $i5datebase = "PHPLIB.HOSYKKP";                  $sql = "SELECT SKDBCD,SUM(SKURKG) FROM $i5datebase WHERE SKTNC4 = '$a'AND SKYYYY = '$b' AND SKRUIK = '1'GROUP BY SKDBCD ORDER BY SKDBCD";                            
$stmt = db2_exec($i5link,$sql) or die('Failed query:'.db2_stmt_error().":".db2_stmt_errormsg());
?>

本当はこの後にグラフ作成のためのコードがあるのですが、上のdb2_@@()関数なども含め環境面で違っているため再現は大変だと思います@@;
お時間を割かせてしまうのは申し訳ないので・・・
Parent: 4162  reply: 4164 返信 編集 削除

[4164] 再現できる最小限のコード

user: ゆうじ | created: 2008-05-29 19:16
私が想像したより長い最小限のコードでした。

現象を整理すると、
エラーログに Undefined index が記録されるが
$_POST["year"] の値は得られている。
しかし、これ以降の処理では、
$_POST["year"] が無いがごとく動作している。

これだけなら以下のコードを試してください。

test.php
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);

$a = $_POST["year"];

?>
<pre>$a: <?php var_dump($a); ?></pre>
<form action="test.php" method="POST">
<select name="year">
<option value="2007">2007</option>
</select>
<input type="submit"value="Submit">

これで再現しないなら、
$a = htmlspecialchars ( $_POST["parm"], ENT_QUOTES ); か
データベース処理の中が原因ってことになりませんか。

再現するとなるともう無理です。
PHPのバグの可能性も疑ってみるべきでしょうね。
Parent: 4163  reply: 4165 返信 編集 削除

[4165] 無理ですかね・・・

user: ほうじ茶 | created: 2008-05-29 19:45
ご提示してくださりありがとうございます。

【submit前】
Notice: Undefined index: year in /www/zendcore/htdocs/test.php on line 4

$a:NULL

【submit後】
$a:string(4) "2007"

となっています。

やはり後続の処理が悪さをしているという事でしょうか;
一番の目的は円グラフ出力ですので、他のツールかimage関数など別の方法を考えたいと思います。

すばやく回答していただきありがとうございました♪
Parent: 4164  reply: 4166 返信 編集 削除

[4166] 後は地道にvar_dumpしか

user: ゆうじ | created: 2008-05-29 20:27
$_POSTの値は拾えてるようですね。

原因はPHPスクリプト内って事なので、
値が失われた箇所を地道に var_dump($a); で
探せば原因の箇所が見つかると思います。


まったく別件ですが、
気になったので宜しければ教えて下さい。

$a = htmlspecialchars ( $_POST["parm"], ENT_QUOTES );

XSS対策のひとつとして、表示の際
htmlspecialchars でエスケープは良くやりますが
入力値に htmlspecialchars を適用すると
以降の処理で不都合なことはありませんか。

仕様ならいいのですが気になったもので。すみません。
Parent: 4165  reply: 4167 返信 編集 削除

[4167] まだまだ・・

user: ほうじ茶 | created: 2008-05-29 21:09
そうですか・・・PHP側にエラーがあると分かっただけでも進歩です。
本当にありがとうございました!!

var_dumpでもひろえ続けているので、相変わらず不可解です・・・

私はまだまだ始めたばっかなので、ただサイトに書いてあったことを鵜呑みにして今回の$_POSTの件もあり、記述してみようと思って付け加えたレベルなので申し訳ありませんがあまりよく分かっていないです、すいません;;
Parent: 4166  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 54 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑