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

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

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

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

PHP

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

Q&A

解決済

1回答

1880閲覧

同一ページ内にコメント入力が複数できるようにしたい。

torinoto7

総合スコア19

MySQL

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

PHP

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

0グッド

1クリップ

投稿2018/10/11 22:04

編集2018/10/12 21:14

【やりたい事】
同一ページ内に3つの商品紹介があり、
対象商品に対して感想が入力できる掲示板を作成したい。
項目は、名前・感想・評価です。

初心者的な考えでDBを分けてあげれば可能じゃないかと思い
以下の方法で作成しました。

【行った事】
①DB,ユーザ名をそれぞれ分けて作成。
②id,name,tileなどの文字列はDB別に名前を変更。
③phpなどのソースは同じ。

一つ目のDBで作成した掲示板は動作しましたが、二つ目のDBで動かしている掲示板はうまく動作せずエラーとなってしまいます。
対応法教えて下さい。また、別な方法で「やりたい事」ができる操作があれば教えて下さい。
宜しくお願いします。

【DB①】(動作可能)
・DBテーブル
イメージ説明

・write.php

PHP

1 2<?php 3 4 // エラー表示 5error_reporting(E_ALL); 6ini_set('display_errors', '1'); 7 8 // データの受け取り 9 $name = $_POST['name']; 10 $title = $_POST['title']; 11 $star = $_POST['star']; 12 $body = $_POST['body']; 13 14 //必須項目チェック(名前か本文が空ではないか?) 15 if ($name == '' || $body == ''){ 16 header('Location: fot.php'); // fot.phpへ移動 17 exit(); //終了 18} 19 //データベースに接続 20 $dsn = 'mysql:host=localhost;dbname=tabe1;charset=utf8'; 21 $user = 'tabe1user'; 22 $password = '1111'; // 設定したパスワード 23 24try { 25 $db = new PDO($dsn, $user, $password); 26 $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 27 //プリペアドステートメント作成 28 $stmt = $db->prepare(" 29 INSERT INTO bbs (name, title, star, body, date ) 30 VALUES (:name, :title, :star, :body, now() )" 31 ); 32print_r($db->errorInfo()); 33 34 //パラメータを割り当て 35 $stmt->bindParam(':name', $name, PDO::PARAM_STR); 36 $stmt->bindParam(':title', $title, PDO::PARAM_STR); 37 $stmt->bindParam(':star', $star, PDO::PARAM_STR); 38 $stmt->bindParam(':body', $body, PDO::PARAM_STR); 39 40 //クエリの実行 41 $stmt->execute(); 42 43 //fot.phpに戻る 44 header('Location: fot.php'); 45 exit(); 46} catch(PDOException $e) { 47 die ('エラー:' . $e->getMessage()); 48} 49?>

index.html

html

1<?php 2 // 1ページに表示されるコメントの数 3 $num = 3; 4 5 //データベースに接続 6 $dsn = 'mysql:host=localhost;dbname=tabe1;charset=utf8'; 7 $user = 'tabe1user'; 8 $password = '1111'; //DBパスワード 9 10 //ページ数が指定されているとき 11 $page = 0; 12 if (isset($_GET['page']) && $_GET['page'] > 0) { 13 $page = intval($_GET['page']) -1; 14 } 15 16try { 17 $db = new PDO($dsn, $user, $password); 18 $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 19 //プリペアドステートメントを作成 20 $stmt = $db->prepare( 21 "SELECT * FROM bbs ORDER BY date DESC LIMIT 22 :page, :num" 23 ); 24 //パラメータを割り当て 25 $page = $page * $num; 26 $stmt->bindParam(':page', $page, PDO::PARAM_INT); 27 $stmt->bindParam(':num', $num, PDO::PARAM_INT); 28 //クエリの実行 29 $stmt->execute(); 30} catch(PDOException $e){ 31 echo "エラー:" . $e->getMessage(); 32} 33 34?> 35 36 <div id="nav-drawer"><!-- ハンバーガー --> 37 <input id="nav-input" type="checkbox" class="nav-unshown"> 38 <label id="nav-open" for="nav-input"> 39 <img src="test.png"> 40 </label><span></span> 41 <label class="nav-unshown" id="nav-close" for="nav-input"></label> 42 <div id="nav-content"> 43 <div align="center"> 44<img src="test.png"> 45<?php 46 while ($row = $stmt->fetch()): 47 $title = $row['title'] ? $row['title'] : '(無題)'; 48?> 49 <p>名前:<?php echo $row['name'] ?></p> 50 <p>タイトル:<?php echo $title ?></p> 51 <p>評価:<?php echo $row['star'] ?></p> 52 <p><?php echo nl2br($row['body'], false) ?></p> 53 <p><?php echo $row['date'] ?></p> 54<?php 55 endwhile; 56 57 //ページ数の表示 58 try { 59 //プリペアドステートメント作成 60 $stmt = $db->prepare("SELECT COUNT(*) FROM bbs"); 61 //クエリ 62 $stmt->execute(); 63 } catch (PDOException $e){ 64 echo "エラー:" . $e->getMessage(); 65 } 66 67 //コメントの件数を取得 68 $comments = $stmt->fetchColumn(); 69 //ページ数を計算 70 $max_page = ceil($comments / $num); 71 echo '<p>'; 72 for ($i = 1; $i <= $max_page; $i++){ 73 echo '<a href="fot.php?page=' . $i . '">' . $i . 74 '</a>&nbsp;'; 75 } 76 echo '</p>'; 77?> 78</span> 79<span class="form"> 80 <form action="write.php" method="post"> 81 <p>名前:<input type="text" name="name"></p> 82 <p>タイトル:<input type="text" name="title"></p> 83 <p>評価:<select name="star"> 84 <option value="★☆☆☆☆">★☆☆☆☆</option> 85 <option value="★★☆☆☆">★★☆☆☆</option> 86 <option value="★★★☆☆">★★★☆☆</option> 87 <option value="★★★★☆">★★★★☆</option> 88 <option value="★★★★★">★★★★★</option> 89 </select></p> 90 <textarea name="body"></textarea> 91 <p><input type="submit" value="書き込む">&nbsp;&nbsp;<input type="reset" value="リセット"></p> 92 </form> 93 </span> 94 </div> 95 </div><!-- nav-content終了 --> 96 </div><!-- ハンバーガー --> 97

【DB②】(動作不可:エラーあり)
・DBテーブル
イメージ説明

・エラー内容
Fatal error: Uncaught Error: Call to a member function bindParam() on boolean in C:\xampp\htdocs\test\fot1\fot.php:238 Stack trace: #0 {main}thrown in C:\xampp\htdocs\test\fot1\fot.php on line 238

・write1.php

PHP

1<?php 2 3 // エラー表示 4error_reporting(E_ALL); 5ini_set('display_errors', '1'); 6 7 // データの受け取り 8 $name1 = $_POST['name1']; 9 $title1 = $_POST['title1']; 10 $star1 = $_POST['star1']; 11 $body1 = $_POST['body1']; 12 13 //必須項目チェック(名前か本文が空ではないか?) 14 if ($name1 == '' || $body == ''){ 15 header('Location: fot.php'); // fot.phpへ移動 16 exit(); //終了 17} 18 //データベースに接続 19 $dsn = 'mysql:host=localhost;dbname=a1;charset=utf8'; 20 $user = 'a1user'; 21 $password = '1111'; // 設定したパスワード 22 23try { 24 $db = new PDO($dsn, $user, $password); 25 $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 26 //プリペアドステートメント作成 27 $stmt = $db->prepare(" 28 INSERT INTO bbs (name1, title1, star1, body1, date1 ) 29 VALUES (:name1, :title1, :star1, :body1, now() )" 30 ); 31print_r($db->errorInfo()); 32 33 //パラメータを割り当て 34 $stmt->bindParam(':name1', $name1, PDO::PARAM_STR); 35 $stmt->bindParam(':title1', $title1, PDO::PARAM_STR); 36 $stmt->bindParam(':star1', $star1, PDO::PARAM_STR); 37 $stmt->bindParam(':body1', $body1, PDO::PARAM_STR); 38 39 //クエリの実行 40 $stmt->execute(); 41 42 //fot.phpに戻る 43 header('Location: fot.php'); 44 exit(); 45} catch(PDOException $e) { 46 die ('エラー:' . $e->getMessage()); 47} 48?>

index.html

HTML

1<?php 2 // 1ページに表示されるコメントの数 3 $num = 3; 4 5 //データベースに接続 6 $dsn = 'mysql:host=localhost;dbname=a1;charset=utf8'; 7 $user = 'a1user'; 8 $password = '1111'; //DBパスワード 9 10 //ページ数が指定されているとき 11 $page = 0; 12 if (isset($_GET['page']) && $_GET['page'] > 0) { 13 $page = intval($_GET['page']) -1; 14 } 15 16try { 17 $db = new PDO($dsn, $user, $password); 18 $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 19 //プリペアドステートメントを作成 20 $stmt = $db->prepare( 21 "SELECT * FROM bbs ORDER BY date DESC LIMIT 22 :page, :num" 23 ); 24 //パラメータを割り当て 25 $page = $page * $num; 26エラー箇所→ $stmt->bindParam(':page', $page, PDO::PARAM_INT); 27 $stmt->bindParam(':num', $num, PDO::PARAM_INT); 28 //クエリの実行 29 $stmt->execute(); 30} catch(PDOException $e){ 31 echo "エラー:" . $e->getMessage(); 32} 33 34?> 35 36 <div id="nav-drawer"><!-- ハンバーガー --> 37 <input id="nav-input" type="checkbox" class="nav-unshown"> 38 <label id="nav-open" for="nav-input"> 39<img src="test1.png"></label><span></span> 40 <label class="nav-unshown" id="nav-close" for="nav-input"></label> 41 <div id="nav-content"> 42 <div align="center"> 43<img src="test1.png"> 44 <?php 45 while ($row = $stmt->fetch()): 46 $title = $row['title1'] ? $row['title1'] : '(無題)'; 47?> 48 <p>名前:<?php echo $row['name1'] ?></p> 49 <p>タイトル:<?php echo $title ?></p> 50 <p>評価:<?php echo $row['star1'] ?></p> 51 <p><?php echo nl2br($row['body1'], false) ?></p> 52 <p><?php echo $row['date1'] ?></p> 53<?php 54 endwhile; 55 56 //ページ数の表示 57 try { 58 //プリペアドステートメント作成 59 $stmt = $db->prepare("SELECT COUNT(*) FROM bbs"); 60 //クエリ 61 $stmt->execute(); 62 } catch (PDOException $e){ 63 echo "エラー:" . $e->getMessage(); 64 } 65 66 //コメントの件数を取得 67 $comments = $stmt->fetchColumn(); 68 //ページ数を計算 69 $max_page = ceil($comments / $num); 70 echo '<p>'; 71 for ($i = 1; $i <= $max_page; $i++){ 72 echo '<a href="fot.php?page=' . $i . '">' . $i . 73 '</a>&nbsp;'; 74 } 75 echo '</p>'; 76?> 77 </span> 78<span class="form"> 79 <form action="write1.php" method="post"> 80 <p>名前:<input type="text" name="name1"></p> 81 <p>タイトル:<input type="text" name="title1"></p> 82 <p>評価:<select name="star1"> 83 <option value="★☆☆☆☆">★☆☆☆☆</option> 84 <option value="★★☆☆☆">★★☆☆☆</option> 85 <option value="★★★☆☆">★★★☆☆</option> 86 <option value="★★★★☆">★★★★☆</option> 87 <option value="★★★★★">★★★★★</option> 88 </select></p> 89 <textarea name="body1"></textarea> 90 <p><input type="submit" value="書き込む">&nbsp;&nbsp;<input type="reset" value="リセット"></p> 91 </form> 92 </span> 93 </div> 94 </div><!-- nav-content終了 --> 95 </div><!-- ハンバーガー -->

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

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

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

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

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

m.ts10806

2018/10/12 00:04

「掲示板を複数」とは具体的にどのような状態でしょうか。場合により今のテーブル構造では難しいと思いますので要件を具体化して質問に追記、編集してください
guest

回答1

0

ベストアンサー

php

1header('Location: fot.php');

エラーメッセージ的にはこの先でエラーが出ているようなので、fot.php が問題なのでは?

ちなみに、「同一ページ内に掲示板を複数作成したい」というだけの要件であれば、DB を分けるよりもテーブルを複数掲示板に対応する形で用意するのが普通だと思います。
DB を分ける方法でももちろん作成可能ではあります。

投稿2018/10/12 02:47

ssasaki

総合スコア1167

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

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

torinoto7

2018/10/14 04:59

連絡遅くなり申し訳御座いません。 初歩的な事をお聞きしますが、テーブルを複数掲示板に対応する形での用意とは どのような方法があるのでしょうか? 教えて頂きたいです。宜しくお願いします。
torinoto7

2018/10/14 10:54

DBに対してテーブルを一つ追加してみたら、 イメージ通りの物が出来上がりました。 無駄なソースがまだ多いとは思いますが..。 ご協力頂き有り難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問