気軽にブログを楽しむ

大学生の日常

プログラミング本気1週間 4日目

 

前回の記事

www.captentheater.com

 

 本日の成果

 

・昨日からやっている掲示板の作成を理解しながらやっていました。 

・ようやくデータベースから投稿を引っ張り出し、表示させてくれるようになりました。

f:id:peternoburogu:20200423211132j:plain

 

今日の感想
 

エラーをだんだん自分で対処できるようになってきた一方で、ある1つのエラーに長時間使ってしまって、かなり悔しくなりました。

 

基本的に今までは

  • エラーをコピペしてググる
  • エラーを翻訳して理解した後にググる

 

などという手法でやってきましたが、本日のエラーを通して学んだことは

 

まずは、エラー文の行の関数を公式で調べてみるということでした。

 

公式でみてみると、自分のバージョンでは対応していなかったり、ちょっと文字が違ったりするのを確認できるということでした。

 

この事を忘れないようにしようと思います。

 

 

 

 

 

 

今日わかった事 自分用

 

ENT_QUOTES

 

"とか' をhtmlエンティティに変換する

 

 

 

preg_replaceについて

 

www.sejuku.net

 

置換ができるらしい。

 

掲示板を作る際に、書き込みに対するクライアントの改行を削除して<br>要素に変えるという荒技

 

rnと書かれているところでは改行コードを探しています。そしてそのあとに書かれている「,」後の文字に置き換わる

 

もちろん他の使い方もある。

 

<br>の例・・・・・・・・・

preg_replace( '/\\r\\n|\\n|\\r/', '<br>', $clean['置換したい関数名']);

 

 

データベースのAUTO_INCREMENTのせいでひどい目にあった話

 

MySQLを使う際に、AUTO_INCREMENTを設定していないと酷い目に会うことがわかった。

 

今回の例

 

Duplicate entry '0' for key 'PRIMARY' 

というエラーがいくらソースコードを修正しても存在し続けて困った。

 

2時間ほどコードと苦闘していたが、ググりまくってみたらAUTO_INCREMENTを登録していなかった事が原因らしかった。

 

もっと早くエラーを理解できていれば…。もの凄く時間の無駄遣いになってしまったが、MENTAの方もそういうエラーを1人で解決していくことの方が勉強になると言っていたので、よしとしよう…。

 

この後も別のエラーにさいなまれているのだが…

 

 

fetchall()の呪い

 

お恥ずかしい話なのですが、このエラーで僕はGoogleと3時間は対話したと思う。

 

半分泣きながら、必死で試行錯誤してみたものの(他のやり方など)全く解決せず…。

 

正直質問力がない今terateilでうまく質問できる勇気も出ず、MENTAのかたに質問を投げかけたところ。

 

 

 

追記:MENTAさんが解決してくださいました。。。(なんとか理解できました泣)

 

このエラーに3時間くらいかけてしまった事を伝えると、励ましてくださいました。本当にMENTAは最高のサービスですね泣 

現在の問題

データベースから掲示板に映し出す投稿を引っ張り出してくる作業において、fetch all()で配列式に取り出してもらい、htmlのところに出力すると言った事をやろうとしている。

 

/ / データベースに接続

$mysqli = new PDO('mysql:host=localhost;dbname=board;charset=UTF8;', root, パスワード);
// 接続エラーの確認

if( $mysqli->connect_errno ) {

$error_message[] = 'データの読み込みに失敗しました。 エラー番号 '.$mysqli->connect_errno.' : '.$mysqli->connect_error;} else {

 

 

//データベースから取り出す
$sql =

"SELECT view_name,message,post_date

FROM message

ORDER BY post_date DESC";

 

//SQL文をデータベースへ送信するためにqueryメソッドをかます

$res = $mysqli->query($sql);

//$resがしっかりと入っていれば$message_arrayに配列で入れてくれるはずだった…

if( $res ) { $message_array = $res->fetch_all(); }

//終了

$mysqli->close();}

 

こちらを参考にする。

https://www.php.net/manual/ja/mysqli-result.fetch-all.php