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

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

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

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

解決済

掲示板作成中にエラーが出てしまったのですが、原因が分かりません

newyee
newyee

総合スコア0

PHP

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

6回答

0評価

1クリップ

12閲覧

投稿2019/02/20 11:36

編集2022/01/12 10:58

PHPの学習で、簡易な掲示板を作成していたのですが、エラーが発生してしまい、解決できない状況です。どなたかご助言頂けましたら幸いです。
以下は自分が作成したコードになります。

php

<?php //1ページに表示される数 $num = 10; $dsn = 'mysql:host=localhost;dbname=tennis;charset=utf8'; $user = 'tennisuser'; $password = 'password'; $page = 0; if(isset($_GET['page']) && $_GET['page'] > 0){ $page = intval($_GET['page'])-1; } try{ $db = new PDO($dsn,$user,$password); $db->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); $stmt = $db->prepare("SELECT * FROM bbs ORDER BY date DESC LIMIT :page, :num"); $page = $page * $num; $stmt->bindParam(':page',$page,PDO::PARAM_INT); $stmt->bindParam(':num',$num,PDO::PARAM_INT); $stmt->execute(); }catch(PDOException $e){ echo "エラー:" . $e->getMessage(); } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>掲示板</title> </head> <body> <h1>掲示板</h1> <p><a href="index.php">トップページに戻る</a></p> <form action="write.php" method="post"> <p>名前:<input type="text"name="name"></p> <p>タイトル:<input type="text" name="name"></p> <textarea name="body"></textarea> <p>削除パスワード(数字4桁):<input type="text" name="pass"></p> <p><input type="submit" value="書き込む"></p> </form> <hr> <?php while($row = $stmt->fetch()): $title = $row['title'] ? $row['title'] : '(無題)'; ?> <p>名前:<?php echo $row['name'] ?></p> <p>タイトル:<?php echo $title ?></p> <p><?php echo nl2br($row['body'],false) ?></p> <p><?php echo $row['date'] ?></p> <form action="delete.php" method="post"> <input type="hidden" name="id" value="<?php echo $row ['id']; ?>"> 削除パスワード:<input type="password" name="pass"> <input type="submit" value="削除"> </form> <?php endwhile; try{ $stmt = $db->prepare("SELECT COUNT(*) FROM bbs"); $stmt->execute(); }catch(PDOException $e){ echo "エラー:" . $e->getMessage(); } $comments = $stmt->fetchColumn(); $max_page = ceil($comments / $num); echo '<p>'; for($i = 1;$i <= $max_page;$i++){ echo '<a href="bbs.php?page=' . $i . '">' . $i . '</a>&nbsp;'; } echo '</p>'; ?> </body> </html>

エラーの内容は以下の通りです。
「Fatal error: Uncaught Error: Call to a member function bindParam() on bool in C:\xampp\xampp\htdocs\tennis\bbs.php:18 Stack trace: #0 {main} thrown in C:\xampp\xampp\htdocs\tennis\bbs.php on line 18」

bbs.phpの18行目が原因なのではないかと、見直してみたのですが、つづりのミスなどは見当たらなかった為、原因が分からずご質問させていただきました。
よろしくお願いします。

※追記です。以下のコードはご回答者様に教えて頂きました点などを、コードに加えて変更したコードです。

php

<?php //1ページに表示される数 $num = 10; $dsn = 'mysql:host=localhost;dbname=tennis;charset=utf8'; $user = 'tennisuser'; $password = 'password'; $page = 0; if(isset($_GET['page']) && $_GET['page'] > 0){ $page = intval($_GET['page'])-1; } try{ $db = new PDO($dsn,$user,$password); $db->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $stmt = $db->prepare(" SELECT * FROM `bbs` ORDER BY `date` DESC LIMIT 0,1"); $page = $page * $num; //$stmt->bindValue("page",$page,PDO::PARAM_INT); //$stmt->bindValue("num",$num,PDO::PARAM_INT); $stmt->execute(); }catch(PDOException $e){ echo "エラー:" . $e->getMessage(); } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>掲示板</title> </head> <body> <h1>掲示板</h1> <p><a href="index.php">トップページに戻る</a></p> <form action="write.php" method="post"> <p>名前:<input type="text"name="name"></p> <p>タイトル:<input type="text" name="name"></p> <textarea name="body"></textarea> <p>削除パスワード(数字4桁):<input type="text" name="pass"></p> <p><input type="submit" value="書き込む"></p> </form> <hr> <?php while($row = $stmt->fetch()): $title = $row['title'] ? $row['title'] : '(無題)'; ?> <p>名前:<?php echo $row['name'] ?></p> <p>タイトル:<?php echo $title ?></p> <p><?php echo nl2br($row['body'],false) ?></p> <p><?php echo $row['date'] ?></p> <form action="delete.php" method="post"> <input type="hidden" name="id" value="<?php echo $row ['id']; ?>"> 削除パスワード:<input type="password" name="pass"> <input type="submit" value="削除"> </form> <?php endwhile; try{ $stmt = $db->prepare("SELECT COUNT(*) FROM bbs"); $stmt->execute(); }catch(PDOException $e){ echo "エラー:" . $e->getMessage(); } $comments = $stmt->fetchColumn(); $max_page = ceil($comments / $num); echo '<p>'; for($i = 1;$i <= $max_page;$i++){ echo '<a href="bbs.php?page=' . $i . '">' . $i . '</a>&nbsp;'; } echo '</p>'; ?> </body> </html>

上記のコードを実行した結果が以下の画像となります。
イメージ説明

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

PHP

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