質問するログイン新規登録

Q&A

0回答

578閲覧

PHP 記事一覧ページから記事表示ページへの遷移 ID 遷移できない

DjangoUser

総合スコア25

Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

MySQL

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

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

0グッド

0クリップ

投稿2024/09/08 12:59

編集2024/09/13 06:58

0

0

実現したいこと

・ページ遷移をして記事の内容を表示させる。

前提

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
※プライバシー保護のため、アプリ名やデータベース名、タイトルなどは実際のものと異なります。

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.25%

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

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

質問する

関連した質問