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で質問しましょう!
似たような質問が見つかりました
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php my adminより取り出したデータ表示 2 2022/06/15 11:56
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プルダウンリンクを外部ファイ...
-
プルダウンとCSVの連動
-
複数 selectフォームから今回on...
-
セレクトボックスでの選択した...
-
phpで重複チェック
-
続 入力・確認・登録に関して
-
複数のセレクトボックスを1つに...
-
多次元配列の値が変わってしま...
-
チェックボックスで渡ってきた...
-
PHPでセレクトメニュー
-
オプションメニューの書き方
-
phpの変数について
-
php セレクトボックス 値取得
-
セレクトフォームで選択した複...
-
自作ブログのPing送信について
-
PHPで画像の渡しが上手く行きま...
-
DBの値をチェックボックスに反...
-
if function PHP
-
<input type="hidden" >で配列...
-
PHP ボタンが押されたら処理を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラミング言語で、使える...
-
プルダウンとCSVの連動
-
複数のセレクトボックスを1つに...
-
複数 selectフォームから今回on...
-
【PHP&JavaScript】複数の別ウ...
-
「"」(ダブルクォーテーション)...
-
phpで重複チェック
-
phpでのセレクトボックスの値を...
-
php セレクトボックス 値取得
-
<select>文、foreachと初期値設定
-
ラジオボタンの値を受け取ってP...
-
2つのプルダウンメニュから受け...
-
連動させたいセレクトボックス...
-
PHP セレクトボックスの値 GET...
-
Smartyで、セレクトボックスが...
-
現在時刻を反映させた時刻のプ...
-
PHPとpostgreSQL プルダウンの作成
-
[Ethna]selectボックスに空値を...
-
GET又はPOSTで受け取るデータに...
-
プルダウンで選択された値を保持
おすすめ情報