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

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

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

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

Q&A

0回答

329閲覧

RSSをデータベースに保存して取得したい

homepage-site

総合スコア28

PDO

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

0グッド

0クリップ

投稿2022/01/19 15:45

前提・実現したいこと

コードを修正するうちにデータベースに格納するコードとRSSを表示するコードが異なっていきわからなくなりました。限界まで考えたコードなんですがsimplexml_load_fileなしでデータベースから関数を取り出して表示はできるのでしょうか?
foreach ($stmt as $わからない) { でデータベースの値の取得は可能なのでしょうか?
些細なことでもいいのでアドバイスよろしくお願いいたします。

該当のソースコード

1.//まずデータベースに接続する <?php try { $dsn = 'mysql:dbname=hlxclitx_wp1;host=localhost'; $user = 'hlxclitx_wp1'; $password = 'E.HrypHWxNmltXgC5eS26'; $dbh = new PDO($dsn,$user,$password); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//エラーが発生した時に、例外を投げる echo "データベースへの接続が出来ました"; }catch (PDOException $e) { echo $e->getMessage();// err時はメッセージを表示 exit; } 2.//RSSをまとめる $url1 = [ 'http://blog.livedoor.jp/dqnplus/index.rdf', 'http://alfalfalfa.com/index.rdf', 'http://himasoku.com/index.rdf',]; 3.// insertの準備 テーブルに格納する準備 $stmt = $dbh->prepare('insert into rss_feed (title, link, date) values (?, ?, ?)'); //SQL文の中に変動値が入る場合、以下のようにPHPの変数を直接連結してしまうと「SQLインジェクション攻撃」により悪意のあるSQLが実行されてしまう可能性があります。 $sql->execute([$title, $link, $date]);//DB用のエスケープ処理をPDOに丸投げしたいから 4.// テーブルのデータを解析してそこから表示するURLはテーブルに保存するとき以外使用禁止 foreach ($stmt as $わからない) { $count = 0; // 8件で終了 if (++$count > 8) break; 5.// 取得した記事データの表示 if ($count === 1) print('<ul>'); printf('<li class="sitelink"><a href="%s">%s</a></li>', $link, $title); printf('<li class="sitelink"><a href="%s">site</a></li>', $link); printf('<li class="sitedate">%s</li>', $date); printf('<li class="sitethumb"><a href="%s"><img src="%s"></a></li>', $link, $thumbnail); print '</ul>';// $title, $link, $date,$thumb を表示 } if ($count) print('</ul>'); } ?>

データベースと紐ずいていないコード

<?php try { $dsn = 'mysql:dbname=hlxclitx_wp1;host=localhost'; $user = 'hlxclitx_wp1'; $password = 'E.HrypHWxNmltXgC5eS26'; $dbh = new PDO($dsn,$user,$password); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//エラーが発生した時に、例外を投げる echo "データベースへの接続が出来ました"; }catch (PDOException $e) { echo $e->getMessage();// err時はメッセージを表示 exit; } //RSSをまとめる $url1 = [ 'http://blog.livedoor.jp/dqnplus/index.rdf', 'http://alfalfalfa.com/index.rdf', 'http://himasoku.com/index.rdf',]; // insertの準備 $stmt = $dbh->prepare('insert into teblename (title, link, date) values (?, ?, ?)'); // URLのループ開始 テーブルに格納 foreach ($url1 as $url) { // simplexml_load_file()でRSSをパース解析してオブジェクトを取得します。 if (($rss = @simplexml_load_file($url)) === false) continue; $site_title = $rss->channel->title;// RSSタイトル取得 値の代入 自作関数 // サイトごとに表示するなら、サイトタイトル表示はこの位置 printf('<h2>%s</h2>', $site_title); $count = 0; // 個別記事のループ開始 RSSの取得が始まる foreach ($rss->item as $item) { if (++$count > 8) break; $title = $item->title;//タイトル取得 $link = $item->link;//リンクを取得 $dc = $item->children('http://purl.org/dc/elements/1.1/');//RSSの情報を取得 $thumb = $item->thumb->url;//画像を取得 //重複データを避けるため ・カウント対象件数が多い・インデックスが効かない・繰り返し実行することが多い $sql = "select exists ('select * from rss_feed')"; // 取得した記事データの表示 if ($count === 1) print('<ul>'); $date = date('Y-m-d H:i:s', strtotime($dc->date));//RSS日付け取得 printf('<li class="sitelink"><a href="%s">%s</a></li>', $link, $title); printf('<li class="sitelink"><a href="%s">site</a></li>', $link); printf('<li class="sitedate">%s</li>', $date); printf('<li class="sitethumb"><a href="%s"><img src="%s"></a></li>', $link, $thumbnail); print '</ul>';// $title, $link, $date,$thumb を表示 } if ($count) print('</ul>'); } ?>

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

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

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

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

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

AbeTakashi

2022/01/19 16:29

質問文とソースコードをさっと眺めてみましたが、このコードで何をしようとてるのか、何が分からなくて、何を聞きたいのか、全てがよく分かりません。回答者の人はこのソースコードだけ見せられても・・・という感じだと思いますし、アドバイスをといわれても・・・という感じです。 参考) https://teratail.com/help/question-tips 全部読まれることをオススメしますが「2. 質問をする前に自分で何がわからないのかを把握しましょう」「3. 正しく伝わる質問の仕方」を再度読まれることをオススメします。 ・分からないことは一つずつ聞いた方が良いです(今回の質問の場合は、foreachの使い方、データベースの使い方、RSSからデータを取得する方法・・・、そのどれが分からないのかが回答者には分からないため) ・エラーがでるところまでやってみて、エラーが出てそのエラーメッセージを見ても方法が分からないなら、エラーメッセージを含めて質問にした方がいいです。エラーは出なくても上手くいかないなら、上手くいかない状況と、期待する状態をそれぞれ合わせて記載しましょう。それであれば基本的に分からないところは一つになるので、回答者も答えやすいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問