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

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

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

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

1464閲覧

php クリックした画像ごとに表示するページを変える

comgi

総合スコア9

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/05/22 18:06

やりたいこと

dbにあるパスから画像を一覧表示して画像をクリックした時にクリックした画像のページに表示したいです。

現状

どの画像をクリックしても最後のidの画像ページが表示されてしまいます。

コード

db接続は省いてますが接続自体は問題ありません。
画像はディレクト内、db内には画像パス、idなどがあります。

php

1//画像一覧ページ 2 session_start(); 3 $userId = $_SESSION["userId"]; 4 5 $stmt = $mysqli->prepare("SELECT * FROM images where userId = ?"); 6 if($stmt->execute(array($userId))){ 7 while($row = $stmt->fetch()){ 8 9 $url = "../../contents/illust/" . $row["url"]; 10 $id = $row["id"]; 11 $_SESSION["id"] = $id; 12 echo '<a href="../post/php/loadillust.php"><img src="'.$url.'" alt="'.$row['title'].'" /></a>'; 13 } 14 }

php

1//画像表示ページ 2 session_start(); 3 4 $id = $_SESSION["id"]; 5 6 $sql = "SELECT * FROM images WHERE id='$id'"; 7 8 $stmt = $mysqli->prepare($sql); 9 $stmt->execute(); 10 $row = $stmt->fetch(PDO::FETCH_ASSOC); 11 $stmt->execute(); 12 13 while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ 14 $url = $row['url']; 15 $type = $row["type"]; 16 } 17 $stmt = null; 18 19 $img = file_get_contents('../../../contents/illust/' . $url); 20 21 if($type == "jpeg"){ 22 header("Content-type: image/jpeg"); 23 echo $img; 24 exit; 25 }elseif($type == "png"){ 26 header("Content-type: image/png"); 27 echo $img; 28 exit; 29 }else{ 30 echo "システムエラー"; 31 }

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

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

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

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

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

m.ts10806

2020/05/22 20:25

画像表示ページ で  $_SESSION["id"] は何が渡ったのか確認しましたか?
m.ts10806

2020/05/22 20:26

あと、画像一覧ページではprepareでパラメータセットしているのに画像表示ページでは直に値を突っ込んでいます。この実装のぶれはなぜでしょう。
comgi

2020/05/22 20:46

idをecho表示させたところ最後の画像のidのみ出力されました。 すみません、制作日の違いです。ページによってバラバラなんですが、正直問題なく処理してくれれば大丈夫と思いそのままにしていましたが、統一した方がいいでしょうか?
m.ts10806

2020/05/22 20:53

>idをecho表示させたところ最後の画像のidのみ出力されました。 これは「最後の画像をクリックしたとき」ですか?それとも「どの画像をクリックしても」ですか? まぁおおよそ分かるんですが・・ 実装は統一すべきです。実装のブレはそのままバグに繋がります。
guest

回答1

0

ベストアンサー

ループでずっと$_SESSION["id"]が上書きされ続けているので最後のIDのみが残っている状態です。
リンクでGETパラメータを付与するなどしてください。

php

1<a href="../post/php/loadillust.php?id='.htmlspecialchars($row["id"], ENT_QUOTES, 'UTF-8').'"> 2

php

1$id = filter_input(INPUT_GET,"id");

投稿2020/05/22 20:57

m.ts10806

総合スコア80850

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

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

comgi

2020/05/22 21:30

$stmt = $mysqli->prepare("SELECT * FROM images where userId = ?"); if($stmt->execute(array($userId))){ while($row = $stmt->fetch()){ $url = "../../contents/illust/" . $row["url"]; echo '<a href="../post/php/loadillust.php"><img src="'.$url.'" alt="'.$row['title'].'" /></a>'; echo '<a href="../post/php/loadillust.php?id='.htmlspecialchars($row["id"], ENT_QUOTES, 'UTF-8').'">'; } } ///// $id = filter_input(INPUT_GET,"id"); $stmt = $mysqli->prepare("SELECT * FROM images WHERE id = ?"); if($stmt->execute(array($id))){ while($row = $stmt->fetch()){ $url = $row['url']; $type = $row["type"]; $img = file_get_contents('../../../contents/illust/' . $url); } } この記述で合ってますでしょうか?表示ページに何も表示されず真っ白なままです。idのみの表示も同じ状態です。 もしよろしければ、原因を教えて頂けませんでしょうか。
m.ts10806

2020/05/22 21:56

ロジックを1つずつ確認してください。 executeの結果、file_get_contentsの結果。 最後の if($type == "jpeg"){  までそのままなら何かしら出るはずですが、 エラー表示はONにして確認しましたか? https://qiita.com/shotets/items/3c95aef631b2c5eadae5
comgi

2020/05/22 21:58

すみません コードをいろいろといじってる内に成功しました。 とても助かりました、ありがとうございます!
m.ts10806

2020/05/22 22:00

最終的にどうなったか残してください。 書いた通りにしか動かないので「なぜか動いた」という状態は次のバグを生むことになります。
comgi

2020/05/22 22:09

$url = "../../contents/illust/" . $row["url"]; echo '<a href="../post/php/loadillust.php?id='.htmlspecialchars($row["id"], ENT_QUOTES, 'UTF-8').'">'; echo '<img src="'.$url.'" alt="'.$row['title'].'" />'; imgの出力の場所と方法を変更しました。 大丈夫でしょうか?
m.ts10806

2020/05/22 22:16

大丈夫かどうかはこちらは知らないです。 なぜなら要件次第だから。仕様は作る人が決めるものだから。
comgi

2020/05/22 22:26

そうですよね、、、 何から何まですみませんありがとうございます。
m.ts10806

2020/05/22 23:15 編集

いえ、こちらは単に「やりたいこと」に対して「やったこと」「起きている現象(できてないこと)」を見て、「どうしたら起きている現象がやりたいことに近づけるか」をアドバイスしているだけなので。 内容が具体的であればあるほど答えやすく、抽象的であればあるほど答えにくい、それだけです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問