• 締切済み

DB抽出結果を配列のままフォームのSELECTに使いたい

環境はWINDOWS XP Apache2.2 PHP 5.2.3 MYSQL5 です PDOにてDB接続してます quickformを使ってフォームを作成したいと思っています include 'connect.php'; $rs=$db->query("select id,name from master"); にてIDと名前の配列を抽出し、 require_once'HTML/Quickform.php'; $form=new HTML_quickform('myform','POST','test.php'); $form->addelement('select',name,'氏名',$rs); として、氏名のドロップダウンリストを表示させたいのですが、 $rs->fetch()などで一行ずつ取り出さずに配列のままリストに入れる方法がうまくいきません。 ご教授下さい

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

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>配列のままリストに入れる方法がうまくいきません。 どううまくいかないの?具体的にどうしているか書かないことには・・・ ただ・・・ ライブラリでつまいづいているのであれば、ライブラリを解析するか 解析する気がないならつかうのやめるかのどちらかが妥当かと。

mantotto
質問者

お礼

フォームのselectに表示されません 名前を表示させて返り値をID番号にしたいと思っています 元のSQLには$rsという変数に2行しか抽出されないのかとおもっておりました。 試しにクエリを select name from master にすると 名前が表示されました。 但しIDとは一致しません(当り前ですが。) どちらかというとSQLの方に問題があるのでしょうか・・・

関連するQ&A

  • PEAR::HTML_QuickFormのfreezeについて

    PEAR::HTML_QuickFormのfreezeを使って、特定の項目だけフリーズさせたいと考えてます。 全体をフリーズさせるときは、 $this -> freeze(); としてますが、項目のみの場合も出来るような事が書いてありました。 下記のソースの場合は、どのように設定すればよいかおしえてもらえますでしょうか? <?php require_once "HTML/QuickForm.php"; $form = new HTML_QuickForm('frmTest', 'get'); $form->addElement('header', 'MyHeader', 'Testing QuickForm'); $form->addElement('text', 'MyTextBox', 'What is your name?'); $form->addElement('reset', 'btnClear', 'Clear'); $form->addElement('submit', 'btnSubmit', 'Submit'); if ($form->validate()) { # If the form validates then freeze the data $form->freeze(); } $form->display(); ?>

    • ベストアンサー
    • PHP
  • HTMLのフォームをPHPで配列で受け取る方法

    Webアプリを作っています。 HTMLのフォーム上で、番号と名前を入力し、 PHPでデータベースに登録する感じになります。 HTMLのフォームから送信されたデータを、PHP側で配列として受け取るには、 どのようにHTMLを書き換えたら良いでしょうか? 説明のために例を挙げます。 sample.htmlには以下のように書いています。 <form action="action.php" method="get"> <input type="number" name="id1"> <input type="text" name="name1"> <input type="number" name="id2"> <input type="text" name="name2"> <input type="submit"> </form> ここで、送信ボタンを押すと、 ブラウザのロケーションバーには /action.php?id1=1&name1=taro&id2=2&name2=jiro このように表示されます。 action.phpは次のように書いています。 <?php print ($_REQUEST['id1']); print ($_REQUEST['name1']); print ($_REQUEST['id2']); print ($_REQUEST['name2']); ?> 出力結果は、 1taro2jiro のようになります。 このあと、PHPでデータベースに登録する処理をしたいのですが、 $_REQUEST['id1'] $_REQUEST['id2'] $_REQUEST['name1']; $_REQUEST['name2']; となっていると、処理が大変なので、 $_REQUEST['id'][0] $_REQUEST['id'][1] $_REQUEST['name'][0] $_REQUEST['name'][1] のように配列として受け取れるようにしたいのです。 sample.htmlを書き換える必要が有ると思うのですが、 どのように書き換えたら良いでしょうか? 教えていただけると幸いです。 どうぞ、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • Smartyで作ったフォームで配列を使用する

    先月からPHPを勉強し始めた初心者です。 質問文で分からないことも多くあるかとは思いますが、補足をするのでご指摘ください。 Smartyのサンプルプログラムを流用しながら、フォームを作成しています。 フォームで繰り返し同じ名前の要素を使いたかったため、配列を使いたいと思っています。 (イメージとしては、複数人の名前・年齢といった情報をName[],Age[]という配列にしたいです。) PHPのページで確認するとnameに配列名を入れれば配列として扱えるようです。 http://php.net/manual/ja/faq.html.php#faq.html.arrays これをSmartyで扱おうとしています。 --コントローラー------- $this->form->addElement('text', 'Name', '名前', ['size' => 30]); --テンプレート------- <FONT size="2">{$form.Name.label}:</FONT></TD> <TD width="79%"> {if $form.Name.error } <font size="2" color="red">{$form.Name.error}</font><BR> {/if} {$form.Name.html}</TD> --------- 上記のようであれば動作するのですが、単純にNameをName[]とした場合には下記のエラーが出て動作しません。 Fatal error: Cannot use [] for reading in ~ファイル名、行数 良い方法があればご教授お願いいたします。 分かりにくい質問で申し訳ないです。

    • ベストアンサー
    • PHP
  • 参照渡しを使う理由がわかりません

    PEARの 'HTML/QuickForm.php' を利用し、フォームを作成しようと思いました。 以下ソースを入力していたところ、ラジオボタンのところで参照渡しが出てきました。 【$obj =& $form->addElement("radio", "age", "年代:", "10代", "10", array("checked"));】 ラジオボタン以前のテキストボックス等は = だったのですが、なぜ、 ラジオボタンだけ参照渡しをするのでしょうか? 何かメリットがあるから参照渡しをしているのだと思うのですが…。 ご教授よろしくお願いします ====ソースここから <?php // 必要パッケージの読込み require('HTML/QuickForm.php'); // ●Form要素の構築 $form = new HTML_Quickform("test","POST"); // formの設定 $form->setRequiredNote("<span style=color:red>*</span> 記入必須項目"); // 記入必須項目の説明用文字列設定 $form->setJsWarnings("エラー",""); // Javascriptエラーの際の文字列設定 // header 要素を追加 $form->addElement("header", "title", "情報を記入"); // hidden 要素を追加 $form->addElement("hidden", "id", uniqid("")); // text 要素を追加 $form->addElement("text", "name", "名前:", array("value"=>"","size"=>"24")); // radio 要素を追加 $obj =& $form->addElement("radio", "age", "年代:", "10代", "10", array("checked")); // デフォルトでチェックの設定にする $obj->setChecked(TRUE); $form->addElement("radio", "age", "", "20代", "20"); $form->addElement("radio", "age", "", "30代", "30"); $form->addElement("radio", "age", "", "40代", "40"); : : =========ソースここまで

    • ベストアンサー
    • PHP
  • PDOで取得される値がすべて文字列になる

    xamppを標準インストールした環境にてPHPのPDOを利用したデータベース処理を試しているのですが、SELECTで取得した値がすべて文字列として返されます。 $db = new PDO("sqlite:sample.db"); $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT); $rs = $db->query("select 1 as res"); $rs = $rs->fetch(); 結果: array(1) ( [res] => (string) 1 ) これに加え、やや強引なテストを行ってみたのですが、こちらも結果は同じく文字列となりました $db = new PDO("sqlite:sample.db"); $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT); $rs = $db->prepare("select ? as res"); $rs->bindValue(1, 1, PDO::PARAM_INT); $rs->execute(); $rs = $rs->fetch(); この現象を回避するにはどのようにすればよいでしょうか。

    • ベストアンサー
    • PHP
  • php pdo データベース

    前に書き込んだのが状況がわかったので再度書きます update.phpでGETで取った番号のデータを表示します 番号は主キーなので変更できないように表示のみにします update.phpのフォームをuptate2.phpに送ります <?php $ID = htmlspecialchars($_GET['番号']); $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin"); $st = $pdo->prepare("SELECT * FROM tbl_test WHERE 番号=?"); $st->execute(array($ID)); $row = $st->fetch(); $NAME = htmlspecialchars($row['氏名']); $ADDR = htmlspecialchars($row['住所']); ?> <form action="update2.php" method="post"> 番号<br> <?php echo $ID ?><br> <input type="hidden" name="ID" value="<?php echo $ID; ?>"> 氏名<br> <input type="text" SIZE = "50" NAME="NAME" value="<?php echo $NAME ?>"><br> 住所<br> <input type="text" SIZE = "130"NAME="ADDR" value="<?php echo $ADDR ?>"><br> <input type="submit"> </form> アップデ-トphp update2.php <?php $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin"); $st = $pdo->prepare("UPDATE tbl_test SET 氏名=?,住所=?WHERE 番号=?"); $st->execute(array($_POST['ID'],$_POST['NAME'], $_POST['ADDR'])); ?> レコードを修正しました。 今の現状 エラーが出ないでレコードを修正しました。と表示されるがレコードが修正されていない どこがいけないと思いますか?

    • ベストアンサー
    • PHP
  • php データベース更新

    番号 int プライマリーキー 氏名  varchar 住所 varchar 一覧画面に修正というボタンをつくりボタンクリックすると入っているデータがテキストボックスで表示され入力できるようにした。 番号は主キーなので表示のみにして編集できないようにした ソース GETで番号をとりupdate2.phpにわたす update.php <?php $ID = htmlspecialchars($_GET['番号']); $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin"); $st = $pdo->prepare("SELECT * FROM tbl_test WHERE 番号=?"); $st->execute(array($ID)); $row = $st->fetch(); $ID = htmlspecialchars($row['番号']); $NAME = htmlspecialchars($row['氏名']); $ADDR = htmlspecialchars($row['住所']); ?> <form action="update2.php" method="post"> 番号<br> <?php echo $ID ?><br> 氏名<br> <input type="text" SIZE = "50" NAME="NAME" value="<?php echo $NAME ?>"><br> 住所<br> <input type="text" SIZE = "130"NAME="ADDR" value="<?php echo $ADDR ?>"><br> <input type="submit"> </form> アップデートphpは下記のとおり update2.php <?php $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin"); $st = $pdo->prepare("UPDATE tbl_test SET 氏名=?,住所=?WHERE 番号=?"); $st->execute(array($_POST['ID'],$_POST['NAME'], $_POST['ADDR'])); ?> レコードを修正しました。 だかupdate2.phpでエラ-がおきて先に進めません

    • ベストアンサー
    • PHP
  • PDOでDB

    PDOでDBを表示させ修正ボタンを押し別ウインドウが開き選んだデータの修正を行いたいのですがupdate2.phpでエラ-メッセージが出ます。どうやったら直りますか 下記のメッセージです Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\WWW\test\htdoes\update2.php on line 4 レコードを修正しました。 ちなみに 番号 int プライマリ-キ- 氏名 varchar 住所 varcharです 下記はソースです 一覧画面 <HTML> <HEAD> <TITLE>一覧画面</TITLE> </HEAD> <BODY> <table border="1"> <tr> <th>番号</th> <th>氏名</th> <th>住所</th> <th>操作</th> </tr> <?php $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin"); $st = $pdo->query("SELECT * FROM tbl_test"); while ($row = $st->fetch()) { $ID = htmlspecialchars($row['番号']); $NAME = htmlspecialchars($row['氏名']); $ADDR = htmlspecialchars($row['住所']); echo "<tr><td>$ID</td><td>$NAME</td><td>$ADDR</td><td><a href='update.php?番号=$ID'>修正</a></td></tr>"; } ?> </table> </BODY> </HTML> アップデートの入力フォーム update.php <?php $ID = htmlspecialchars($_GET['番号']); $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin"); $st = $pdo->prepare("SELECT * FROM tbl_test WHERE 番号=?"); $st->execute(array($ID)); $row = $st->fetch(); $ID = htmlspecialchars($row['番号']); $NAME = htmlspecialchars($row['氏名']); $ADDR = htmlspecialchars($row['住所']); ?> <form action="update2.php" method="post"> 番号<br> <?php echo $ID ?><br> 氏名<br> <input type="text" NAME="NAME" value="<?php echo $NAME ?>"><br> 住所<br> <input type="text" NAME="ADDR" value="<?php echo $ADDR ?>"><br> <input type="submit"> </form> アップデートの処理 update2.php <?php $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin"); $st = $pdo->prepare("UPDATE tbl_test SET 番号=?,氏名=?,住所=?WHERE 番号=?"); $st->execute(array($_POST['NAME'], $_POST['ADDR'])); ?> レコードを修正しました。 アップデートの処理 update2.phpで 最初のエラーが出ます

  • phpからsqliteにselect抽出

    phpからsqliteにselect抽出しています。 $sql = "select * from Table where C=?" $st = $db->prepare($sql); $st->bindParam(1, $key, PDO::PARAM_STR); $st->execute(); while ($row = $st->fetch(PDO::FETCH_ASSOC)) { *** *** } でエラーにはなりませんが、データがとれません。 updateやinsertで?(インジェクション)はうまくいくのですが、Selectでなぜ取得できないのでしょうか? bindParamをarrayにしたりprepare をqueryにしたりしましたが、 データが1件しか取れなかったりします。

    • ベストアンサー
    • PHP
  • QuickFormのradioボタンでエラーが出る

    require_once("HTML/QuickForm.php"); $form = new HTML_QuickForm(); $ques[] = &HTML_QuickForm::createElement('radio', null, 'Yes', 'Yes', '1');←”ここでエラーがでる” $ques[] = &HTML_QuickForm::createElement('radio', null, 'No', 'No', '2'); $form->addGroup($ques, 'ques'); $form->addRule('ques', '入力してください。', 'required', null, 'client'); if ($form->validate()){ $form->freeze();} $form->addElement('submit','submit', '送信'); require_once("HTML/QuickForm/Renderer/ArraySmarty.php"); $renderer= new HTML_QuickForm_Renderer_ArraySmarty($smarty); $form->accept($renderer); $smarty->assign('form', $renderer->toArray()); $file = 'test.tpl'; $smarty->display($file) ----------------------------------------------------------- HTML_QuickFormでラジオボタンをチェックしたいのですが、「←”ここでエラーがでる”」の部分で、Fatal error: [] operator not supported for strings in /virtual/パス/test.php on line 19←ここの数字はエラー行 のエラーがでます。 どうやったら、エラーを回避できるか分かりません。 よろしくお願いします。

    • 締切済み
    • PHP

専門家に質問してみよう