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

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

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

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

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

3326閲覧

php リスト一覧から引っ張ってきた値がページに表示されず困っています。

chokochokochok

総合スコア46

PHP

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

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2016/01/24 13:20

編集2016/01/26 12:37

Smartyの勉強をしている者です。
リスト一覧ページから引っ張ってきた値が全て上のurl部分に表示されてしまい、本来出したいところに来ておらず困っております。
<HTML側>

<h2>記事詳細</h2> <br><br> <p>投稿日時:{$row.insert_time}</p> <br> <h2>ID:{$row.id}</h2>

値は持ってこれてるのでphp側が問題ではないと思うのですが、htmlで上記の記述では間違いなのでしょうか?urlのところでなくページに表示させるにはどのようにを記述したら良いのでしょうか?前に同じようにリストから情報を持ってきたときは問題なかったので今回の場合はなぜ違うところに反映されてしまうのかわからないのでどなたか教えてください。

php側

<?php require_once('common.php'); try { //db接続 $pdo = new PDO(PDO_DSN, DB_USERNAME, DB_PASSWORD); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //データ検索 $stmt = $pdo->prepare('SELECT * FROM テーブル名 WHERE id = :id'); $stmt->bindValue(':id', $_GET['id'], PDO::PARAM_INT); $stmt->execute(); $view = new Smarty(); $view->assign('row',$data); $data = $stmt->fetch(PDO::FETCH_ASSOC); // $smarty->assign('row', $data); } catch (PDOException $e) { echo "例外処理","<br>"; echo $e->getMessage(); die(); } <common.php> <?php ini_set("display_errors", On); error_reporting(E_ALL); require './libs/Smarty.class.php'; $smarty = new Smarty(); define('DB_DATABASE',指定の場所 ); define('DB_USERNAME', 指定の名前); define('DB_PASSWORD', パスワード); define('PDO_DSN', 'mysql:dbname='.DB_DATABASE.';host=ホスト名'); ?>

です。urlというのは表示されている表示されているページ名のところです。

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

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

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

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

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

guest

回答2

0

ベストアンサー

あらら、変な変数名で説明して申し訳ありませんでした。。。

まずは、既存のコードの添削をと。

PHP

1/* (抜粋)*/ 2 3 //データ検索 4 $stmt = $pdo->prepare('SELECT * FROM テーブル名 WHERE id = :id'); 5 $stmt->bindValue(':id', $_GET['id'], PDO::PARAM_INT); 6 $stmt->execute(); 7 8 // common.php で $smarty を宣言しているので、新たに宣言する必要はないですね。 9 $view = new Smarty(); 10 11 // ↓この時点では $data に何も値が入っていません。 12 $view->assign('row',$data); 13 14 // ↓ この処理でDBから取得した値が(1件) $data に入ります。 15 $data = $stmt->fetch(PDO::FETCH_ASSOC); 16 // $smarty->assign('row', $data); 17 18 19// common.php 20// ↓ ini_set "display_errors" は 1 か 0 で設定する 21// (On が 1 で定数設定されているなら気にしなくて良いです) 22ini_set("display_errors", On); 23

この部分は下記のようになります。
(おそらく元のコードに戻ったと思いますが・・・(^^;)

PHP

1 //データ検索 2 $stmt = $pdo->prepare('SELECT * FROM テーブル名 WHERE id = :id'); 3 $stmt->bindValue(':id', $_GET['id'], PDO::PARAM_INT); 4 $stmt->execute(); 5 6 $data = $stmt->fetch(PDO::FETCH_ASSOC); 7 $smarty->assign('row', $data); 8

urlのところはhttpから始まるページ名のところです。

下記の現象が発生しているということでよいでしょうか?(ごめんなさい、理解が遅くて・・・)

  • ブラウザのアドレスバーに値 (id="xxx") が表示されている(DBの検索結果は表示されない)
  • 画面は真っ白(HTML内容が正しく返却されていない)

もしそうであるなら、下記2点を疑ってみてください。

1. Smarty を利用し HTML 出力する処理は記載されておりますか?

確認方法:
『$smarty->assign("row", $data);』 処理の後に、Smarty で画面に出力する処理を記載されておりますか?

PHP

1$smarty->display("テンプレートファイル名");

2. PHPのエラーが発生していないでしょうか。

確認方法:
Smarty にセットした値 {$row.id}、{$row.insert_time} 以外は、正しく HTML 出力されておりますか。
また、ini_set("display_errors", 1); とした場合、PHP のエラー内容が画面上部に表示されていないでしょうか。

投稿2016/01/26 00:50

usk

総合スコア397

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

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

chokochokochok

2016/01/26 12:46

とても分かりやすく説明をしてくださりありがとうございます! 私も説明不足と知識不足で申し訳ございません。。 そうです!ブラウザのアドレスバーのところにid="111"と引っ張ってきた値が全部そこに入ってるんです! それ以外のhtmlはちゃんと画面に表示されております! $smarty->assign("row", $data)のあとに $smarty->display("テンプレートファイル名");となっております。 ◆また、ini_set("display_errors", 1); とした場合、PHP のエラー内容が画面上部に表示されていないでしょうか。 ↑全くその通りです>< ◆あと、(おせっかいですが)DB 接続先の host 名も隠しておいたほうが良いですよ。 ↑ご指摘ありがとうございます!><
usk

2016/01/26 13:21 編集

> ブラウザのアドレスバーのところにid="111"と引っ張ってきた値が全部そこに入ってるんです! form から GET メソッドで送信した場合(もしくはURLに ?id=xxxx)のような形でリクエストをかけた場合、ブラウザのアドレスバーにパラメーターが表示されるのは正常な処理ですね。 > ◆また、ini_set("display_errors", 1); とした場合、PHP のエラー内容が画面上部に > 表示されていないでしょうか。 > ↑全くその通りです>< ① あ、エラーが表示されているなら、エラー内容を明記していただけると回答がしやすくなります。 エラーが表示されていないなら、DBからの戻り値はだたしく取得できるのか、今一度ご確認ください。 ($smarty->assign('row', $data); の直前で var_dump($data); と記述し、画面上に $data の内容が表示されるかご確認ください) ② これでもダメ($data内容が正しく表示されている)であれば、'row' 以外に適当な配列を適当にセットして、HTML側で出力できるか確認してください。 例: 1.$smarty->assign('test', array('aaa' => 'AAA')); と PHP側で記載 2.{$test.aaa} とHTML側に記述 → 画面上に "AAA" と表示されるかどうか ① ② にて正しく動作するのであれば、ちょとお手上げっぽく感じます。。。(ごめんなさい) 後は、テンプレートのキャッシュが悪さしている可能性もあります。 $smarty->clear_all_cache(); を $smarty = new Smarty(); 直後あたりに入れてみて、再度ご確認してみてください。
chokochokochok

2016/01/26 14:06

①今までエラーが画面の上に出てたんですが、画面に出るようになりました。 内容はNotice: Undefined index: row in/ファイル名/なんですが、何もコードを打っていないlineがエラーで指定されました>< ちなみに var_dump($data); を入れると上に表示され、Notice: Undefined variable: data in/ファイル名/と出ました。 ②画面上にAAAが表示されました! キャッシュを入れてみたところ Fatal error: Uncaught --> Smarty: Call of unknown method 'clear_all_cache'. <-- thrown in/ファイル名//libs/sysplugins/smarty_internal_templatebase.php on line 554とでました。 うーん難しいですね><でもここまでとても親切に回答してくださり誠にありがとうございます!自分でももう少し勉強してみようと思います☆
usk

2016/01/26 14:44 編集

> ちなみに var_dump($data); を入れると上に表示され、Notice: Undefined variable: data in/ファイル名/と出ました。 うーん、DBから値が取得できていないみたいですね。(ID に当たるデータがないのかもしれません) MySQLに直接操作できるのであれば、該当SQL (+ id) でデータが取得できるか確認してみてください。 もしくは、確実に取得できるIDをSQLのパラメータにセットして確認みてください。
chokochokochok

2016/01/31 04:40

返事が遅くなってしまい大変申し訳ございません。あれから見直しをしてみたところ、いろいろいじっている内に変なソースになってしまっており、凡ミスがいくつか見つかり、それを直したらできました^^直接の原因かわかりませんが、fitchがfitcallになっていたり、$stmt->execute();がコメントアウトしてあったりしました。 またアドレスバーに値が入ってるのは<a href=で飛ばしているのがidではなくtitleだったのでtitleがそこに入っているだけでした。  私の分かりづらい説明にお付き合いいただき誠に感謝しております^^ あとはもう一つの質問させていただきましたファイルのアップロードが残っているのでそちらを頑張りたいと思います。(そちらの回答もいただきありがとうございます^^)
usk

2016/02/01 00:43

おぉぉ、無事ご解決できたようで何よりですー。 もう一方のお悩みも無事解決できるようにお祈りしておきますw (^人^) (というか、同一の方だと気付いてなかったです・・・)
guest

0

htmlで上記の記述では間違いなのでしょうか?

Smartyタグの記述方法は特に問題が無いと思います。
(PHP側でデリミタを変更している場合は除く)

ちなみに、PHP側ではどの様な値を assign したのでしょうか?
下記のような値が assign されているのであれば、質問者様が表記されたコードでは正しく表示されるはずです。

PHP

1$data = array( 2 'id' => 1, 3 'insert_time' => 'aaaa', 4); 5$view = new Smarty(); 6$view->assign('row', $data);

なお、PHP 側で設定した値を確認したい場合、下記のような形で Smarty のコードを記載するとわかります。
あまりテンプレート側でPHPのコードを記載することは良くないので、あくまでデバッグ目的で利用してみてください。

HTML

1{php} 2// assign した内容は $this->_tpl_vars に保存されている 3var_dump($this->_tpl_vars); 4{/php}

※ 参考
http://yuubiseiharukana.blog.shinobi.jp/Entry/145/
http://ameblo.jp/takuya/entry-10010039979.html

urlのところでなくページに表示させるにはどのようにを記述したら良いのでしょうか?

質問者様の意図が分かりませんでした。
他の方のご回答をご期待頂くか、質問内容をもう少し明確にしていただけたらと思います。

投稿2016/01/25 00:55

編集2016/01/25 01:06
usk

総合スコア397

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

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

chokochokochok

2016/01/25 12:32

回答ありがとうございます。php側の方も載せました。urlのところはhttpから始まるページ名のところです。回答者さまのように記述した際に、エラーになって表示されました。そして今だにurlのところに値がきている状態です。。
usk

2016/01/26 00:17 編集

追加でコードを記載していただき、ありがとうございました。 あと、(おせっかいですが)DB 接続先の host 名も隠しておいたほうが良いですよ。 続きはここ(コメント)ではなく、新しく回答し直しますね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問