質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.10%

radioボタンを使って検索システムを作る

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 2,716

score 224

radioボタンによって選択された値を元にデータベースを検索、検索結果を表示するというコードを書いたつもりですが、Catchable fatal error: Object of class mysqli_result could not be converted to string in ~ といったエラーがでてしまい、結果を表示することができません。


index.php
<?php
$connect = mysqli_connect('HOSTNAME','USER','PASS','DBNAME') or die('error');
echo 'success';
?>

<?php

$post = $_POST["fruits"];
$query = mysqli_query(
         $connect,"select * from radiobutton_search where fruits = '$post'");

while($result = mysqli_fetch_assoc($query)){
  echo $result['fruits'];
}
?>

index.html
<form action="index.php" method="POST">
      <input type="radio" name="fruits" value="バナナ">バナナ
      <input type="radio" name="fruits" value="りんご">りんご
      <input type="radio" name="fruits" value="オレンジ">オレンジ
      <input type="submit" value="検索">
</form>


//値の検証
var_dump($query);
object(mysqli_result)[2]
  public 'current_field' => int 0
  public 'field_count' => int 2
  public 'lengths' => null
  public 'num_rows' => int 1
  public 'type' => int 0

var_dump($post);
string 'りんご' (length=9)



checkboxで検索システムについても質問させていただいたのですが、どうやら似たようなエラーが出てしまいます。

optionタグによる検索、検索結果の表示はできたのですが、radioボタンの方はなぜかうまくいきません。。。

エラーを解決し、検索結果表示するにはどうしたらよいでしょうか?

※SQLインジェクションやバリデーションチェックは省略しております。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

php内での日本語エンコーディングはどうなってますか?
また、それはDB側とあっていますか?


PHP: エイリアスおよび非推奨の Mysqli 関数 - Manual
http://php.net/manual/ja/ref.mysqli.php

mysqliクラスとして使うのではなく関数呼び出しをするのは、非推奨とされています。
(関数呼び出しで記述されている文献は、すでに古いです。)
書き換えると、mysqli_stmtクラスのインスタンスである$queryに対して
$query->fetch_assoc()で結果を引き出すのが正しい書き方になります。

$connect = new mysqli('HOSTNAME','USER','PASS','DBNAME') or die('error');
$connectはmysqliクラスのインスタンスで、DB接続周りを保持・管理します。

$query = $connect->query("select * from radiobutton_search where fruits = '$post'");
$queryはmysqli_resultクラスのインスタンスで、クエリー結果を保持・管理します。

参考:PHP: MySQLi - Manual
http://php.net/manual/ja/book.mysqli.php

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/09/23 18:58

    php.iniの設定はhttp://www.phpbook.jp/install/phpini/index5.htmlこちらのような設定をしておらず、特に設定していません。

    MySQLは以下のようになっています。
    +--------------------------+----------------------------+
    | Variable_name | Value |
    +--------------------------+----------------------------+
    | character_set_client | utf8 |
    | character_set_connection | utf8 |
    | character_set_database | latin1 |
    | character_set_filesystem | binary |
    | character_set_results | utf8 |
    | character_set_server | utf8 |
    | character_set_system | utf8 |
    | character_sets_dir | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+

    キャンセル

  • 2015/09/23 19:01

    whileのところを以下の通りに設定したら、検索結果を表示することができたのですが、疑問が残ります。
    while ($row = $query->fetch_assoc()) {
    echo $row['fruits'];
    }

    ・元のコードの問題点
    ・修正したコードの$query->fetch_assoc()部分がオブジェクトの操作だと思うのですが、どういうデータの受け渡しがされているのかわかりませんw

    キャンセル

  • 2015/09/23 19:39

    回答内に加筆しました。

    キャンセル

  • 2015/09/23 19:55

    回答ありがとうございます。
    mysqliで問題なく検索システムを構築できると思っていたのですがどうやらそれもあまり良くないのですね。。。
    接続型ではなく、オブジェクト指向型でかいていけるように勉強していきたいと思います。
    ご丁寧な対応をしていただきありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.10%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る