実現したいこと
・ページ遷移をして記事の内容を表示させる。
前提
PHPで記事の一覧ページと閲覧ページを作成していました。
そこで、リンクをクリックしてもページ遷移ができない状態になりました。
発生している問題・エラーメッセージ
ページリンクをクリックしても元のページに戻されてしまいます。
Apacheのログを確認したところ、302というステータスコードが確認できました。
::1 - - [08/Sep/2024:21:39:56 +0900] "GET /アプリ名/member/common/article.php?id=1 HTTP/1.1" 302 1699 ::1 - - [08/Sep/2024:21:39:56 +0900] "GET /アプリ名/member/common/articles_list.php HTTP/1.1" 200 1309
該当のソースコード
記事一覧ページ(articles_list.php)
PHP
1<?php 2session_save_path('../session'); 3include('../../php_include/login_check.php'); 4if(empty($_SESSION['username'])){ 5 header("Location:/トップページ"); 6 exit(); 7} 8?> 9<!DOCTYPE html> 10<html lang="ja"> 11<head> 12 <meta charset="UTF-8"> 13 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 14 <link rel="stylesheet" href="../../css/style.css" type="text/css"> 15 <link rel="icon" type="image/png" href="./img/favicon.png"> 16 <link rel="apple-touch-icon" href="../../img/favicon.png"> 17 <meta name="application-name" content="アプリ名"/> 18 <meta name="msapplication-square150x150logo" content="../../img/favicon.png"> 19 <title>記事一覧</title> 20</head> 21<body> 22 <div class="header"> 23 <h1>タイトル</h1> 24 <hr> 25 </div> 26 <div class="articles_list"> 27 <h2>記事一覧</h2> 28 <p>見たい記事を選択してください。</p> 29 <?php 30 //データベース接続 31 $dsn = "mysql:host=localhost;dbname=データベース名"; 32 $username = "root"; 33 $password = ""; 34 $db = new PDO($dsn, $username, $password); 35 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 36 37 //全記事を抽出 38 $statement = $db->prepare("SELECT * FROM articles ORDER BY time ASC"); 39 $statement->execute(); 40 echo "<table>"; 41 echo "<tr><th>ID</th><th>タイトル</th><th>投稿日時</th><th>投稿者</th></tr>"; 42 while ($row = $statement->fetch()){ 43 echo "<tr>"; 44 echo "<td>" . (int)$row['id'] . "</td>"; 45 echo '<td><a href="article.php?id=' . (int)$row['id'] . "\">" . $row['title'] . "</a>"; 46 echo "<td>" . $row['time'] . "</td>"; 47 echo "<td>" . $row['writer'] . "</td>"; 48 echo "</tr>"; 49 } 50 echo "</table>"; 51 $statement = null; 52 ?> 53 </div> 54 <a href="javascript:history.back()">前のページに戻る</a> 55</body> 56</html>
記事表示部分(article.php)
PHP
1<?php 2$id = $_GET['id']; 3session_save_path('../session'); 4include('../../php_include/login_check.php'); 5if(empty($_SESSION['username'])){ 6 header("Location:/アプリ名"); 7 exit(); 8} 9if (isset($id)){ 10 //データベース接続 11 $dsn = "mysql:host=localhost;dbname=データベース名"; 12 $username = "root"; 13 $password = ""; 14 try{ 15 $db = new PDO($dsn, $username, $password); 16 //記事内容を抽出 17 $statement = $db->prepare("SELECT * FROM articles where id=:id"); 18 $statement->bindValue(':id', (int)$id,PDO::PARAM_INT); 19 $statement->execute(); 20 $row = $statement->fetch(PDO::FETCH_ASSOC); 21 if(empty($row)){ 22 exit('記事がありません。'); 23 } 24 $statement = null; 25 } catch (PDOException $e){ 26 echo "接続失敗" . $e->getMessage(); 27 exit(); 28 }; 29} else{ 30 exit('IDがありません。'); 31} 32?> 33<!DOCTYPE html> 34<html lang="ja"> 35<head> 36 <meta charset="UTF-8"> 37 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 38 <link rel="stylesheet" href="../../css/style.css" type="text/css"> 39 <link rel="icon" type="image/png" href="./img/favicon.png"> 40 <link rel="apple-touch-icon" href="../../img/favicon.png"> 41 <meta name="application-name" content="<?php echo $row["title"]; ?>|アプリ名"/> 42 <meta name="msapplication-square150x150logo" content="../../img/favicon.png"> 43 <title><?php echo $row['title']; ?>|アプリ名</title> 44</head> 45<body> 46 <div class="header"> 47 <h1>タイトル</h1> 48 </div> 49<div class="articles"> 50 <article> 51 <h2><?php echo $row['title'] ?></h2> 52 <p>投稿日時:<?php echo $row['time'] ?></p> 53 <p>作成者:<?php echo $row['writer'] ?></p> 54 <p><?php echo $row['text'] ?></p> 55 <?php 56 if(isset($row['addfiles'])){ 57 if (exif_imagetype($row['addfiles'])){ 58 $img = base64_encode($row['addfiles']); 59 echo "<img src=" . "data:" . $row['addfiles_ContentType']; 60 } 61 } 62 ?> 63 </article> 64 <div class="comment_confirmation"> 65 <p class="modal_title">この記事にコメントしますか?</p> 66 <form method="post" action="../../php_include/add_comments.php" enctype="multipart/form-data"> 67 <textarea class="textarea form-control" placeholder="コメントを入力してください" name="comment_text"></textarea> 68 <div class="comment_files"> 69 <input type="file" name="file_name" class="comment_files" multiple> 70 </div> 71 <input type="hidden" name="title" value="<?php $row['title'] ?>"> 72 <div class="post_btn"> 73 <button type="submit" name="comment" value="comment">コメント</button> 74 <button type="button">キャンセル</button> 75 </div> 76 <?php 77 include_once "../../php_include/add_comments.php"; 78 echo $comment_msg; 79 ?> 80 </form> 81 </div> 82 <a href="javascript:history.back()">前のページに戻る</a> 83 </div> 84</body> 85</html>
試したこと
インターネット検索→該当記事なし
Apacheログの確認→上記の結果に
$_GET['id']の存在確認→存在
defineの使用→失敗
補足情報(FW/ツールのバージョンなど)
PHP 8.3.10←質問記入時アップデートを確認したため、回答時には8.3.11になっている可能性大
Apache 2.4.62
Windows 11 23H2
Visual Studio Code 1.93.0
※プライバシー保護のため、アプリ名やデータベース名、タイトルなどは実際のものと異なります。
あなたの回答
tips
プレビュー