konanomono
@konanomono (伝説の 粉)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

PHPからMySQLに接続し、プルダウンにMySQLから取得したデータを表示したい

プルダウン表示ができない

以前投稿した質問した内容と重複する部分があります。
予め、ご了承ください。

私は現在、PHPとMySQLを使用したサイトを作成しようと考えています。
以前質問をさせていただいた際に、「MySQLは正常に接続されているか」
という部分を、ご指摘していただいたので、前回の内容から少々修正したものを
下記に記します。

現在困っている部分ですが、MySQLとの接続は問題ないようなのですが、
やはりプルダウン表示はされないという問題があります。
MySQLのtestにはidとnameが格納されており、nameをプルダウンに表示したい

また、PHPを勉強し始めて、日が浅くコードの書き方も汚い部分もあるかと思いますが、
私の疑問解消に何卒お力添えをお願いいたします。

最後になりますが、急いでおり、拙い文章になっておりますが、
このような文章を読んでいただきありがとうございました。

<main>
<pre>
<?php
try{
    $db = new PDO('mysql:dbname=;host=;charset=utf8mb4','USER名','パスワード');
    echo "接続OK";
}catch (PDOException $e){
    echo "接続エラー:".$e->getMessage();
}
$sql = "SELECT * FROM test";

$result = $db -> query($sql);

//クエリー失敗
if(!$result) {
    echo $db->error;
    exit();
}

//結果セットを解放
$result->free();

// データベース切断
$db->close();

?>
<body>
    <select name="test_data">
        <option value="">--項目--</option>
        <?php while($row=$res->fetch_array(MYSQLI_ASSOC)):?>
            <?php echo htmlspecialchars($row["name"],ENT_QUOTES,"UTF-8");?>
        <?php endwhile;?>
    </select>
</pre>
</main>
</body>

補足

PHPのプルダウン表示などの専門用語はあまり知らないので、もしかしたら名称が間違っているかもしれません。
実現したいことは、項目をタッチした時に格納されている項目を表示するというものです。
この格納されている項目をMySQLから取得したデータにしたいのです。

また、PHPよりもHTMLやJavaScriptでやったほうがいいというご指摘でも構いません。
最終的に目指しているものは
「PHPとMySQLでプルダウン表示をしながら、最終的にプルダウン複数の項目を選択し、
合計金額等を算出できるようなものを作成したいと考えています。
(A項目を選択した際に、次に選択するB項目はA項目と組み合わせられるものに更新する)」
かっこ内の内容も実現したいのですが、補足の内容についても、ご教授いただければ幸いです。

長文失礼いたしました。ここまで読んでいただき、誠にありがとうございました。

0

1Answer

自分も素人ですが、見つけた範囲で指摘させていただきます。

  • htmlタグの囲い方 \の中に\を入れるのはよろしくない。
  • \$res->fetch_array(MYSQLI_ASSOC))の行 宣言した変数は\$resではなく、$resultでは?
  • $result->free();について これをやると習得したデータが下の行に行く前に消えちゃうのでは?そもそもこれは存在する命令ではないような。実際に Call to undefined method PDOStatement::free() というエラーが出たんですが、。

あまりデフォルトに合わせられませんでしたが、自己流ではこの方法で行けました。
<select>タグから下より

    <select name="test_data">
        <?php 
        $rowcount = $result->rowCount(); //行数の習得
        $lists = $result -> fetchAll();//データの中身を配列形式にして習得するメゾット
        $row=0; //ループのカウント用
        while($row < $rowcount):
        echo "<option value=".htmlspecialchars($lists[$row]["name"],ENT_QUOTES,"UTF-8").'>';
        echo htmlspecialchars($lists[$row]["name"],ENT_QUOTES,"UTF-8")."</option>";
        $row++;
    endwhile;
            ?>
 </select>
1Like

Comments

  1. @konanomono

    Questioner

    yousuru01467様
    返信が遅くなり、大変申し訳ありません。
    そして、ご指摘いただき、嬉しい限りです。
    自己流でも私の質問を解消しようとしていただき、頭が上がりません。
    さっそく、ご指摘いただいた点、またコードの方を記述し、確認を行います。

    重複しますが、本当にありがとうございます。
    心より感謝申し上げます。

Your answer might help someone💌