現在phpとmysqlで掲示板を製作しています
title.phpでタイトルを書き込み、タイトルをリンクとして表示させ、リンクをクリックすると関連したtolk.phpに飛ぶ仕組みをにしています。
title.phpでboardsのidをtolk.phpに渡し、resテーブルにboards.idでINSERTしてます。
下記のSQL文でしたところ2つの処理は一緒の結果(タイトルの中でしたことは、他では表示されずそこでしか表示されない)になっているのですが、WHEREでも2つのテーブルを関連付けできているということですか?
また、このような処理?(関連した特定の場所でしか見えないこと)をなんと言いますか?
テーブル名:boards
id:int(11)
title:varchar(255)
uptime:datetime
テーブル名:res
id:int(11)
boards_id:int(11)
res_time:datetime
message:text
php
1$stmt = $pdo->prepare('SELECT * FROM res WHERE boards_id=?'); 2$params = []; 3 $params[] = $boards_id; 4 $stmt->execute($params);
php
1$stmt = $pdo->prepare('SELECT * FROM boards INNER JOIN res ON boards.id = res.id WHERE boards_id=?'); 2 $params = []; 3 $params[] = $boards_id; 4 $stmt->execute($params);
php
1<?php 2// title.php 3ini_set('display_errors', true); 4error_reporting(E_ALL); 5session_start(); 6 7require 'database.php'; 8$username = $_SESSION['username']; 9$error = []; 10 11date_default_timezone_set('Asia/Tokyo'); 12$title = filter_input(INPUT_POST, 'title'); 13$uptime = date("Y-m-d H:i:s"); 14if(filter_input(INPUT_SERVER,'REQUEST_METHOD') === 'POST'){ 15 16 if($title === ''){ 17 $error[] = 'タイトルは入力必須です。'; 18 }else if(strlen($title) > 10){ 19 $error[] = 'タイトルは10文字以内で入力してください。'; 20 } 21 22 if(count($error) === 0){ 23 try{ 24 $stmt = $pdo->prepare('INSERT INTO boards (id,title,uptime) VALUES (null,?,?)'); 25 $params = []; 26 $params[] = $title; 27 $params[] = $uptime; 28 $stmt->execute($params); 29 header('Location:title.php'); 30 exit; 31 }catch(PDOException $e){ 32 echo $e->getMessage(); 33 } 34 } 35} 36try{ 37 $stmt = $pdo->query('SELECT * FROM boards ORDER BY id DESC'); 38 $count = $stmt->rowCount(); 39 $rows = $stmt->fetchAll(); 40}catch(PDOException $e){ 41 echo $e->getMessage(); 42} 43?> 44 45<!DOCTYPE html> 46<html lang="ja"> 47 <head> 48 <!-- <link rel="stylesheet" href="/css/styles.css"> --> 49 <meta charset="utf-8"> 50 <title>メインページ</title> 51 <h1>掲示板へようこそ</h1> 52 </head> 53 <body> 54 <?php if(count($error) > 0) : ?> 55 <?php foreach($error as $e) : ?> 56 <p><?php echo h($e); ?></p> 57 <?php endforeach; ?> 58 <?php endif; ?> 59 <section> 60 <h2>新規投稿</h2> 61 <!-- 書き込み用フォーム --> 62 <form action="" method="post"> 63 <label for="title">タイトル</label><br> 64 <input type="text" name="title" id="title"><br> 65 <button type="submit">部屋を立てる</button> 66 </form> 67 </section> 68 <section> 69 <h2>投稿一覧</h2> 70 <p>現在の投稿は<span><?php echo $count; ?></span>件です</p> 71 <?php if(!empty($count)): ?> 72 <?php foreach($rows as $row): ?> 73 <div class="linkbox"> 74 <a href='tolk.php?boards_id=<?php echo $row['id']; ?>'> 75 <?php echo h($username); ?> 76 <?php echo h($row['uptime']); ?> <br> 77 <?php echo h($row['title']); ?> 78 <?php var_dump($row['id']); ?> 79 80 <a href="delete.php?delete_title_id=<?php echo $row['id'] ?>">削除</a> 81 <a href="change.php?change_title_id=<?php echo $row['id'] ?>">編集</a> 82 </a> 83 </div> 84 <?php endforeach; ?> 85 </ul> 86 <?php else: ?> 87 <p>投稿はまだありません。</p> 88 <?php endif; ?> 89 </section> 90 </body> 91</html> 92
php
1<?php 2// tolk.php 3ini_set('display_errors', true); 4error_reporting(E_ALL); 5session_start(); 6require 'database.php'; 7 8$username = $_SESSION['username']; 9$boards_id = filter_input(INPUT_GET, 'boards_id'); 10// $boards_id = $_GET['id']; 11$error = []; 12 13date_default_timezone_set('Asia/Tokyo'); 14$message = filter_input(INPUT_POST, 'message');//POST、入力された値を格納、未定義も防ぐ 15$res_time = date("Y-m-d H:i:s"); 16if(filter_input(INPUT_SERVER,'REQUEST_METHOD') === 'POST'){ 17 18 if($message === ''){ 19 $error[] = 'メッセージは入力必須です。'; 20 }else if(strlen($message) > 100){ 21 $error[] = 'メッセージは100文字以内で入力してください。'; 22 } 23 24 if(count($error) === 0){ 25 try{ 26 $stmt = $pdo->prepare('INSERT INTO res (id,boards_id,message,res_time) VALUES (null,?,?,?)'); 27 $params = []; 28 $params[] = $boards_id; 29 $params[] = $message; 30 $params[] = $res_time; 31 $stmt->execute($params); 32 header("Location:tolk.php?boards_id=$boards_id");//変数展開では、ダブルコーテーション 33 exit; 34 }catch(PDOException $e){ 35 echo $e->getMessage(); 36 } 37 } 38} 39try{ 40 $stmt = $pdo->prepare('SELECT * FROM res WHERE boards_id=?'); 41 $params = []; 42 $params[] = $boards_id; 43 $stmt->execute($params); 44 $count = $stmt->rowCount(); 45 $rows = $stmt->fetchAll(); 46}catch(PDOException $e){ 47 echo $e->getMessage(); 48} 49?> 50 51<!DOCTYPE html> 52<html lang="ja"> 53 <head> 54 <link rel="stylesheet" href="/css/styles.css"> 55 <meta charset="utf-8"> 56 <title>メインページ</title> 57 <h1>掲示板へようこそ</h1> 58 </head> 59 <body> 60 <?php if(count($error) > 0) : ?> 61 <?php foreach($error as $e) : ?> 62 <p><?php echo h($e); ?></p> 63 <?php endforeach; ?> 64 <?php endif; ?> 65 <section> 66 <h2>新規投稿</h2> 67 <form action="" method="post"> 68 <label for="message">メッセージ</label><br> 69 <input type="text" name="message" id="message"><br> 70 <button type="submit">投稿</button> 71 </form> 72 </section> 73 <section> 74 <h2>投稿一覧</h2> 75 <p>現在の投稿は<span><?php echo $count; ?></span>件</p> 76 <?php if(!empty($rows)): ?> 77 <?php foreach($rows as $row): ?> 78 <div class="linkbox"> 79 <?php echo h($username); ?> 80 <?php echo h($row['res_time']); ?><br> 81 <?php echo h($row['message']); ?> 82 <a href="delete.php?id=<?php echo $row['id'] ?>">削除</a> 83 <a href="change.php?id=<?php echo $row['id'] ?>">編集</a> 84 </div> 85 <?php var_dump($row['id']); ?> 86 <?php endforeach; ?> 87 </ul> 88 <?php else: ?> 89 <p>投稿はまだありません。</p> 90 <?php endif; ?> 91 </section> 92 </body> 93</html> 94
回答2件
あなたの回答
tips
プレビュー