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

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

ただいまの
回答率

90.01%

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,049

chokochokochok

score 36

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というのは表示されている表示されているページ名のところです。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

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

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

/* (抜粋)*/

 //データ検索 
  $stmt = $pdo->prepare('SELECT * FROM テーブル名 WHERE id = :id'); 
  $stmt->bindValue(':id', $_GET['id'], PDO::PARAM_INT); 
  $stmt->execute();

  // common.php で $smarty を宣言しているので、新たに宣言する必要はないですね。
  $view = new Smarty(); 

  // ↓この時点では $data に何も値が入っていません。
  $view->assign('row',$data); 

  // ↓ この処理でDBから取得した値が(1件) $data に入ります。
  $data = $stmt->fetch(PDO::FETCH_ASSOC); 
  // $smarty->assign('row', $data);


// common.php
// ↓ ini_set "display_errors" は 1 か 0 で設定する
//   (On が 1 で定数設定されているなら気にしなくて良いです)
ini_set("display_errors", On);

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

//データ検索 
  $stmt = $pdo->prepare('SELECT * FROM テーブル名 WHERE id = :id'); 
  $stmt->bindValue(':id', $_GET['id'], PDO::PARAM_INT); 
  $stmt->execute();

  $data = $stmt->fetch(PDO::FETCH_ASSOC); 
  $smarty->assign('row', $data);

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

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

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

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

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

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/01/26 23:38 編集

    > ちなみに var_dump($data); を入れると上に表示され、Notice: Undefined variable: data in/ファイル名/と出ました。

    うーん、DBから値が取得できていないみたいですね。(ID に当たるデータがないのかもしれません)
    MySQLに直接操作できるのであれば、該当SQL (+ id) でデータが取得できるか確認してみてください。
    もしくは、確実に取得できるIDをSQLのパラメータにセットして確認みてください。

    キャンセル

  • 2016/01/31 13:40

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

    キャンセル

  • 2016/02/01 09:43

    おぉぉ、無事ご解決できたようで何よりですー。

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

    キャンセル

0

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

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

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

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

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

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

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/01/25 21:32

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

    キャンセル

  • 2016/01/26 09:08 編集

    追加でコードを記載していただき、ありがとうございました。
    あと、(おせっかいですが)DB 接続先の host 名も隠しておいたほうが良いですよ。

    続きはここ(コメント)ではなく、新しく回答し直しますね。

    キャンセル

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

  • ただいまの回答率 90.01%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る