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

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

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

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

PHP

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

Q&A

1回答

725閲覧

新しい順にデータの一部を九つ表示させ、リンク先にデータの詳細を表示したい

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

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

PHP

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

0グッド

0クリップ

投稿2019/08/19 07:36

編集2019/08/20 04:20

自分は現在、テーマ、結論、本文の3つを入力し投稿するとトップページに投稿されたデータの内テーマのみが新しい順に九つ並び、テーマをクリックするとリンク先でテーマ、結論、本文が見られる というサイトを作成中です。
投稿されたデータの内、テーマのみを新しい順に並べる為に下のようにコードを書いています

<?php $dsn = 'mysql:dbname=post;host=127.0.0.1;charset=utf8'; $user = 'xxx'; $password= 'xxx'; try{ $dbh = new PDO( $dsn, $user, $password ); }catch( PDOException $error ){ echo "接続失敗:".$error->getMessage(); die(); } $sql ="select * from toukou Where post_id = (Select Max(post_id) From toukou)"; $stmt = $dbh->query( $sql );?> <div class="top-wrapper top"> <div class="container"> <div class="heading"> <h1>新着</h1> </div> <div class="articles"> <div class="article"> <div class="article-left"> <a class="aa" href="detail.php?name=<?php foreach ($stmt->fetchAll() as $result){ echo " theme:". $result['theme']; } ?>"> <?php foreach ($stmt->fetchAll() as $result){ echo " theme:". $result['theme']; } ?> </a> </div> <div class="article-right"> </div> </div>

ここでは省いていますがと同じものが下に八つあります。
ですので一番目の<div class="article">....</div>では一番新しい投稿のthemeを、二番目の<div class="article">....</div>では二番目に新しい投稿のthemeを、、をいうように九つ目まで投稿のthemeを表示させたいです。
このように記述した際、themeがそもそも表示されず困っています。

<div class="article-left"> <a class="aa" href="detail.php?name=<?php foreach ($stmt->fetchAll() as $result){ echo " theme:". $result['theme']; } ?>">

この部分を削除すると一番新しいthemeのみが表示されるのですが、リンク先にクエリ情報が送信されません。
どうすればクエリ情報をdetail.phpに渡しつつ、新しい順にthemeを表示させることが出来るのでしょうか?
よろしくお願いします。

detailphp

1$post_id=$_GET['post_id']; 2$sql='select * from toukou where post_id=$post_id'; 3 4$stmt = $dbh->query( $sql ); 5 6foreach ($stmt as $row) { 7echo $row['theme'].':'.$row['conclusion'].':'.$row['body']; 8}

エラーメッセージ

Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\phptest\z.php on line 18

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

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

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

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

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

kei344

2019/08/19 07:44

detail.phpにどのようなパラメータを渡したいのでしょうか。
m.ts10806

2019/08/19 07:47

下記コードが何をしたいのか解説願います。 <a class="aa" href="detail.php?name=<?php foreach ($stmt->fetchAll() as $result){ echo " theme:". $result['theme']; } ?>">
退会済みユーザー

退会済みユーザー

2019/08/19 07:55

kei344さん detail.phpにはthemeを渡したいです。detail.phpでは渡されたthemeと同じ行にあるconclusionとbodyを出力したいと考えています。
退会済みユーザー

退会済みユーザー

2019/08/19 07:57

m.ts10806さん そのコードではdetail.phpに最新のデータの中のthemeとクエリ情報として送信したいと思い記述しました。
kei344

2019/08/19 07:57

ということは「リンク」は複数表示したいのでしょうか。
退会済みユーザー

退会済みユーザー

2019/08/19 08:09 編集

実際にはそうです 投稿には「テーマ」「結論」「本文」があり、テーマのみをトップページに新しい順に並べ、テーマをクリックするとその投稿のテーマ、結論、本文がみられる という風にしたいです。分かりづらくてすみません。
guest

回答1

0

post_idだけ渡してdetail.phpはそのpost_idでwhereをかけてデータ取得してください。

また、max(post_id)で取得している以上は1件しかデータが取得されないので、fetchAll()である必要はないと思います。
fetch()で充分ですね。

※構文エラーだけ取り除いた未検証コード

php

1$latest_data = $stmt->fetch(FETCH_ASSOC); 2?> 3<a class="aa" href="detail.php?post_id=<?=$latest_data['post_id']?>"> 4 <?=" theme:". $latest_data['theme']?> 5</a>

テーマのみをトップページに新しい順に並べ

であればこう

php

1$sql ="select post_id,theme from toukou order by post_id desc"; 2$stmt = $dbh->query( $sql ); 3foreach ($stmt->fetchAll() as $result){ 4 echo <<<EOF 5<a class="aa" href="detail.php?post_id={$result['post_id']}">theme:{$result['theme']}</a> 6EOF; 7}

投稿2019/08/19 07:59

編集2019/08/19 08:09
m.ts10806

総合スコア80765

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

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

退会済みユーザー

退会済みユーザー

2019/08/19 08:26

回答ありがとうございます。おっしゃったようにコードを変更すると、一番新しい投稿のテーマが表示されました。ありがとうございます。しかし2番目、3番目に新しい投稿のテーマが表示されていません。これらはどのようにすればいいのでしょうか?
m.ts10806

2019/08/19 08:28

その「2番目、3番目」というのがどういう関係のものなのか質問内容と今回のコメントからは判断できませんので、具体的に記載願います。
退会済みユーザー

退会済みユーザー

2019/08/19 11:34

情報の後出し後出しで分かりづらく申し訳ありません。この質問は一度締めさせていただき、新たに質問を開くことにします。すみません。
m.ts10806

2019/08/19 12:56

質問本文に追記してもらえれば良いのですが…
退会済みユーザー

退会済みユーザー

2019/08/19 13:12

自分のコメントで質問の内容がわかりにくくなってしまっていたので質問文自体を大幅に編集しました。質問の文章を大幅に編集したので、質問内のコードはm.ts10806さんが書いてくださったものではなく元のコードにしました。 お時間あれば目を通していただけると幸いです。
m.ts10806

2019/08/20 00:01

私の2つ目の回答のSQLの最後に limit 9 を足してください。 そしてdetail.phpでは回答にある通りpost_idを受け取り、そのpost_idをwhereにかけてください。 いずれもPHPから利用する前にMySQLに直接SQLを実行し、想定するデータが取得可能であることを確認してからPHPから利用してください。
退会済みユーザー

退会済みユーザー

2019/08/20 04:18

limit 9の追加で最新のデータが出力されました。ありがとうございます。 そのあとdetail.phpでpost_idを受け取り、そのpost_idをwhereにかけたのですがエラーが出てしまいました。エラーメッセージとコードは質問文に追記します。
退会済みユーザー

退会済みユーザー

2019/08/21 04:19

いろいろ見た結果、受け取ったpost_idを$post_idに挿入し、 $sql="select * from toukou where post_id=$post_id"; とすると $sqlが配列になっていない というようなエラーが出ます。post_id=1";とすると表示されました。where句には変数は使えないのでしょうか?
m.ts10806

2019/08/21 04:24

>sqlが配列になっていない というようなエラーが出ます エラーは原則そのまま提示してください。 https://teratail.com/help/question-tips#questionTips3-4-2 >抜粋: 表示されたエラーメッセージをそのままコピー&ペーストしましょう。自分でタイプしなおしたり、自分で解釈・要約しようとしてはいけません。 大事な部分が抜け落ちたり情報が違うものになってしまう可能性があるからです。 質問本文では $sql='select * from toukou where post_id=$post_id'; となっているようですけど、PHPの基本的なところですが、シングルクォーテーション内では変数展開されません。 https://www.php.net/manual/ja/language.types.string.php#language.types.string.syntax.single >抜粋: 注意: ダブルクォート 構文や heredoc 構文とは異なり、 変数と特殊文字のエスケープシーケンスは、 引用符 (シングルクオート) で括られた文字列にある場合には展開されません。 ここからはデバッグです。下記のようにして変数が「想定の情報になっているか」を確認してください。 $sql='select * from toukou where post_id=$post_id'; var_dump($sql);
m.ts10806

2019/08/21 04:28

いずれにしてもSQLに直接、入力値を突っ込むとSQLインジェクションの脆弱性があります。 PDO利用でしたら prepare→bindValue→executeのながれを利用しましょう。 参考記事: https://qiita.com/mpyw/items/b00b72c5c95aac573b71#select--from-users-where-id--id-%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E5%A4%89%E6%95%B0%E5%B1%95%E9%96%8B%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6sql%E6%96%87%E3%82%92%E7%B5%84%E3%81%BF%E7%AB%8B%E3%81%A6%E3%81%A6%E3%81%84%E3%82%8B
m.ts10806

2019/08/21 06:53

ここで退会ってどういうこと。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問