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

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

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

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

PHP

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

ページネーション

Webアプリケーションにおいて、1ページに収まらないコンテンツを、各ページへのリンクを並べてアクセスしやすくする手法をページネーションと呼びます。

Q&A

1回答

697閲覧

ページネーション機能を実装しようとしたら、データを表示できなくなった。

Nishin

総合スコア30

MySQL

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

PHP

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

ページネーション

Webアプリケーションにおいて、1ページに収まらないコンテンツを、各ページへのリンクを並べてアクセスしやすくする手法をページネーションと呼びます。

0グッド

0クリップ

投稿2020/02/03 13:15

【ご報告】

1週間前は、PHPとMySQLとの接続方法が分からずに詰まっていました(この時に、さくらインターネットのデータベースに関する個人情報を載せてしまった質問を投稿しておりましたが、こちらは運営者に依頼し、削除して頂きました)が、その後は、闇雲にググって解決策を漁るのではなく、セール期間中にUdemyでたにぐち先生の講座を購入し、基礎から模倣して学習しておりました。

おかげさまで、懸案だったPHPとMySQLとの接続もうまくいき、フォームに入力した情報をデータベースに送信することも、データベースの内容を呼び出して表示するページの作成も叶いました。(ロジックとビューも切り離して、前者をincludeで後者に載せる事も施行しました)

【本題】

現在は、たにぐち先生の動画講座を頼りに、ページネーション機能の実装を試みているところです。
しかし、機能実装の為のコードを一通り記述したところ、今度は、それまで登録済みデータ閲覧ページに表示されていたはずのデータベース上のデータを1件も表示できなくなってしまいました。

現在、さくらインターネットのファイルマネージャーに、次のページのコードを上げている状態です。

・登録フォームページ

formviews_StudentAttendance.html <!DOCTYPE html> <html lang="ja" dir="ltr"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <link rel="stylesheet" href="formviews.css"> <title>生徒出欠情報入力フォーム</title> </head> <body> <div class="center"> <h2>生徒出欠情報登録フォーム</h2> <form class="form-group" action="confirmviews_StudentAttendance.php" method="post"> <label for="date">日時:</label> <input type="date" name="date" id="date" required><br> <label for="student_name">生徒氏名:</label> <input type="text" name="student_name" id="student_name" required placeholder="入力必須です"><br> <label>受講した科目</label><br> <input type="checkbox" name="attended_subject[]" value="理科">理科 <input type="checkbox" name="attended_subject[]" value="数学">数学 <input type="checkbox" name="attended_subject[]" value="国語">国語 <input type="checkbox" name="attended_subject[]" value="英語">英語 <input type="checkbox" name="attended_subject[]" value="社会">社会 <br> <label for="today">本日の様子</label><br> <input type="text" name="today_appearance" id="today" class="long"> <br> <label for="remark">備考情報</label><br> <textarea name="remark" id="remark" rows="3" cols="80"></textarea> <input type="submit" id="submit" value="これで登録する" id="submit"> <script> $('#submit').click(function(){ if(!confirm('この内容で登録しますか?')){ /* キャンセルの時の処理 */ return false; }else{ /* OKの時の処理 */ location.href = 'confirmviews_StudentAttendance.php'; } }); </script> </form> <br> <br> <div class="footer"> <small> &copy; 2020 <b>Sunny Boots Project</b> </small> </div> </div> </body> </html>

・登録完了通知ページ

confirmviews_StudentAttendance.php <!DOCTYPE html> <html lang="ja" dir="ltr"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <link rel="stylesheet" href="formviews.css"> <title>生徒出欠情報登録完了画面</title> <?php include('logics_StudentAttendance.php'); ?> </head> <body> <?php try { $statement = $db->prepare('INSERT INTO attend_info SET date=?,student_name=?,today_subject=?,today_appearance=?,remark=? '); $statement->execute(array($date,$student_name,$today_subject,$today_appearance,$remark)); echo "入力内容が登録されました。"; } catch(PDOException $e) { echo 'DB接続エラー:'. $e->getMessage(); } //この記述を「例外処理」という。 ?> <div class="center"> <h2>登録完了通知</h2> <br> <table border="1" bordercolor="gray"> <tr> <th>項目</th><th>データ</th> </tr> <tr> <td>日時</td> <td><?= $date ?></td> </tr> <tr> <td>生徒氏名</td> <td><?= $student_name ?></td> </tr> <tr> <td>この日の受講科目</td> <td><?= $today_subject ?></td> </tr> <tr> <td>この日の様子</td> <td><?= $today_appearance ?></td> </tr> <tr> <td>備考</td> <td><?= $remark ?></td> </tr> </table> <br> <a href="formviews_StudentAttendance.html"><button type="button" name="return"> リマインドメールフォームに戻る </button></a> <br> <br> <div class="footer"> <small> &copy; 2020 <b>Sunny Boots Project</b> </small> </div> </div> </body> </html>

・登録済みデータ閲覧ページ

logtableviews_StudentAttendance.php <!DOCTYPE html> <html lang="ja" dir="ltr"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <link rel="stylesheet" href="formviews.css"> <title>生徒出欠情報ログ</title> <?php include('logics_StudentAttendance.php'); ?> </head> <body> <div class="center"> <h1 class="center">生徒の出欠等情報一覧</h1> <?php while ($record = $records->fetch()):?> <table border="1" bordercolor="gray"> <tr> <td style="width:100px;">日時</td> <td style="padding:3px;"><?= $record['date'] ?></td> </tr> <tr> <td style="width:100px;">生徒氏名</td> <td style="padding:3px;"><?= $record['student_name'] ?></td> </tr> <tr> <td style="width:100px;">受講科目</td> <td style="padding:3px;"><?= $record['today_subject'] ?></td> </tr> <tr> <td style="width:100px;">この日の様子</td> <td style="padding:3px;"><?= $record['today_appearance'] ?></td> </tr> <tr> <td style="width:100px;">備考情報</td> <td style="padding:3px;"><?= $record['remark'] ?></td> </tr> </table><br> <?php endwhile; ?> <br> <?php if($page>=2): ?> <a href="logtableviews_StudentAttendance.php?page=<?= $page-1 ?>">< <?= $page-1 ?>ページ目へ</a>| <?php endif; ?> <a href="formviews_StudentAttendance.html"><button type="button" name="return"> リマインドメールフォームに戻る </button></a> <?php //ここから、それまで投稿された総件数を取得するための処理を行う $counts = $db->query('SELECT COUNT(*) as cnt FROM attend_info'); $count = $counts->fetch(); $max_page = ceil($count['cnt'] / 5); //ceilとは、「切り上げる」という意味。 if ($page<$max_page): ?> |<a href="logtableviews_StudentAttendance.php?page=<?= $page+1 ?>"><?= $page+1 ?>ページ目へ ></a> <?php endif; ?> <br> <br> <div class="footer"> <small> &copy; 2020 <b>Sunny Boots Project</b> </small> </div> </div> </body> </html>

・ロジックページ

logics_StudentAttendance.php <?php $body = ''; // バリデーション $body .= '生徒氏名:'.$student_name.PHP_EOL; if(trim($today_appearance) !== ''){ $body .= 'today_appearance:'. $today_appearance.PHP_EOL; } // この「trim関数」で、文字列内の余計な空白を取り除ける。 if(trim($remark) !== ''){ $body .= 'remark:'. $remark.PHP_EOL; } // 変数に置換 $date = filter_input(INPUT_POST ,'date'); $student_name = filter_input(INPUT_POST ,'student_name'); $today_subject = ''; if (isset($_POST['attended_subject']) && is_array($_POST['attended_subject'])): foreach( $_POST['attended_subject'] as $value ): $today_subject .= $value." "; endforeach; endif; $today_appearance = filter_input(INPUT_POST ,'today_appearance'); $remark = filter_input(INPUT_POST ,'remark'); $db = new PDO('mysql:dbname=XXXX;host=YYYY;charset=utf8','user','pass'); // データベースに接続する場合は、$hogehoge = new PDO('mysql:dbname=データベース名;host=データベースサーバー(ローカルの場合は通常localhostか「127.0.0.1」);文字コード','データベースユーザー名(ローカルの場合は通常root)','パスワード'); と記入する $page = $_REQUEST['page']; if (isset($_REQUEST['page']) && is_numeric($_REQUEST['page'])): // これで、正しい数字以外の値をurl欄に入力しても、強制的に1ページ目にジャンプするようにできた。 $page = $_REQUEST['page']; else: $page = 1; endif; $start = 5 * ($page - 1); $records = $db->prepare('SELECT * FROM attend_info ORDER BY date DESC LIMIT ?,5'); $records->bindParam(1,$_REQUEST['page'], PDO::PARAM_INT); //executeでなくbindParamにすることで、数字で「?」にデータを渡すことができる。 ?> コード

既にデータベースに登録したデータは、以下の通りです。
データベースに登録したデータ

現在迄では、$counts = $db->query( ~ の下に、この「logtableviews_StudentAttendance.php」の上部に記述したようなwhile文を使った処理がない為に、何も表示されないのではないかと考えられたのですが(動画講座では、$counts = $db->query( ~ 以降ではwhile文を使った処理についての説明はありませんでした)、果たして、どこにどのような記述を施せば、正常にデータベースの内容を表示できるでしょうか

初歩的な段階での問題とは存じておりますが、どうかご回答をお願いします。

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

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

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

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

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

m.ts10806

2020/02/03 13:18

そのたにぐち先生に聞けば良いのでは。
guest

回答1

0

とりあえず、try-catchでSELECTのPDOException拾うところから。

これがないとお話になりません。DB側でエラー出てても確認できるような仕組みになってませんしね。
細かいところ指摘しすぎると、ほぼ全部組み直しさせるような形になるので、ここらへんで。

投稿2020/02/03 13:23

m.ts10806

総合スコア80850

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問