HTML phpファイルからHTMLの書き出しについての質問

このQ&Aのポイント
  • phpファイルからHTMLの書き出しについて質問です。mysqlから取り出したデータを処理するためのphpのwhile文があるため、うまくいきません。phpがある場合、どうすればうまくいきますか?
  • PHP Version 5.2.5でファイルロックを使用してHTMLの書き出しを行っています。phpのwhile文があるため処理がうまくいきません。phpがある場合の解決方法を教えてください。
  • HTMLの書き出しについての質問です。phpのwhile文があるため、mysqlから取り出したデータをうまく処理できません。どのようにすればうまくいくのでしょうか?
回答を見る
  • ベストアンサー

HTML

phpファイルからHTMLの書き出しについての質問です できるとこまでやってみたんですが途中にmysqlから取り出したデータを処理するためのwhileなどのphpがあるためうまくいきませんでした 途中にphpがある場合、どうすればうまくいきますか? PHP Version 5.2.5です ファイルロックはこんな感じでしょうか? よろしくお願いします $html = <<<END_OF_DATA <html> <head> <title>タイトル</title> </head> <body> <table> <?php while ($table = mysql_fetch_assoc($recordSet)) { ?> <tr> <td>{$table['id']}</td> <td><?php print(htmlspecialchars($table['name'], ENT_QUOTES)); ?></td> </tr> <?php } mysql_free_result($recordSet) or die("MySQL切断に失敗しました。"); mysql_close($link) or die("MySQL切断に失敗しました。"); ?> </table> </body> </html> END_OF_DATA; $filename = 'index.html'; $fp = fopen($filename,'w'); stream_set_write_buffer($fp,0); flock($fp, LOCK_EX); fwrite($fp, $html); flock($fp, LOCK_UN); fclose($fp);

  • flash0
  • お礼率97% (297/306)
  • PHP
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
noname#244856
noname#244856
回答No.2

>> file_put_contentsを使いたいのですがPHP Version 5.2.5ではバグがあって使えないようです 失礼しましたm(_ _)m 最初のfopenの書き方でOKです。 ファイルロックに関して http://tumblr.tokumaru.org/post/37141017115/php5-3-2-fclose PHP5.2.5であれば flock($fp, LOCK_UN); は不要みたいですね。 >> mysqliに変更したいのですがレンタルサーバーが対応していませんでした あーこれは仕方ないですね^^; 【訂正】 サンプル内 × _mysql_fetch_assoc ○ mysql_fetch_assoc

flash0
質問者

お礼

たびたびお答え頂きありがとうございます 書き出せました(感謝

その他の回答 (1)

noname#244856
noname#244856
回答No.1

>> PHP Version 5.2.5です >> ファイルロックはこんな感じでしょうか? PHPバージョン5.2.6以降だとモード「c」でオープンできるのですが、「w」モードではわざわざfopenでやる意味がないですね。 http://ntter0.blog76.fc2.com/blog-entry-13.html http://php.net/manual/ja/function.file-put-contents.php というわけでシンプルにfile_put_contentsを使えばいいと思います。 >> whileなどのphpがあるためうまくいきませんでした ヒアドキュメントの使い方を再確認してください。 http://www.php.net/manual/ja/language.types.string.php#language.types.string.syntax.heredoc あと、freeとかcloseとかここでスクリプトが終わるのであればする意味がないです。説明を見てください。 http://www.php.net/manual/ja/function.mysql-free-result.php http://www.php.net/manual/ja/function.mysql-close.php さらに言えばこの「mysql_○○」関数自体が非推奨で近い将来廃止される予定なので、mysqliもしくはPDOを使うようにしてください。 http://www.php.net/manual/ja/book.mysqli.php http://php.net/manual/ja/book.pdo.php どちらかと言えばPDOがオススメ。いちいち1回1回 mysql_connect(...) or die('Error'); のように例外処理を書かなくても、 try { $pdo = new PDO(...); } catch (Exception $e) { echo 'Error: '.$e->getMessage(); } とするだけで全部まとめてcatchブロックで回収できます。PDOクラスがExceptionクラスの拡張クラスであるPDOExceptionを自動的に例外発生時にスローしてくれるのです。 【サンプル】 <?php mysql_connect(...) or die('Error'); $recordSet = mysql_query(...); $cells = ''; while ($table = _mysql_fetch_assoc($recordSet)) { $cells .= sprintf('<tr><td>%s</td><td>%s</td></tr>'.PHP_EOL, $table['id'], htmlspecialchars($table['name'], ENT_QUOTES) ); } $html = <<<EOD <html> <head> <title>タイトル</title> </head> <body> <table> {$cells}</table> </body> </html> EOD; file_put_contents('index.html', $html, LOCK_EX); 【動作確認】 http://ideone.com/qEaETP http://codepad.viper-7.com/cAZKHC http://codepad.org/huJ1uZt0

flash0
質問者

お礼

お答え頂きありがとうございます file_put_contentsを使いたいのですがPHP Version 5.2.5ではバグがあって使えないようです LOCK_EXでロックしないバグがあると検索したら出てきました>< ロックだけ違う処理をするのは無理ですか? mysqliに変更したいのですがレンタルサーバーが対応していませんでした(泣。実際に変更したら真っ白に^^; コアサーバーあたりに引越す予定ですがそれまではmysql系になってしまいます。すいません

関連するQ&A

  • mysqliについて

    PHP初心者です PHP 5.2.5 MySQL 5.1.22 レンタルサーバーのphpのバージョンが php5.2.5ではpdoがバグで使えないらしいのでmysqliを使おうとしています。PHP 5.2.5でもmysqliはバグありますか? mysqliでMYSQLに接続するにはどうすればいいのでしょうか? いままではこんな感じでしたがmysqliにするとどんなコードになるのでしょうか? $link=mysql_connect('localhost', 'user', 'pass')or die(mysql_error()); mysql_select_db(user'); mysql_query('SET NAMES UTF8'); $start=1; $hyouji=10; $recordSet = mysql_query(sprintf('SELECT * FROM hoge2 ORDER BY id LIMIT %d, %d' , ',$start,$hyouji)); <?php while ($table = mysql_fetch_assoc($recordSet)) { ?> <tr> <td><?php print($table['id']); ?></td> <td><?php print($table['name']); ?></td> </tr> <?php } ?>

    • ベストアンサー
    • PHP
  • mysqlの文字化け

    お世話になります。 phpmyadminを使用しており、php内からmysqlに接続しているのですが テーブル内の結果が「????」となり文字化けしてしまいます。 phpmyadmin上では正常に日本語データが表示されます。 テーブルの文字コード:utf_general_ci ソースは以下です。 <?php ~DB接続省略~ // クエリを送信する $sql = "SELECT * FROM table"; $result = mysql_query($sql, $link) or die("クエリの送信に失敗しました。<br />SQL:".$sql); //表示するデータを作成 while($row = mysql_fetch_array($result)) { $tempHtml .= "<tr>"; $tempHtml .= "<td>".$row["YMD"]. "</td><td>".$row["NAME"]. "</td><td>".$row["OBJECT"]. "</td>"; $tempHtml .= "</tr>\n"; } //結果保持用メモリを開放する mysql_free_result($result); // MySQLへの接続を閉じる mysql_close($link) or die("MySQL切断に失敗しました。"); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>全件表示</title> </head> <body> <h3>全件表示</h3> <?= $msg ?> <table width = "200" border = "0"> <tr bgcolor="##ccffcc"><td>YMD</td><td>NAME</td><td>OBJECT</td></tr> <?= $tempHtml ?> </table> </body> </html> よろしくお願いします。

    • 締切済み
    • PHP
  • データが表示されません

    php4とMySQLを使用しています。 select文でデータを取得したあと while($Row2 = mysql_fetch_array($result2, MYSQL_ASSOC)){ $name = $Row2['name']; $contents = $Row2['contents']; ?> <table> <tr> <td><?=$name?></td> </tr> <tr> <td><?=$contents?></td> </tr> </table> <? } ?>で表示しようとしていますが、10件中の10件目しか表示されません。 上書きされているようです。どこがおかしいでしょうか? 教えてください。お願いいたします。

    • ベストアンサー
    • PHP
  • DBから取得した内容を横表示

    質問します。 DBにID,NAME,IMGと言うカラム名があります。 例 ID NAME IMG 0001 PHP1 PHP1 0002 PHP2 PHP2 0003 PHP3 PHP3 データを取得し、ブラウザにて横に表示するように したいのですが、うまくいきません…。 ブラウザーイメージ 0001 0002 0003 PHP1 PHP2 PHP3 画像 画像 画像 以下がサンプルです。 <?php //DB接続 if((!$db = mysql_connect("","",""))){ die; } //DB選択 if((!mysql_select_db(""))){ die; } if(!mysql_query('set names sjis')){ echo "sjis 設定エラー"; die; } $SQL = "SELECT * FROM video_data"; if(!($rs = mysql_query($SQL))){ print mysql_error(); die; } ?> <table border="0"> <TR> <?php $count = 0;      while($item = mysql_fetch_array($rs)){ //ID表示 print "<TD>".$item['ID']."</TD>"; //名前表示 print "<TD>".$item['NAME']."</TD>"; //改行     if($count == 4){       print "</TR>";   $count = 0;     }     //IMG表示 print "<TD><img src='./test/".$item['ID'].".jpg'/></TD>"; $count++; } print "<TR>"; //コネクションクローズ mysql_close(); ?> </TABLE> どこを修正したらいいのかわかりません… 色々やっているんですが…。 わかる方が居たらヒントでもいいので 教えて下さい。よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPでcsvファイルを一覧表示するにはどうすれば良いのでしょうか?

    <?php //ファイルを開く $fp = fopen('maillog.csv', 'r') or die('ファイルが開けません'); //テーブルを出力 echo '<table border="1">'; while ($field_array = fgetcsv($fp, 10000, ',', '"')) { echo '<tr>'; foreach ($field_array as $value) { echo '<td>'.htmlspecialchars($value, ENT_QUOTES).'</td>'; } echo '</tr>'; } echo '<table>'; //ファイルを閉じる fclose($fp); ?> プログラムだと、全ての項目が表示されてしまうので 少ない項目(3~4つ)で表示できるにはどうすれば良いのでしょうか? また、各項目毎のタイトルも付けたいのですが お願いします。

    • 締切済み
    • PHP
  • テーブル<TR></TR>の処理について

    次の様な処理を行いたいのですが方法をご教授下さい。 DBのテーブルに10個のレコードがあります。 すべてのレコードの情報を表示させます。 HTMLのテーブルは2列5行で表示させたい。 つまりHTMLで下記のように表示したい。 <TABLE> <TR> <TD>データ1</TD> <TD>データ2</TD> <TD>データ3</TD> <TD>データ4</TD> <TD>データ5</TD> </TR> <TR> <TD>データ6</TD> <TD>データ7</TD> <TD>データ8</TD> <TD>データ9</TD> <TD>データ10</TD> </TR> </TABLE> これをPHPで <? $con = mysql_connect("$dbhost", "$dbuser", "$dbpass"); mysql_select_db("$dbname"); $sql= "select * from DB_name"; $rs=mysql_query($sql); ?> <TABLE> <TR> <? while($row=mysql_fetch_array($rs)){ ?> <td><? echo $row['data'] ?></td> <?}?> </tr> </table> のように単純にデータを取り出すことは出来るのですが、 データを5つ毎に</TR><TR>を出す方法が分かりません。 このような処理は皆様はどのように行っていますか。 基本的な質問で申し訳ありませんが、ご教授下さい。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • phpのエラーについてです

    mysql上のデータをphpでブラウザに表示するコードを書いています。 下記のプログラムを実行した所 Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\xampplite\htdocs\shop\index.php on line 18 というようなエラーが表示されます。 本の通りに進めているので間違っていないはずなんですが・・ どこが成立していないのでしょうか??? <?php mysql_connect('localhost', 'root', '') or die(mysql_error()); mysql_select_db('mydb'); mysql_query('SET NAMES UTF8'); $recordSet = mysql_query('SELECT m.name, i.* FROM makers m, my_ items i WHERE m.id=i.maker_id ORDER BY id DESC'); ?> <table width="100%"> <tr> <th scope="col">ID</th> <th scope="col">メーカー</th> <th scope="col">商品名</th> <th scope="col">価格</th> </tr> <?php while ($table = mysql_fetch_assoc($recordSet)) { ?> <tr> <td><?php print(htmlspecialchars($table['id'])); ?></tb> <td><?php print(htmlspecialchars($table['name'])); ?></tb> <td><?php print(htmlspecialchars($table['item'])); ?></tb> <td><?php print(htmlspecialchars($table['price'])); ?></tb> </tr> <?php } ?> </table>

    • ベストアンサー
    • PHP
  • MySQLで0で検索できない

    以下のようなPHPのソースとMySQLのテーブルで、numberが0の行をhtmlで取得しようとしているのですが、検索窓に0を入れて検索しても取得できません。ちなみに、numberが1や2の行は取得することができます。 なぜnumberが0の行を取得できないかと、どうすればnumberが0の行を取得することができるか教えてください。 <PHPのソース> <?php $url = "localhost"; $user = "root"; $pass = ""; $db = "test"; $html = ""; // MySQLへ接続する $link = mysql_connect($url,$user,$pass) or die("MySQLへの接続に失敗しました。"); // データベースを選択する $sdb = mysql_select_db($db,$link) or die("データベースの選択に失敗しました。"); // クエリを送信する $sql = "SELECT * FROM test"; $result = mysql_query($sql, $link) or die("クエリの送信に失敗しました。<br />SQL:".$sql); //結果セットの行数を取得する $rows = mysql_num_rows($result); ?> <form action="" method="post"> <input type="text" name="numberSearch" value=""> <input type="submit" value="検索"> </form> <?php //表示するデータを作成 if($rows && !empty($_POST['numberSearch'])){ while($row = mysql_fetch_array($result)) { if ($row["number"] == $_POST['numberSearch']) { $html .= "<tr>"; $html .= "<td>".$row["alphabet"]."</td><td>".$row["number"]."</td>"; $html .= "</tr>\n"; } } }else{ $msg = "データがありません。"; } // MySQLへの接続を閉じる mysql_close($link) or die("MySQL切断に失敗しました。"); ?> <html> <head> <meta charset="utf-8"> <title>numberSearch</title> </head> <body> <table width = "200" border = "0"> <tr bgcolor="##ccffcc"><td>alphabet</td><td>number</td></tr> <?= $html ?> </table> </body> </html> <データベースのテーブル> alphabet number A 0 B 1 C 2 D 1 E 1 F 0 G 1

    • ベストアンサー
    • MySQL
  • PHP+MySQL テーブルが表示されない

    下記のように、MySQLのデータをPHPでテーブル形式で表示しています。 【PHP部分】 $check_sql = "SELECT * FROM table WHERE ( check1 LIKE '%東京%' OR check2 LIKE '%品川%' OR check3 LIKE '%%' ) AND hinichi > NOW( )"; $check_recordSet = mysql_query($check_sql); $check_rows = mysql_num_rows($check_recordSet); if($check_rows){ while($check_row = mysql_fetch_array($check_recordSet)) { $checktable = "<tr>"; $checktable .= "<td>".$check_row["check1"]."</td><td>".$check_row["check2"].$check_row["check3"]."</td>"; $checktable .= "</tr>\n"; } $msg = $check_rows."件みつかりました"; } 【HTML部分】 <?= $msg ?> <table> <?= $checktable ?> </table> $checktable が表示されないのですが、 どうも間違えている箇所がわかりません。 $msgは表示されます。 また、$check_sqlは、PHPMyAdmin上で試していますが、エラーは出ておりません。 ご存じの方いらっしゃいましたら、ご教授お願い致します。

    • ベストアンサー
    • PHP
  • データベースの中身をテーブルで表示したいです

    mysqlデーターベースの中身をテーブルで表示したいのですがわからない事があるので書き込みしました。 テーブルAのデーターを <TABLE> <TR><TD>mysql1行目</TD><TD>mysql2行目</TD></TR> <TR><TD>mysql2行目</TD><TD>mysql4行目</TD></TR> </TABLE> <TD></TD>の間にレコード一つ分のデータを入れて2列で表示したいです。 whileを使ってデーターを取り出すと1行にレコード一つ分のデーターを表示するのはそのままできるんですが1行にレコード二つ分のデーターを出す場合<TR>と</TR>をどういう仕組みで表示させれば良いかわかりません。 誰か教えてもらえないでしょうか?

    • 締切済み
    • PHP

専門家に質問してみよう