- ベストアンサー
【解決策求む】PHPを使ってファイル中の文字列をDBで取得した値に置換する方法
- PHPの学習中に発生した問題です。
- ファイル中の特定の文字列をDBで取得した値に置換したいが、正しい結果が得られません。
- 解決策をご教示いただければ幸いです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
なんどもスイマセン。 こんな感じのがいいかも。 while( ... ) { $buffer = ""; //初期化 $string = fgets($file); foreach( ... ) { $buffer .= ",{$value}"; } $html = str_replace("AAAA", $buffer, $string); echo $html ; } ほんとに何度もすいません。 つい真剣になってしまいました。
その他の回答 (2)
- simpletaste
- ベストアンサー率33% (7/21)
ごめんなさい、2は間違ってますね。 自信満々の口調ですいません。 別に$stringは上書きしてないのですから、大丈夫でした。 ただ$bufferを毎回上書きしているので、そこは問題ですね。 こんな感じではどうでしょう。 while( ... ) { $buffer = ""; //初期化 foreach( ... ) { $buffer .= str_replace("AAAA", $value, $string); } echo $buffer; }
- simpletaste
- ベストアンサー率33% (7/21)
ざっと見たところ、複数の原因がありそうです。 1.その肝心のhtmlファイルの読み込みが出来てない気がします。 $file= fopen( "ファイルのパス", "r" ); が抜けていませんか。 2.このforeachはうまく動いてますか? ↓ foreach($row as $key => $value) { $buffer = str_replace("AAAA", $value, $string); } ↑ なぜなら、1回目のsrt_replaceで$string中のAAAAがなくなってしまうじゃないですか。 2~5回目の時にはもう、AAAAが存在しないのでは? 3.DBから値はうまく取れているのでしょうか。 mysql_fetch_arrayのマニュアルを見てみてください。 http://jp.php.net/mysql_fetch_array $row = mysql_fetch_array($res, MYSQL_ASSOC); ではなくて while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) { //処理 } の様にしないと、一列分の値しかとれなさそうですよね。 この部分を修正すると foreach($row as $key => $value) の部分も修正しなくてはいけないと思います。 これらの原因を踏まえて、 もう一度設計しなおしてみると良いと思います。 あとは、変数にちゃんと値が入っているかをガンガンチェックする事が出来たら、結構1人で解決できますよ。 echo $hensuu;//配列じゃないとき var_dump($hairetu);//配列のとき 知ってたらごめんなさい。
お礼
ご丁寧に回答いただき、ありがとうございます。 大変、参考になりました。 以下のソースにて無事、動作しました。 ------------------------------------------------- $sv = "localhost"; $dbname = "database"; $user = "********"; $pass = "********"; $conn = mysql_connect($sv, $user, $pass) or die("接続エラー"); mysql_select_db($dbname) or die("接続エラー"); $sql = "SELECT * FROM link_tb ORDER BY id DESC LIMIT 5;"; $res = mysql_query($sql, $conn) or die("データ取得エラー"); while($row = mysql_fetch_array($res, MYSQL_ASSOC)) { $replace .= $row["date"]. $row["name"]; } $file = fopen("test.html", "r") or die ("ファイルオープンエラー"); while(!feof($file)) { $string = fgets($file); $buffer = str_replace("AAAA", $replace, $string); echo $buffer; } fclose($file); mysql_close($conn); ------------------------------------------------- 結局、foreachを使わずして完成してしまいました... 本当にありがとうございました。