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

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

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

1572閲覧

Fatal error: Call to a member function fetch_assoc() on a non-object in

phpsyoshinsya

総合スコア156

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/11/10 12:08

編集2018/11/10 14:53

前提・実現したいこと

Fatal error: Call to a member function fetch_assoc() on a non-object inが解決できません。
テーブルはできていると思うのですが、レコードはまだありません。

発生している問題・エラーメッセージ

上記のエラーメッセージが出ている行は
$db->fetch_assoc();
となっており、
$result=$db->query("select count(*) from reserveslot where date>={$row["date"]}"); // $row["date"]は上で select * from todayから取得しています

エラーメッセージ

該当のソースコード

$db->query("create table reserveslot (date varchar(20) primary key, rs1 int default 0, rs2 int default 0, rs3 int default 0, rs4 int default 0, rs5 int default 0, rs6 int default 0, rs7 int default 0) default charset=sjis"); $db->query("create table today (date int not null, year int, month int, day int, maxday int) default charset=sjis"); function product_reserve_time(){ $db=new mysqli("localhost","username","password","dbname"); $db->set_charset("sjis"); $result=$db->query("select* from today"); print $db->error; $row=$result->fetch_assoc(); $result=$db->query("select count(*) from reserveslot where date>={$row["date"]}"); $row=$result->fetch_assoc(); // エラー行 if($row["count"]==0){ $result=$db->query("select * from today"); $row=$result->fetch_assoc(); $time=(int)$row["date"]; $db->query("insert into reserve_info (date) values({$row["date"]})"); print $db->error; for($i=0;$i<6;$i++){ $db->query("insert into reserveslot (date) values('{$time}')"); $time=$time+86400; print $db->error; } } if($row["count"]!=0&&$row["count"]<7){ $count=(int)$row["count"]; $count=7-$count; $result=$db->query("select * from reserveslot order by date desc order by date desc limit 1"); print $db->error; $row=$result->fetch_assoc(); $time=(int)$row["date"]; for($i=0;$i<$count;$i++){ $time=$time+86400; $db->query("insert into reserveslot (date) values('{$time}')"); print $db->error; } } $result=$db->query("select * from reserveslot where date>=(select date from today) limit 7"); print $db->error; while($row=$result->fetch_assoc()) { printf("<input type=\"radio\" name=\"date\" value=\"%s\">%s月%s日",$row["date"],idate("m",$row["date"]),idate("d",$row["date"])); printf("<select name=\"%s\"><option>----</option>",$row["date"]); if($row["rs1"]==0) print "<option value=\"1\">19:00</option>"; if($row["rs2"]==0) print "<option value=\"2\">20:30</option>"; if($row["rst3"]==0) print "<option value=\"3\">22:00</option>"; if($row["rt4"]==0) print "<option value=\"4\">23:30</option>"; if($row["rs5"]==0) print "<option value=\"5\">25:00</option>"; if($row["rs6"]==0) print "<option value=\"6\">26:30</option>"; if($row["rs7"]==0) print "<option value=\"7\">28:00</option>"; print "</select><br><br>"; } $db->close(); } function updtrs(){ $query="update table reserveslot set "; switch($_SESSION["time"]){ case "1": $query.="rs1=1 "; break; case "2": $query.="rs2=1 "; break; case "3": $query.="rs3=1"; break; case "4": $query.="rs4=1 "; break; case "5": $query.="rs5=1 "; break; case "6": $query.="rs6=1 "; break; case "7": $query.="rs7=1 "; break; } $query.="where date='".$_SESSION["date"]."'"; $db=new mysqli("localhost","username","password","dbname"); $db->query("{$query}"); $db->close(); }

最初からこのようにすればよかったかもしれませんね。

試したこと

intとvarcharの間でwhereを使っているのがダメなのかと思いましたが、mysqlのオンラインマニュアルにはそんな記述は見つけられず、手詰まりになっています。
目が全く見えないので、できる限りこの掲示板で解決できるよう、URLだけのご紹介だけでなく、今後も同じことで引っかからないように基本的にわかっていなさそうなこともフォローしていただいたり、できる限り修正箇所をどのように修正すればいいのか丁寧にお知らせいただけると助かります。ご理解とご協力のほどお願いいたします。

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/11/10 12:15

コードはなるべく全体を提示してください。そこだけを出されても判断材料がほぼ皆無です。また、「目が全く見えない」とはほんとうに見えないということですか?どのようにして質問されているのでしょうか。回答が正しく伝わるか不明です。状況や状態により質問サイトでは限界があるように思います。お金を払って教えてもらえるような環境に身を置いたほうが良いのではないでしょうか。
phpsyoshinsya

2018/11/10 12:27

はい、全く目が見えないのは事実でスクリーンリーダーを使って読み書きしています。今回コード全部を載せなかったのは1千行を超えるものだったからなのですが、この部分は関数になっているので、その関数だけを抜き出すのがよろしかったでしょうか?
m.ts10806

2018/11/10 12:33

伝えたいのはここは質問サイトでありサポートセンターではないということです(ヘルプにも書いてあります)何から何までおんぶにだっこで教えを乞う場所ではありません。質問者さんのように目の見えない状態の方が、実際に目の前にいない人が相手をするのは非常に難しくなります。実際に隣についてあれこれと指導してくれる人でないと難しいと思いますし、そのような背景がある方を見ず知らずの回答者がとことん相手をしようと思えるかというとそうではありません。あくまで赤の他人です。無責任で当たり前の状況で責任を負わせるような条件を提示するのは、やはりこの場は合わないのではと思います。
phpsyoshinsya

2018/11/10 12:41

書き方が悪かったならそれはお詫びします。ただそれだけの責任は求めていません。
m.ts10806

2018/11/10 12:45

では「目が全く見えない」のくだりは一切不要かと存じます。質問本文にはあくまで問題や課題、要件のみを記載することに終始すべきで、本来「初心者」ということも実要件とは異なるので記載せずに「初心者アイコン」の利用だけにとどめるものかと(割と目立つ場所にあるのに使わない人多いですけど)
phpsyoshinsya

2018/11/10 12:55

掲示板によくURLだけを記載して参考にしてくださいという併記だけがあるものも多く見受けられ、その場合同じ問題に行き当たったときにあまり参考にならなかったりするので、お願いをしています。いままでプログラミング系の掲示板にも同じ記述をしてきたのですが、それが問題視されることはなかったため、同じように書かせていただいたところです。またアイコンはaltがないと全く使えない(フォーカスしない場合もある)ので、あえてidに含めさせていただきました。
m.ts10806

2018/11/10 13:01 編集

質問の質が良ければきちんとした回答がつく可能性が高いということです。初心者アイコンについてはおおよそほとんどの回答者は視認が可能なのでIDでアピールするより良いかと。若干私見になりますが、IDでは何も伝わりませんよ。回答する上でどんな名前かというのを気にすることはほとんどないです。(逆にユーザー名でアピールしていることを鬱陶しいと思う層もいるかも)まあいずれにしても・・・要件に関係ないことはあまり含めないほうが良いでしょうね。そちらに目がいってしまっては問題の本質の方を捉えれてもらえにくくなるので。 相談を受けていて「そういえば」と後付けが長くなったときと似ています。
phpsyoshinsya

2018/11/10 13:16

今後の投稿の際の参考にさせていただきます。ありがとうございました。
m.ts10806

2018/11/10 14:03

「スクリーンリーダーを使って」という時点で回答者はスクリーンリーダーで読まれることを意識して書かなければならないわけです。それはあなたが初心者であるということ以上に条件としては面倒なものです。ですから「限界がある」と申し上げました。
phpsyoshinsya

2018/11/10 14:19

このような部門の掲示板で全く目が見えないのでと配慮を求めても、どうやってこの質問を読み書きしてるかというような質問をされたこともなく、よってスクリーンリーダーという説明もしたことはありません。ですし、あとで提示されたURLを読んでもよくわからないというより、それを最初からお願いしておいた方がやりとりの回数が少なくてすむというのが私の今までの経験で学んだことです。
m.ts10806

2018/11/10 14:23

今までどのようなサービスを利用されてきたか知りませんが、teratailは若干そのあたり特殊かもしれません。実際の問題課題・要件以外が質問内に入り込むのは好まれない傾向にあるように思います。それらが「ノイズ」となって要件把握のための邪魔となることも多いからです。あくまで淡々と問題解決のみに集中したい人も多いです。「質問するときのヒント」も読まれた方がいいかもしれませんね。https://teratail.com/help/question-tips
m.ts10806

2018/11/10 14:26 編集

「目が全く見えない」とあることで「どうやって読み書きしているか」というところまで気にならなくても「正しくコミュニケーションがとれるか」「正しく自分の書いたことが伝わるか」というのを不安に思う人は非常に多いのではないかと私は思います(実際に「目が全く見えない」というところから私はかなり慎重に・神経を使ってコメントを書いています)
m.ts10806

2018/11/10 14:28

他で問題になっていなくても質問者さんが初心者であることも踏まえると難儀なところも多いのでは。「エラー出てるならエラーの意味調べてね」だけで終わってもおかしくない内容です(別の回答ではエラーの意味を書くにとどまっていますが、そういうことです)
m.ts10806

2018/11/10 14:29

注記:責めているわけでも質問者さんを追い出そうとしているわけでもなく、質問者さんが問題を解決する上で適切なのはどうか、という観点から気になったことを書いています。
phpsyoshinsya

2018/11/10 14:34

もちろん読んでいます。ただ、配慮してくれる人がいればということだけなので、一応お知らせはしておいたほうがいいかと?ヒントにもそのような記述をひかえるべきともありませんでしたし、先ほどコメントさせていただいたように、あとから明かすよりも良いのかと?それとも目が見えないことをふせて1.URLを提示していただく際は伝えたい部分をコピーしてください。2.修正箇所をどのように変更すればいいか分かり易く説明してください。3.できるだけもとのソースコードを引用して、修正後のコードを併記していただけますようお願いします。のように配慮だけ求める書き込みの方があまり良いとは思えませんが?
phpsyoshinsya

2018/11/10 14:57

はい、ご丁寧にありがとうございます。意図はしっかり理解しているので大丈夫ですよ。
m.ts10806

2018/11/10 15:04

ひとつ救いなのは平均的な初心者よりはコミュニケーション能力が高そうなところですかね。文章を理解しようとする力は高そうです。ただやはり勿体無いのはコードの提示の仕方です。やはりインデントが全くないコードは読み手に優しくないので、その辺は「見ている人」に合わせていただきたく。
phpsyoshinsya

2018/11/10 17:30

それは、私もデバッグを誰かに手伝ってもらうときには特にインデントは大切だと感じています。ところで、エラーを吐いている上の行にprint $db->errorを入れてみたら恐ろしいメッセージが"table reserveslot does not exist"なんだって?ネットで調べてプライマリーキーを設定するときはnot nullも設定しなければならない。うんなるほどそれじゃあテーブルできるわけないね。修正して実行そして問題のファイルを再度実行、なのにまだテーブルないよって?いったいなにが問題なんですかね。
guest

回答3

0

ベストアンサー

ざっとコードを眺めてみました。

クエリーの登録箇所の中で、2種類のダブルクォーテーションが使用されています。
1つ目が、クエリーに与える文字列をくくるもの
もう一つが、変数 $row の添字用のもの

コードとしては、$row の添字の箇所で、クエリーに与える文字列が一度途切れることになります。
クエリーが中途半端な内容となるため、結果が期待した内容で返ってこず、flase
つまり、失敗したと返ってきます。

データベースから返ってきたオブジェクトを配列として取り出すために
$row=$result->fetch_assoc()
としますが、$result に false が入っているため、質問のエラーが発生します。

投稿2018/11/10 14:44

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

phpsyoshinsya

2018/11/10 15:08

つまり、 $result=$db->query("select count(*) from reserveslot where date={$row['date']}"); とすれば解決で戻り値 $row["count"] も0と得られるということですね。 これはわかっていたはずなのに、よく理解していればなぜ該当エラー箇所にエラーを出したのか、そもそもわかっていればこんなソース書かないでしょってことですよね。 深く感謝すると共にさっそくやってみたいと思います。 それと、おそらくこれで解決すると思うのですが、解決済みにするにはどうすればいいか教えていただけますでしょうか?(できればでかまいません)
phpsyoshinsya

2018/11/10 15:36

さっそく修正してアップロードしてブラウザから開くと、同じ個所で同じエラーになってしまいます。 テーブルreserveslotのdateはvarcharで、テーブルtodayのdateがintなのですが、データ型の違うものは比較できないでしょ(>=なんて無理だよ)ということでしょうか? データ型が違っても比較演算はできるものなのでしょうか?
退会済みユーザー

退会済みユーザー

2018/11/10 16:15

ざっとしか確認してませんし、ちゃんと確認する気もないので申し訳ないですけど、コードの不整合は確認してません。 エラーが継続しているのは、多分 SQL 文が正常でないことが考えられるので、クエリーで使用している文字列を、echo 等で確認してみるのが良いです。$row['date'] に意図したものが入っていない可能性すら疑えます。 デバッグの基本は、変数の遷移を一つづつ潰していくことなので、がんばってください。
phpsyoshinsya

2018/11/10 17:44

はい、ごもっともです。 ただ、ほかの人のコメントにも書きましたが 問題のエラー行の上に print $db->error を入れて再度実行↓ "table reserveslot does not exist" なんだって? ネットで調べてプライマリーキーを設定するときはnot nullも設定しないと…。 なるほど、それではテーブルできるわけないね。↓ create tableを修正して実行↓ でもまだテーブルないよって↓ それじゃあcreate table の下にも print $db->error; とか print $db->errorno; とか入れてみたけど何も教えてくれないし(なき)。 いったいなにがどうなってるんですかねえ、、、。
退会済みユーザー

退会済みユーザー

2018/11/11 00:25

独学なんでしょうか? 視覚障害者のプログラミングが想像できないので、ツール類で対応できる範囲も正直良くわからないです。 プログラミングの上達は、ツール選びで大きく効率が変わります。 経験者に学ぶことは出来ないでしょうか? コード上に、色々指摘したい点もあるのですが、前提となるツール類が違うと全く役に立たないので、まずは前提条件が同じ方の指導を受けていただくのが、必要だと思います。 あまり役に立たないかもしれませんが、気になった点を一応記述しておきます。 ・sjis を使用しているが、utf8 や utf8mb4 を利用することが、学習には向いている ・文字連結で SQL 文を構成しているが、セキュリティ的に問題を発生させる可能性が高いので、普段から prepare を使用すべき ・条件でゆるい比較を使用している箇所がある。多くの場合で、厳密な比較を使用すべき(===) ・switch は緩い比較なので、仕様をよく理解した上でしか使用しないほうが良い ・データベースの処理は、try ~ catch でくくった上で、例外を補足するのが楽 ・create table をコードから実行するのは試行錯誤に不向き。データベースを直接触るのが楽 ・create table を毎回実行するコードになっていると、無駄で危険なコードである可能性がある
phpsyoshinsya

2018/11/11 08:59

ご丁寧にありがとうございます。 ご想像のとおり独学とネットのオンラインヘルプや記録メモなどで頭の中をアップデートしてます。 開発環境はnotepadとffftpとブラウザです。 確かにおっしゃるように別ファイルでフォルダも分けているとはいえ、create tableはよくわかってないと難しいです。 できるならODBC入れて、Microsoft Office Accessが使えたらいいなあと思うのですが、設定方法がわからないのと、やっぱりPHP覚え始めると目が見えない分でしょうか、IDEには頼りづらいのが正直なところです。 これは回答を求めないつぶやきですが、function udprsでswitchを使っていますが、ご想像のとおりreserveslotテーブルがアップデートされません。ifにした方が無難なのかなあ。 とにかく片付けなければならない、習得しなければならない問題が山積みですね。 もう10年もPHP触ってるけど身に付かないのはなぜでしょうね。 やっぱり基礎が危ういのでしょうね。
退会済みユーザー

退会済みユーザー

2018/11/12 09:26

視覚障害者のプログラミング風景を探してみました。 入力後に音声でフォードバックをもらい、それを重ねてコードを書くのですね。個人的には、視力にあまり自信がなく、一生プログラマーとして頑張るために視覚に頼らないプログラミング分野はもっと進んでほしいと考えています。 sjis や Access も MicroSoft が補助ツールでも出していて、親和性が高いための選択なんですかね? ツール類が発展できれば、学習効率は上がると思い、情報交換する場がないか少し検索してみました。 認定NPO法人サイエンス・アクセシビリティ・ネットというところで、若年向きではありますが、プログラミングの支援をしているようです。 https://saccessnet.com/visual/ こちらにコンタクトすることで、情報が得られるとよいのですが。。。 ツール類の件は一旦おいておいて、学習に関してですが、10年で学んだ内容が反映されているとは思えません。多分、独学のせいで、非常に効率の悪い学習をされています。 php を学ぶという観点で、しばらく付き添って学習補助をしてくれる人を探してみてはいかがでしょうか? 基礎ができるようになると、一気にプログラミングの楽しさと苦しさが倍増します。 短期でも十分成果は期待できると思うので、検討してみてください。 外野から、適当な事を言っている認識はありますが、ものすごく頑張って欲しいです!
phpsyoshinsya

2018/11/13 19:10

とても暖かいお言葉に感謝します。 そうですね、現状ではPCやスマートフォンの導入支援をしてくれる団体はたくさんありますが、プログラミングやスクリプティングの支援をしてくれる団体は皆無です。 Microsoft OfficeはMSAA準拠でつくられているので使い易いです。 秀丸も友人に頼んで設定してもらいましたが、行末の文字を読まないとか、 オートインデントにするとインデント幅が通知されないなどの問題にぶつかってしまうので、 コードを書く時には便利かもしれませんが、それだけで片付かないですし、他のIDEにも挑戦してみましたが、入力内容が確認できなかったり、いろいろと不都合があります。 確かに効率は良くないと私も感じています。 PHPもMYSQLの操作方法がオブジェクト指向になったのもほんの3か月前にしりました。 しかしいろいろ調べていただき、また理解を深めようとしてくださっていることに感謝します。 また励ましのお言葉うれしく思います。
退会済みユーザー

退会済みユーザー

2018/11/13 20:20

vim というエディタを推している方がいました。 https://qiita.com/moutend/items/2696139d0b96805ea415 読み上げとの相性が良いようです。 私では評価が出来ないので、たびたび無責任な紹介となりますが、参考まで。
phpsyoshinsya

2018/11/13 20:48

はい、ありがとうございます。 新しいソフトの導入には少し時間がかかります。 インストーラーが読み上げてくれなくても実際の軌道をしたりチュートリアルを閉じれば読み上げられたりする可能性があるため誰かに手伝ってもらえば可能性を広げることができます。 またQiitaさんの記事はいつもスクリプティングの導きとなっています。 偶然だとは思いますが、深く感謝します。
guest

0

エラーメッセージ "Fatal error: Call to a member function fetch_assoc() on a non-object in"
を直訳すると「重大なエラー:オブジェクトではない(当然、メンバー関数は持っていない)もののメンバー関数fetch_assoc()を呼び出している」となります。

このエラーが発生した箇所は

$de->fetch_assoc();

だと考えられますから、$deがオブジェクトでないのだと思われます。

質問中に、$deが上に指摘した1か所しかなく、$deが何なのかについて推測するための情報が見当たりませんので、問題解決のための助言は出来かねます。

ただ、『テーブルはできていると思うのですが、レコードはまだありません』というのは、エラーメッセージと直接の関係はありません。

投稿2018/11/10 12:28

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

phpsyoshinsya

2018/11/10 12:46

もちろんそうすでは$dbになっていることは確認しています。 レコードがないテーブルに対してselect countを行ったときによく起こるエラーのような気がするのは私だけでしょうか?
phpsyoshinsya

2018/11/10 17:53

そうですね、他にも書きましたが "table reserveslot does not exist" ですからね。 当然$resultはこのままだと永遠にfalseですね。 varchar型にnot nullは設定できるのか、できないならもうあきらめてプライマリーキーの設定を外すかですよね。 でもテーブルの性質上dateカラムがヌルじゃ困るしなあ。 こういう時の奥の手ってありますか?
guest

0

皆無、と言いましたが、単なるタイプミスっぽいですね。

$de->fetch_assoc();

となっており、
$result=$db->query("select count(*) from reserveslot where date>={$row["date"]}"); // $row["date"]は

$de ではなく $db では。

投稿2018/11/10 12:19

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

phpsyoshinsya

2018/11/10 12:29

はい、ご想像の通りで手入力したせいですね。 すみませんでした。 一応これでも再度確認したんですが、申し訳ありません。
m.ts10806

2018/11/10 12:38

最初の頃はありがちです。思い込みでやってしまうのはよくあることです。 エラーメッセージがでているならエラーメッセージを調べるべきですね。 PHPのエラーメッセージのほとんどは何がどう悪いのかきちんと教えてくれるようになっているので。
phpsyoshinsya

2018/11/10 13:12

ご助言感謝します。 エラーメッセージの意味は理解していますが、どうしてここにこのエラーなのかが理解できなくて今回質問させていただきました。 function product_reserve_time(){ $db=new mysqli("localhost","username","password","dbname"); $db->set_charset("sjis"); $result=$db->query("select* from today"); print $db->error; $row=$result->fetch_assoc(); $result=$db->query("select count(*) from reserveslot where date>={$row["date"]}"); $row=$result->fetch_assoc(); if($row["count"]==0){ $result=$db->query("select * from today"); $row=$result->fetch_assoc(); $time=(int)$row["date"]; $db->query("insert into reserve_info (date) values({$row["date"]})"); print $db->error; for($i=0;$i<6;$i++){ $db->query("insert into reserveslot (date) values('{$time}')"); $time=$time+86400; print $db->error; } } if($row["count"]!=0&&$row["count"]<7){ $count=(int)$row["count"]; $count=7-$count; $result=$db->query("select * from reserveslot order by date desc order by date desc limit 1"); print $db->error; $row=$result->fetch_assoc(); $time=(int)$row["date"]; for($i=0;$i<$count;$i++){ $time=$time+86400; $db->query("insert into reserveslot (date) values('{$time}')"); print $db->error; } } $result=$db->query("select * from reserveslot where date>=(select date from today) limit 7"); print $db->error; while($row=$result->fetch_assoc()) { printf("<input type=\"radio\" name=\"date\" value=\"%s\">%s月%s日",$row["date"],idate("m",$row["date"]),idate("d",$row["date"])); printf("<select name=\"%s\"><option>----</option>",$row["date"]); if($row["rs1"]==0) print "<option value=\"1\">19:00</option>"; if($row["rs2"]==0) print "<option value=\"2\">20:30</option>"; if($row["rst3"]==0) print "<option value=\"3\">22:00</option>"; if($row["rt4"]==0) print "<option value=\"4\">23:30</option>"; if($row["rs5"]==0) print "<option value=\"5\">25:00</option>"; if($row["rs6"]==0) print "<option value=\"6\">26:30</option>"; if($row["rs7"]==0) print "<option value=\"7\">28:00</option>"; print "</select><br><br>"; } $db->close(); } function updtrs(){ $query="update table reserveslot set "; switch($_SESSION["time"]){ case "1": $query.="rs1=1 "; break; case "2": $query.="rs2=1 "; break; case "3": $query.="rs3=1"; break; case "4": $query.="rs4=1 "; break; case "5": $query.="rs5=1 "; break; case "6": $query.="rs6=1 "; break; case "7": $query.="rs7=1 "; break; } $query.="where date='".$_SESSION["date"]."'"; $db=new mysqli("localhost","username","password","dbname"); $db->query("{$query}"); $db->close(); } 関連する二つの関数を載せておきます。
m.ts10806

2018/11/10 13:14

ここに急にコードを貼られても見づらいですし、 そもそも質問のコードを変わってしまっています。 「ここにこのエラー」とはどこの何を指しているのかわかりません。 コードブロックが利用可能な質問本文に追記してください。
phpsyoshinsya

2018/11/10 13:38

コメントありがとうございます。 ご指摘いただいたように、質問投稿を編集させていただきました。
m.ts10806

2018/11/10 14:10

既に回答がついているように、最初に提示されたエラーはSELECT文とは無関係です。 さて。 別でコメントを書いたように、視認可能な人のほうが多く、 それはコードに関しても同じです。 質問者さんのコードはインデントが全くなく、関数の開始、終了や分岐の開始、終了が見た目で分かりづらい状況となっています。 コードの読みやすさはそのままコードの品質となります。読みにくいコードには回答もつきにくいです。 更に、コード内に最初に問題となっていた$de->fetch_assoc()の部分が一切ありません。どこの何を見て我々回答者は指摘すれば良いのでしょうか? 質問者さんはあまり意識していないかもしれませんが、質問者さんが思っている以上に多くの人は目で得られる情報に頼っています。 「コードを提示してね」「コードは見やすくフォーマットかけてね」と指摘をすることがよくありますが、それは回答に必要な情報や整形であるためです。 それは初心者であろうと目の見えない人であろうと関係ありません。他人の時間を使うことを選んだ以上は質問する側の責任において、回答に必要な情報や整形はすべきと思います。
phpsyoshinsya

2018/11/10 16:07

ご指摘はごもっともと思います。 確かに整形もしていないですし(notepadで主導で成型するのは目が見えないと困難を極めます)、また私もきれいに整形したソースを書きたいと思いますが、スクリーンリーダー(タブオーダー)に対応した、またメニューバーが充実したものはないでしょうか? 自動整形機能があるととても便利だと思います。 全然関係ないですけど、Shift_JISでデータベースをうまく操るのに初めて苦労したので、上記の願いに加えてUTF8で基本的に保存してくれるような設定で可能ならさらにうれしいですね。
m.ts10806

2018/11/10 19:17 編集

コード整形は整形してくれるwebサービスもありますし、自動フォーマットしてくれるエディター、またはeclipseなどのIDEを使うと良いです。目が見えないのであれば結果如何は確認できない部分があるかとは思いますが、それでも全くないよりはマシになるはずです。 あと変数のデバッグはprintやechoではなくvar_dump()を使ってください。 echoなどはあくまで文字列を画面出力するためのもので、変数がnullなどの場合、何も出ませんので。 型などの確認もできるvar_dump()が有用です
phpsyoshinsya

2018/11/10 19:32

なるほどですね。 var_dump() の使い方をネットで調べてみますね。 整形だけ自動でやってくれるウェブサイトっていいですね。 もしよければ使い易そうなのを教えていただけるとありがたいです。
m.ts10806

2018/11/10 19:36

私自身、IDE利用ですし、もともとインデントをかけながらコードを書くので後から整形かけることがほとんどありませんので、Webサービスを利用する機会がないので 「php 整形」などで検索して上位にくるサービスを利用されては。
phpsyoshinsya

2018/11/11 12:25

そうですよね。やっぱりIDE使ってらっしゃるのですよね。 それは{を開いたらTABを1つずつ増やしてくれたり、}をしたらTABを1つずつ減らしてくれたりする機能もありますか? もし、ソフト名を教えていただけたら、スクリーンリーダーで使えるかどうかチェックして、使えるようになりたいと思います。 なかなかソフトの説明だけではIDEを自分で決定できかねます。 この際に私もIDEでヴューできたらなあと願います。
m.ts10806

2018/11/11 12:32

設定によります。好みや現場で導入可不可もあるので一概にこれがと強くすすめることは難しいのですが、メジャーどころではEclipseでしょうか。 もちろんこれだけではありません。AtomやVisual Studioなどもあります。 参考URL: https://eng-entrance.com/php-editor#PHPWindowsMac 設定やエディタで扱う言語によりますが、 大体のエディタでは { 入力してEnter(改行)すると 閉じの}が補完されたり、 間に何かしら処理が入っていたら適切なインデントが入ったりします。 もちろんある程度入力した後、メニューからフォーマットさせる機能もあります。 関数の候補や定義済み変数の候補が入力中に出てくるサジェスト機能もあります。 使用感は人ぞれそれなので使ってみてくださいとしか言えませんが・・・。 構文チェックもプログラミング同時にしてくれるのでSyntax Errorなどは実行前に気づくことができますので(ただしアラート音がでるわけではありません。あくまで視認前提です)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問