![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
POSTしたデータがリストボックスに反映されません。
ホームページ制作初心者です。
同一ファイル内で、リストボックスから値を選択し、その値に従って別のリストボックスの内容を絞り込みたいと思っています。
POSTは正常に行われていますが、データを受けた後、リストボックスが空欄のままです。
根本的にやろうとしている方法が間違っているのだと思います。
丁度、Okwaveのカテゴリ選択の様な、階層で絞り込んでいくようなものを作りたいです。
良い方法ありましたらご教授願います。
よろしくお願いいたします。
<FORM action="" method="post">
<?php
$db = new PDO("mysql:host=localhost;dbname=DBNAME", "ROOT", "PASS");
$db->query("SET NAMES 'utf8'");
//品番
$rs = $db->query("SELECT * FROM m20mm");
?>
<h4>品番指定</h4>
<select name="hinban" size="5" multiple="multiple" onchange="submit(this.form)" size="18">
<?php
foreach($rs as $name1=>$hinban){
echo "<option value={$hinban[0]} selected>{$hinban[1]}</option>";
}
?>
</select>
</FORM>
//ここから正常に動作していないと思われる。
<FORM>
<?php
$db2 = new PDO("mysql:host=localhost;dbname=DBNAME", "ROOT", "PASS");
$db2->query("SET NAMES 'utf8'");
//品目
$sql =<<<HINMOKU
SELECT *
FROM dfw_m40m
WHERE dfw_m40m.分類C3 = :hinban
HINMOKU;
$hinban = $_POST['hinban'];
$bs2 = $db2->prepare($sql);
$bs2->bindparam(":hinban",$hinban);
$bs2->execute();
$bs2->setFetchMode(PDO::FETCH_OBJ);
?>
<h4>品目指定</h4>
<select name="hinmoku" size="5" multiple="multiple" size="18">
<?php
foreach($bs2 as $name1=>$hinmoku){
echo "<option value={$hinmoku[0]}>{$hinmoku[2]}</option>";
}
?>
</select>
<br>
<br>
</FORM>
No.2ベストアンサー
- 回答日時:
一回コレでやってみてください
$hinban = $_POST['hinban'];
$bs2 = $db2->prepare($sql);
$bs2->bindparam(":hinban",$hinban);
$bs2->execute();
?>
<h4>品目指定</h4>
<select name="hinmoku" size="5">
<?php
while($hinmoku = $bs2->fetch(PDO::FETCH_BOTH)){
echo "<option value={$hinmoku[0]}>{$hinmoku[2]}</option>";
}
?>
</select>
hinbanの方のselectもmultipleは不要と思います。
また、
echo "<option value={$hinban[0]} selected>{$hinban[1]}</option>";
これですとPOST後はすべて選択状態になると思います。
POSTされたhinbanとvalueが同じものだけselectedをつけるようにしないとまずいと思います。
他、気がついていない点もあるかもしれませんがキリがないので処理の順に一個一個片付けていってください。私は処理がこんがらがってきたら一回全部コメントアウトして処理する順番にコメントアウトをはずしてどこまで処理が正確に動いているか一個一個確かめてます。時間がかかるように思えますがあてずっぽうにやるよりは遥かに早いし確実です。
No.6
- 回答日時:
[code language="JavaScript" title="get_articles.js"]
/*@cc_on@*/
var get_articles = (function(req) {
return req ? (function () {
var Handlers = {
'readystatechange' : function (e) {
if (4 != req.readyState) return;
clearTimeout(timerId);
if (200 != req.status) return;
// あと自分で書いて。
// TODO : req.responseXML ...
},
'timeout' : function () {
req.abort();
clearTimeout (timerId);
},
'unload' : function (e) {
Unobserver.call (self, 'unload');
req.onreadystatechange = function() { ; };
doc = req = null;
}
};
var Listener = function (e) {
return Handlers.call [e.type] (this, e);
};
var Observer = function (e, type) {
return e./*@if(1)attachEvent('on'+/*@else@*/addEventListener(type, Listener, false);
};
var Unobserver = function (e, type) {
return e./*@if(1)dettachEvent('on'+/*@else@*/removeEventListener(type, Listener, false);
}
reutrn (function () {
req.onreadystatechange = Handlers ['readystatechange'];
return function () {
try {
var form = this.form;
var value = this.value;
var uri = form.action+'?'+encodeURIComponent(this.name)+'='+encodeURIComponent(value);
timerId = setTimeout (Handlers ['timeout'], timeout);
req.abort();
req.open('GET', uri, true);
req.send('');
} catch (e) {
}
};
}) ();
}) () : function () { ; };
}) (
(function (){
/*@if (5 < @_jscript_version)
try {
return new ActiveXObject('Msxml2.XMLHTTP.6.0');
} catch (e2) {
try {
return new XMLHttpRequest;
} catch (e3) {
return new ActiveXObject('Msxml2.XMLHTTP.3.0');
}
}
@else@*/
return new XMLHttpRequest;
/*@end@*/
}) ();
);
[/code]
No.5
- 回答日時:
[code language="PHP" title="get_articles.php"]
<?php
try {
//sanitize($_GET);
$db = new PDO('mysql:host=localhost;dbname=DBNAME', 'USER', 'PASS');
$db->exec("SET NAME 'utf8'");
$bs = $db->prepare('SELECT * FROM `dfw_m40m` WHERE `分類C3`=?');
$hinban = $bs->execute(array($_GET['hinban']));
unset($rs, $db);
if (preg_match('/(?:^|,\s*)(text|application)\/xml(?:\s*,|$)/', $_SERVER['HTTP_ACCEPT']), $m) {
$doc = DOMImplementation::createDocument('***', 'articles');
$root = $doc->documentElement;
if (is_array($hinban)) {
foreach ($hinban as $value) {
$item = $doc->createElemnet('item', $value[1]);
$item->setAttribute('id', $value[0]);
$root->appendChild($root);
}
}
$xml = $doc->saveXML();
header('Content-Type: {$m[0]}; charset=UTF-8');
header('Content-Length: '.strlen($xml));
echo $xml;
exit;
}
} catch (PDOException $e) {
echo $e->getMessage();
}
?>
<? header('Content-Type: text/html; charset=UTF-8'); ?>
<!DOCTYPE ...
...
<form action="****" method="****">
<h4>品番指定</h4>
<p>
<? if (is_array($hinmoku)) : ?>
<select name="hinmoku" size="5">
<? foreach ($hinmoku as $value) : ?>
<option value="<?=htmlentities($value[0])?>"<?=key(current($hinmoku)) ? '' : 'selected="selected"'?>><?=htmlentities($value[1])?></option>
<? endforeach; ?>
</select>
<? endif; ?>
</p>
</from>
[/code]
No.4
- 回答日時:
<?php
try {
$db = new PDO('mysql:host=localhost;dbname=DBNAME', 'ROOT', 'PASS');
$db->exec("SET NAME 'utf8'");
$rs = $db->query('SELECT * FROM `m20mm`');
$hinban = $rs->fetchAll(PDO::FETCH_NUM);
unset($rs, $db);
} catch (PDOException $e) {
}
header('Content-Type: text/html; charset=UTF-8');
?>
<!DOCTYPE ...
...
<form action="get_articles.php" method="get">
<script type="text/javascript" src="get_articles.js"></script>
<h4>品番指定</h4>
<p>
<? if (is_array($hinban)) : ?>
<select name="hinban" size="5" onchange="get_articles.call (this);">
<? foreach ($hinban as $value) : ?>
<option value="<?=htmlentities($value[0])?>"<?= key(current($hinban)) ? '' : 'selected="selected"'?>><?=htmlentities($value[1])?></option>
<? endforeach; ?>
</select>
<? endif; ?>
</p>
</from>
<? endif; ?>
No.3
- 回答日時:
> 丁度、Okwaveのカテゴリ選択の様な、階層で絞り込んでいくようなものを作りたいです。
階層ごとにリンクを張っておけばいい。
それだけでもまず不便は感じない。
> onchange="submit(this.form)"で、POSTするときにブラウザで更新が掛かるのですが、
それでSQLが機能していないように感じます。
このやり方は不可能なのでは。。。。。。という気がします。。泣
うすうす気づいてるかもしれないけど、やり方が根本的に間違っている。
とりあえず、PHP だけで組んではいかがだろうか。
# どうでもいいことだけど、POST と GET が保存先の違いくらいにしか認識されていないのが悲しい。
No.1
- 回答日時:
$bs2にはカラムの順に0から始まる添え字で配列が設定されているでしょうか?
$ba2を出力して調べてみてください。
PDOは使ったことがないので確証はないですが
$bs2->setFetchMode(PDO::FETCH_OBJ);を削除すれば
$rsと同様に0,1,2・・・で値が設定されるかもしれません。
PDO::executeではfetchでしか値が取れない(PDO::queryと違う)
のであればfetch処理して<option>を出力するようにしてみてください。
予想大外れだったらごめんなさい。
配列を取得しようとしましたが、$bs2の配列とれませんでした。
WHERE句を外し、$db2->prepare($sql)を$db2->query($sql)に変更すれば取得できます。
(あたりまえですが。。。)
onchange="submit(this.form)"で、POSTするときにブラウザで更新が掛かるのですが、
それでSQLが機能していないように感じます。
このやり方は不可能なのでは。。。。。。という気がします。。泣
何か良い方法ありますでしょうか?
全く違うようなプログラムでもかまいません。(ただしデータベースは使います)
助けてください・・・お願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミング言語で、使える...
-
GET又はPOSTで受け取るデータに...
-
ドロップダウンで送信先を変更...
-
選択したタグ、入力した検索文...
-
連動させたいセレクトボックス...
-
POSTしたデータがリストボック...
-
ローカルにあるhtmlのフォーム...
-
HTMLで前の画面に戻る時、入力...
-
フォームでのリセットを使う方法
-
<input type="hidden" >で配列...
-
POSTでファイルアップロード
-
laravelを利用してコントロール...
-
フォームボタンを押すたびに数...
-
PHP ボタンが押されたら処理を...
-
PHPのフォームの複数選択で。。。
-
VBA で、スペースを含むファイ...
-
$_SERVER['REQUEST_METHOD']と"...
-
phpで、フォームのラジオボタン...
-
HTMLのリンクをクリックするこ...
-
同じページでフォームデータを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウンとCSVの連動
-
2つのプルダウンメニュから受け...
-
MySQLのレコードを検索、...
-
連動させたいセレクトボックス...
-
phpでのselect値の取得・表記に...
-
セレクトしたときに全て初期状...
-
複数 selectフォームから今回on...
-
Smartyで、セレクトボックスが...
-
<select>文、foreachと初期値設定
-
CodeIgniter/set_value()
-
phpでカレンダー作成
-
現在時刻を反映させた時刻のプ...
-
PHP で画面の一部だけを変えたい。
-
奇数や偶数を調べる関数
-
GET又はPOSTで受け取るデータに...
-
複数のセレクトボックスを1つに...
-
プルダウンリンクを外部ファイ...
-
選択されたプルダウンの値を変...
-
input type="hidden"で送る値を...
-
php セレクトボックス 値取得
おすすめ情報