PHPエラーについて

このQ&Aのポイント
  • ファイルをテンプレ&mysqlを使って自動生成するスクリプトを書いている中で、特定の行でエラーが発生しています。
  • エラーメッセージは「Fatal error: Call to a member function append() on a non-object in /home/stylenavi/www/httpdocs/test/file_make2.php on line 52」と表示されます。
  • エラーの発生原因を特定することができず、解決方法についてわからない状況です。どなたか助けていただけないでしょうか。
回答を見る
  • ベストアンサー

PHP エラーについて

ファイルをテンプレ&mysqlを使って自動生成するスクリプトを書いているのですが 以下のエラーが出ます。 Fatal error: Call to a member function append() on a non-object in /home/stylenavi/www/httpdocs/test/file_make2.php on line 52 while ($rb2 = mysql_fetch_array($rb)) で値はDBから取れているのですが、 それが次の行でエラーになる理由がわかりません。 どなたかお力ぞえ頂けないでしょうか。 よろしくお願いいたします。 ---------------------------------------------------------------------- <?PHP require_once("Smarty.class.php"); $s=mysql_connect("hogehoge.db.sakura.ne.jp","hogehoge","hoge") or die("失敗しました"); mysql_select_db("hogehoge",$s); $sql = "SET NAMES utf8"; $result = mysql_query($sql); $template = "../templates/itiran_page_test.tpl"; $sakuin = "sakuin1"; //フッターリンク(1)のキー定義 $h_link = "sakuin1"; //下層ページファイル名一覧の取得 $ra=mysql_query("select * from sougou_db where key5 LIKE 'sakuin1'"); while ($ra2 = mysql_fetch_array($ra)) { $ra3 = array($ra2[filename]); foreach( $ra3 as $value ){ //テンプレートの読み込み $contents = file_get_contents( $template); // 作成するファイル名の指定 $file_name = $dir.$value; //ページ要素の取得とテンプレートへの挿入 $rb=mysql_query("select * from sougou_db where (filename = '$value')"); while ($rb2 = mysql_fetch_array($rb)) { //echo $rb2[title]; //⇒ちゃんと表示できます            $objSmarty->append('data2',$rb2); } //索引一覧の取得とテンプレートへの挿入 $rc=mysql_query("select * from sougou_db where (key5 = '$sakuin') "); while ($rc2 = mysql_fetch_array($rc)) { //$objSmarty->append('data3',$rc2); //echo $rc2[title]; } //フッターリンクの取得とテンプレートへの挿入 $rd=mysql_query("select * from sougou_db where (key5 = '$h_link') "); while ($rd2 = mysql_fetch_array($rd)) { //$objSmarty->append('data4',$rd2); //echo $rd2[title]; } if( !file_exists($file_name) ){ touch( $file_name ); chmod( $file_name, 0666 ); echo('Info - ファイル作成完了。 file name:['.$file_name.']'); $handle = fopen( $file_name, 'w'); fwrite( $handle, $contents); fclose( $handle ); }else{ // すでにファイルが存在する為エラーとする echo('Warning - ファイルが存在しています。 file name:['.$file_name.']'); exit(); } } } ?>

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
noname#212058
noname#212058
回答No.1

$objSmarty 変数はどこでセットしているのですか? 『 $objSmarty 変数が null だ!』 と言ってエラーになっているような気がするのですが。

kensei_0510
質問者

お礼

ありがとうございます!! まさにそのとおりでした・・・

関連するQ&A

  • PHP Pagerで行き詰っています。

    PHP Pagerの使用で、下記2点で行き詰っています。 (1)1ページ内に10件までしか表示させたくないのに、全件表示される (2)DBからの取得データ数をtotalItemsに格納し、それをもとにナビを作成したい ソースは以下です。 どうかご助力いただけますと幸いです。 よろしくお願いいたします。 ------------------------------------------------------------ hogehoge.php ------------------------------------------------------------ <?php require_once("Smarty.class.php"); require_once("../PHP/PEAR/Pager/Pager.php"); $objSmarty=& new Smarty(); $s=mysql_connect("hoge","hoge","hoge") or die("失敗しました"); mysql_select_db("hoge",$s); $sql = "SET NAMES utf8"; $result = mysql_query($sql); $ra=mysql_query("select * from stylenavi_1 where url4 LIKE '/01.php'and url3 like '/syokuji'"); $rb=mysql_query("select * from stylenavi_1 where url3 LIKE '/syokuji'");//この行で取得したデータ数をitemDataに格納したい。 $rc=mysql_query("select * from stylenavi_1 where url1 LIKE '/diethow'"); while ($ra2 = mysql_fetch_array($ra)) { $objSmarty->append('data1',$ra2); } while ($rb2 = mysql_fetch_array($rb)) { $objSmarty->append('data2',$rb2); } while ($rc2 = mysql_fetch_array($rc)) { $objSmarty->append('data3',$rc2); } $itemData = $hogehoge;//どうやって反映させよう・・ $perPage = 10; $params = array( "itemData" => $itemData, "perPage" => $perPage, "delta" =>5, "mode" =>"Jumping" ); $pager =& Pager::factory($params); $link = $pager -> getLinks(); $currentPageID = $pager -> getCurrentPageID(); $objSmarty->template_dir="../templates/"; $objSmarty->compile_dir="../templates_c/"; $objSmarty->assign('pageNavi', $link['all']); $objSmarty->assign('currentPage', $currentPageID); mysql_close($s); $objSmarty->display("itiran_page.tpl"); ?> ------------------------------------------------------------ hoge.tpl ------------------------------------------------------------ {section name=diet loop=$data2} //ここでPerPageで指定した数だけ繰り返したいのに全件表示される ◇<a href="{$data2[diet].url}">{$data2[diet].title}</a><br /> ダイエットの手軽さ:{$data2[diet].tegarusa}<br /> 危険性:{$data2[diet].kikensei} <br /><br /> {/section}

    • 締切済み
    • PHP
  • PHP MySQLでエラーがでてしまいます。

    PHP MySQLからデータを取得したいのですが、以下のエラーが出てしまい原因が分かりません。 詳しい方お願い致します。 <b>Warning</b>: json_encode() expects exactly 1 parameter, 2 given in <b>/home/users/2/***.**-********/web/****************/php/seupPharmacyData.php</b> on line <b>21</b><br /> エラーが出るコードは以下になります。 <?php include "db.php"; $sql = "SELECT * FROM user_data"; $query = mysql_query($sql, $db) or die("クエリの送信に失敗しました。<br />SQL:".$sql); $result= array(); while ($row = mysql_fetch_object($query)) { $result[] = array( 'name1' => $row->name1, 'name2' => $row->name2, 'name3' => $row->name3, 'id' => $row->id, ); } //jsonとして出力 header('Content-type:application/json; charset=UTF-8'); echo json_encode($result,JSON_UNESCAPED_UNICODE); ?>

    • ベストアンサー
    • PHP
  • MYSQLからCSVへの書き込み方法

    MYSQLからCSVへの書き込み方法で質問があります。 下記のコードを記載しましたが DBのデータ件数分の改行しか出力されませんでした。 ブラウザ上でecho動作させた際には、 echo "<p>CSVファイルにセットされるデータ:".$string; でしっかりデータが設定されていました 何が悪いですか? ////////////////////////////////////////////////////////////////// // DBからCSVファイル書き込み(全件新規) // $file_name:csvファイル名 ////////////////////////////////////////////////////////////////// function DB_csvSet($file_name, $dbhost=DBHOST, $dbuser=DBUSER, $dbpass=DBPASS, $dbname=DBNAME) { print "DB_csvSet start"; // MySQL 接続 if (!($cn = mysql_connect($dbhost, $dbuser, $dbpass))) { die("DB_csvSet Error: mysql_connect"); } //MySQLのクライアントの文字コードをsjisに設定 mysql_query("SET NAMES sjis") or die("can not SET NAMES sjis"); // MySQL DB 選択 if (!(mysql_select_db($dbname))) { die("DB_csvSet Error: mysql_select_db"); } // MySQL 問い合わせ $sql = sprintf("select * from %s", TABLE_NAME); if (!($rs = mysql_query($sql))) { die("DB_csvSet Error: mysql_query"); } // ファイルを新規モードで開く $file = fopen($file_name, "w") or die("OPENエラー $file_name"); // ファイルをロックする flock($file, LOCK_EX); // MySQL レコード参照 while ($item = mysql_fetch_array($rs)) { printf("id=%s ", $item[ITEM_ID]); printf("name=%s ", $item[ITEM_NAME]); printf("point=%s<BR> ", $item[ITEM_POINT]); // 3つの変数から配列を作成する $array = compact($item[ITEM_ID], $item[ITEM_NAME], $item[ITEM_POINT]); // $array = compact("id","name","point"); // 配列のデータをカンマで区切って結合する $string = implode(",", $array); // 結合された文字列を表示する echo "<p>CSVファイルにセットされるデータ:".$string; // データを書き込む fputs($file, $string."\n"); } // ロックを解除する flock($file, LOCK_UN); // ファイルを閉じる fclose($file); // MySQL 切断 mysql_close($cn); // 正常終了 print "正常終了"; }

    • 締切済み
    • PHP
  • php

    while($row = mysql_fetch_array($res,MYSQL_NUM)) { echo $row[1]."\n"; ここの文字コードを調べたいのですがどう書いたらいいでしょうか? 又参考になるサイトがありましたらお願いします

  • phpの記述につきまして

    phpの記述につきまして データベースから <? echo $file_name; ?> で $file_name に ****.php の値が呼び出されるのですが include の記述で <?php include("<? echo $file_name; ?>"); ?> と言う風に 利用表示するとエラーになってしまします。  include("ここにDBからのPHPファイル名を呼び出したい!") とするには どのように記述すれば宜しいでしょうか? ご教授いただければ幸いに存じます。

    • ベストアンサー
    • PHP
  • phpのwhileで希望通りの動作ができない

    以下のようにしてみたのですが「データはありません」という文章が何度も(何行も)表示されてしまいました。 while($test = mysql_fetch_array($sql, MYSQL_ASSOC)){ $name = $test[name]; if($cnt > 0){ echo "データはありません"; echo '<br>'; } elseif(empty($name)){ echo "データはありません"; echo '<br>'; } else{ $name = $name.'<br>'; } } whileで繰り返した結果、すべての$nameが「$cnt > 0」か「empty」の場合だけ、「データはありません」と一回だけ表示したいのですが、どのようにしたらいいでしょうか?

    • ベストアンサー
    • PHP
  • functionの外にある{$myrow["url"]}をfunction内で使いたいです

    <?php $box_template .=<<<eof <a href="{$myrow["url"]}" rel="nofollow"> <img src="{$myrow["image1"]}" width="157" /><img src="{$myrow["image2"]}" width="100" /> </a> eof; mysql_db_read($mysql_query,$box_template); function mysql_db_read($mysql_query,$box_template){ $db = mysql_connect("*******","****","****"); mysql_select_db("******",$db); $result = mysql_query($mysql_query,$db); if ($myrow = mysql_fetch_array($result)) { do { $myrow["url"] = htmlspecialchars($myrow["url"]); $myrow["image1"] = htmlspecialchars($myrow["image1"]); $myrow["image2"] = htmlspecialchars($myrow["image2"]); print $box_template; } while ($myrow = mysql_fetch_array($result)); } else { echo "error"; } }//function ?> $box_templateの{$myrow["url"]}などにmysqlから取ってきたデータを適用したいのですが、{$myrow["url"]}に値が入ってくれません。 どうすればいいのでしょうか。 教えてください。よろしくお願いします。m(_ _)m

    • 締切済み
    • PHP
  • mysql結果を使ってもう1度mysql検索

    DB(mysql)とプログラムが以下のようにあります。 <?php /////////////////テーブルAを検索//////////////////////// $db = mysql_connect("***","***","***"); mysql_select_db("*****",$db); $result = mysql_query("select * from tableA where day = 0601",$db); if ($myrow = mysql_fetch_array($result)) { do { printf("<font color=\"blue\">$myrow[name]$myrow[day]</font><br>"); } while ($myrow = mysql_fetch_array($result)); } else { echo ""; } ////////結果を使ってテーブルAをもう1度検索///////////// $db = mysql_connect("***","***","***"); mysql_select_db("*****",$db); $result = mysql_query("select * from tableA where sports = '$myrow[day]'",$db); if ($myrow = mysql_fetch_array($result)) { do { printf("<font color=\"green\">$myrow[mise]$myrow[name]</font><br>"); } while ($myrow = mysql_fetch_array($result)); } else { echo ""; } ?> テーブルA name | day | sports | A君 | 0511 | バスケット | A君 | 0601 | サッカー | B君 | 0601 | テニス | B君 | 0503 | 水泳 | C君 | 0602 | 競歩 | C君 | 0512 | 乗馬 | dayが0601のA君とB君のsports全部を結果として表示したいのですが、エラーが出たりして思ったようにはできませんでした。 $resultなどが重複してしまうらしいのです。 A君 「バスケット・サッカー」 B君 「テニス・水泳」 と、するにはどうすればいいのでしょうか?よろしくお願いしますm(_ _)m

    • 締切済み
    • PHP
  • PHPでMySQLのデータを検索したい

    お世話になります。 PHPでMySQLのデータを検索したいと思い、 以下のようにしてみたのですがうまく表示されません。 -- $name = $_POST["name"]; $link = mysql_connect('localhost', '', ''); $db_selected = mysql_select_db('', $link); mysql_set_charset('utf8'); $sql = "SELECT * FROM search WHERE". $name; $result = mysql_query($sql); while($row = mysql_fetch_array($name)) { print $row['name']; } $close_flag = mysql_close($link); -- どう改善すればいいのでしょうか? 初心者の為、少々お見苦しい点があるかと思いますが どうぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • 構文の省略について

    下記をもっと省略(短い構文で)して書きたいのですが、どのようなやり方があるでしょうか。 testというテーブルから指定したidのnameを取り出して並べたいだけなのですが、このような長々としたものしか思い浮かびませんでした。 <?php $n1 = 1; $n2 = 2; $n3 = 3; $rs1 = mysql_query("select * from test where id = '$n1';",$conn); $rec1 = mysql_fetch_array($rs1, MYSQL_ASSOC); echo $rec1['name']; echo <br>; $rs2 = mysql_query("select * from test where id = '$n2';"); $rec2 = mysql_fetch_array($rs2, MYSQL_ASSOC); echo $rec2['name']; echo <br>; $rs3 = mysql_query("select * from test where id = '$n3';"); $rec3 = mysql_fetch_array($rs3, MYSQL_ASSOC); echo $rec3['name']; mysql_free_result($rs1); mysql_free_result($rs2); mysql_free_result($rs3); mysql_close($conn); ?>

    • ベストアンサー
    • PHP