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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

解決済

MAX(id)を取得してそれを$SESSIONに代入したい

aoihello
aoihello

総合スコア27

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

2回答

0リアクション

0クリップ

233閲覧

投稿2022/09/09 13:00

前提

投稿を出力する画面を作っています。
最新の投稿から15件を最初のページ出力するためにMAX(id)をSELECTしています。

実現したいこと

最終目標:MAX(id)から降順に15件のデータを出力させたいです。
今回の質問:MAX(id)を取得してそれを$SESSIONに代入したいのですが、次のようなエラーでできません。$resultの中身が違うのですが、調べてみても同じようなことをやっている人を見つけられず、なんと書けば良いのか分かりません。

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

Warning: Undefined array key "id" in ------- on line 39 Fatal error: Uncaught Error: Call to a member function bindValue() on null in -------:82 Stack trace: #0 {main} thrown in --------- on line 82

該当のソースコード

php

<?php $db = new PDO('mysql:host=--------'); $count_sql= "SELECT COUNT(*) as cnt FROM post"; if(isset($_GET['page']) && is_numeric($_GET['page'])){ $page= $_GET['page']; }else{ $page=1; } $counts = $db -> query($count_sql); $count = $counts -> fetch(PDO::FETCH_ASSOC); $max_page = ceil($count['cnt'] / 15); if($page == 1 || $page == $max_page) { $range = 4; }elseif($page ==2 || $page == $max_page -1){ $range = 3; }else{ $range = 2; } $from_record = ($page -1 *15 +1); if($page == $max_page && $count['cnt'] % 15 !== 0) { $to_record = ($page - 1) * 15 + $count['cnt'] % 15; }else{ $to_record = $page * 15; } ?> <?php session_start(); $db = new PDO('mysql:host=----------'); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $sql = 'SELECT MAX(id) FROM post'; $stmt = $db->prepare($sql); $stmt->execute(); $result = $stmt->fetch(); $stmt = null; $db = null; if(!empty($result)){ $_SESSION['maxid'] = $result['id']; $maxid = $_SESSION['maxid']; }else{ $err_msg = "問題の読み出しエラー";} ?> <!DOCTYPE html> <!--------------------------------共通のHTML--------------------------------------------------> <html lang="ja"> <head> <meta charset="utf-8"> <!このページの情報> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="shortcut icon" href="/favicon.ico"> <!ブックマークのアイコン> <link rel="apple-touch-icon" href="/apple-touch-icon.png"> <meta name="description" content="分からないことを聞いたり説明し、分からないことをなくす.より理解を深めるwebsite。"> <title>Arch Education</title> <link rel="stylesheet" href="-------?<?php echo date('Ymd-Hi');?>" type="text/css"> </head> <body bg-color="#000"> <!-----------------------------header-他のページでも共通のヘッダー----------------------------> <header> <div class="body header-inner header-logo"> <img src="/images/header.jpg" alt="header.jpg" width="100" height="60"> <a href="" class="header-botton">設定</a> <h1 href="" class="header-name">Other Question</h1> </div> </header> <!-----------------------------nav-----------------------------------------------------------> <!---------------------------------------main-----------------------------------------------> <section class="main"> <form action="" method="post"> <div class="scrolling-image-container"><!スクロール画面自体のコンテナ> <div class="scrolling-image"> <a href="" ></a> </div><!スクロール画面の投稿画面。> <input type="hidden" name="scrolling" id="count" value=15> <div id="content"> <input class="1" href="/post/post.html?<?php echo $_SESSION['maxid'];?>"> <?php if($page == 1){ $sql = 'SELECT title FROM post where :maxid'; $stmt->bindValue(':maxid', $maxid, PDO::PARAM_INT); $stmt = $db->prepare($sql); $stmt->execute(); $result = $stmt->fetch(); $stmt = null; $db = null; if(!empty($result)){ $_SESSION['title'] = $result['title']; exit(); echo $_SESSION['title']; }else{ $err_msg = "これ以上問題がありません。";} }else{ $nextid = ($maxid - 15 * $page); $sql = 'SELECT title FROM post where :nextid'; $stmt->bindValue(':nextid', $nextid, PDO::PARAM_STR); $stmt = $db->prepare($sql); $stmt->execute(); $result = $stmt->fetch(); $stmt = null; $db = null; if(!empty($result)){ $_SESSION['title'] = $result['title']; exit(); echo $_SESSION['title']; }else{ $err_msg = "これ以上問題がありません。";} } ?> </input> <div class="2" href="/post/post.html">追加されたコンテンツ2</div> <div class="3" href="/post/post.html">追加されたコンテンツ3</div> <div class="4" href="/post/post.html">追加されたコンテンツ4</div> <div class="5" href="/post/post.html">追加されたコンテンツ5</div> <div class="6" href="/post/post.html">追加されたコンテンツ6</div> <div class="7" href="/post/post.html">追加されたコンテンツ7</div> <div class="8" href="/post/post.html">追加されたコンテンツ8</div> <div class="9" href="/post/post.html">追加されたコンテンツ9</div> <div class="10" href="/post/post.html">追加されたコンテンツ10</div> <div class="11" href="/post/post.html">追加されたコンテンツ11</div> <div class="12" href="/post/post.html">追加されたコンテンツ12</div> <div class="13" href="/post/post.html">追加されたコンテンツ13</div> <div class="14" href="/post/post.html">追加されたコンテンツ14</div> <div class="15" href="/post/post.html">追加されたコンテンツ15</div> </div> </div> </form> <p class="from_to"><?php echo $count['cnt']; ?>件中 <?php echo $from_record; ?> - <?php echo $to_record; ?> 件目を表示</p> <?php for($i = 1; $i <= $max_page; $i++) { if($i >= $page - $range && $i <= $page + $range) { if($i == $page) { ?> <span class="now_page_number"><?php echo $i; ?></span> <?php }else{ ?> <a href="page=<?php echo $i; ?>" class="page_number"><?php echo $i; ?></a> <?php ;} }else{;} ;} ?> </section> <!-----------------------------------footer-完成----------------------------------------------> <footer> <div class="body footer btn-orange btn-circle btn-circle-a"> <a href="" class="btn btn-orage btn-circle btn-circle-a">他の質問</a> <a href="-------" class="btn btn-orage btn-circle btn-circle-a">Research</a> <a href="-----" class="btn btn-orage btn-circle btn-circle-a">+Q</a> <a href="" class="btn btn-orage btn-circle btn-circle-a">問題集</a> <a href="------" class="btn btn-orage btn-circle btn-circle-a">Profile</a> </div> <a href="" class="footer-copyright"> &copy; Arch </a> </footer> </body> </html>

テーブル構造

CREATE TABLE `post` ( `id` int(10) NOT NULL, `subject` varchar(15) DEFAULT NULL, `grade` varchar(15) DEFAULT NULL, `post` varchar(2000) DEFAULT NULL, `pictures` int(11) DEFAULT NULL, `title` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

試したこと

"selectでMAX(id)を取得 出力方法"と調べたところ
https://medium-company.com/select-max/
のようなMAX(id)の使い方などは出てくるのですが、それをSESSIONなどに代入方法が出てきません。

補足情報(FW/ツールのバージョンなど)

39行目は$_SESSION['maxid'] = $result['id'];の部分です。
82行目は$stmt->bindValue(':maxid', $maxid, PDO::PARAM_INT);です。
$SESSIONに代入ができていないので81行目のエラーも出ていると思っています。
よろしくお願いいたします。

以下のような質問にはリアクションをつけましょう

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

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

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

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

適切な質問に修正を依頼しましょう。

まだ回答がついていません

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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