phpでmysqlにデータを保存しているデータをid毎に静的フアィルhtmlに生成して書き出したいです
phpでmysqlデータベースに
test_id, test_title, test_contents, test_date.test_imageのデータを保存しています。このデータのid毎に静的htmlに生成して書き出したいです。WordPressやMovable Typeの静的ファイルの書き出すとかに似ているイメージです。
例えば:上記添付した画像(CMS.png)の書き出すボタンを押すと添付した画像(database.png)から、/Applications/MAMP/htdocs/test/のディレクトリーの下に静的htmlファイにて生成して書き出したいです
/Applications/MAMP/htdocs/test/1.html
/Applications/MAMP/htdocs/test/2.html
1.htmlと2.htmlにはデータベースに保存されているtest_id, test_title, test_contents, test_date.test_imageのデータ内容がそれぞれのhtmlに全部表示されるようにしたいです
これはphpや何かをして書き出すことは可能でしょうか? ご教授お願い致します。
@D.T さん
sync.phpファイルは下記です。
<?php
//require_once("db.php");
// 取得するIDをURLパラメータから取得
if (!isset($_GET['test_id'])) {
echo '{$test_id} param not found. please set param [id] to url params.';
return;
}
$test_id = $_GET['test_id'];
// データベースに接続
//$db = new mysqli("localhost", "root", "root", "product");
$db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if ($db->connect_error) {
echo 'database connect failed.';
return;
}
if ($db->set_charset('utf8') === false) {
echo 'database connect failed. can not using utf-8.';
return;
}
// データ取得とhtmlに変換
$html = "<!DOCTYPE html><html><head><meta charset=\"UTF-8\"><title>{$id} </title></head><body>";
//データベース名前はproductです, 今回の想定はいくつからのテーブルあって、その中のtestテーブルです
$result = $db->query("select * from test where test_id = {$test_id};"); // 本当はidのエスケープを考慮しないといけない でもselectなのでべつにこのままでも危険な事にはならない。
$rows = array();
for ($i=0; ($row=$result->fetch_assoc()) != null; $i++) { // 一応一致した全行出力する
if ($i > 0) {
$html .= '<br />';
}
$html .= 'test_id = ' . $row['test_id'] . ', ';
$html .= 'test_title = ' . $row['test_title'] . ', ';
$html .= 'test_contents = ' . $row['test_contents'] . ', ';
$html .= 'test_date = ' . $row['test_date'] . ', ';
$html .= 'test_image = ' . $row['test_image'];
}
$html .= "</body></html>";
// ファイルに書き出し
if (file_put_contents("/Applications/MAMP/htdocs/test/{$test_id}.html", $html) === false) {
echo 'write to file failed.';
} else {
echo 'write to file succeed.';
}
@D.Tさんこちらが全ファイルです。
sync.phpとadmin.phpとdb.phpは同じディレクトリ下にあります。
sync.phpこちらは@D.Tさんのファイル
// 取得するIDを取得
if (!isset($_GET['test_id']) && !isset($_POST['test_id'])) {
print '[test_id] param not found. please set param [test_id] to url params or post values.';
return;
}
$id = isset($_GET['test_id'])? $_GET['test_id']:$_POST['test_id'];
// データベースに接続
$db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
//$db = new mysqli("localhost", "root", "root", "product");//ここだけを自分の環境に合わせてみました。
if ($db->connect_error) {
print 'database connect failed.';
return;
}
if ($db->set_charset('utf8') === false) {
print 'database connect failed. can not using utf-8.';
return;
}
// データ取得とhtmlに変換
$html = "<!DOCTYPE html><html><head><meta charset=\"UTF-8\" /><title>{$id} </title></head><body>";
$result = $db->query("select * from test where test_id = {$id};"); // 本当 はidのエスケープを考慮しないといけない でもselectなのでべつにこのままでも危険な事にはならない。
for ($i=0; ($row=$result->fetch_assoc()) != null; $i++) { // 一応一致した全行出力する
if ($i > 0) {
$html .= '<br />';
}
$html .= 'test_id = ' . $row['test_id'] . ', ';
$html .= 'test_title = ' . $row['test_title'] . ', ';
$html .= 'test_contents = ' . $row['test_contents'] . ', ';
$html .= 'test_date = ' . $row['test_date'] . ', ';
$html .= 'test_image = ' . $row['test_image'];
}
$html .= "</body></html>";
// ファイルに書き出し
if (file_put_contents("/Applications/MAMP/htdocs/test/{$id}.html", $html) === false) {
print 'write to file failed.';
} else {
print 'write to file succeed.';
?>
admin.php
$query = "SELECT * FROM test ORDER BY test_id DESC";
$select = mysqli_query($db, $query);
while($row = mysqli_fetch_assoc($select)){
$test_id =$row['test_id'];
$test_title = $row['test_title'];
$test_contents =$row['test_contents'];
$test_date =$row['test_date'];
$test_image =$row['test_image'];
echo "<tr>";
?>
<?php
echo "<td>$test_id</td>";
echo "<td>$test_title</td>";
echo "<td>$test_contents</td>";
echo "<td>$test_date</td>";
echo "<td>$test_image</td>";
echo "<td><a href=''>編集</td>";
echo "<td><a rel=''>削除</td>";
echo "<td><form action='sync.php' method='post'><div class='form-group'>
<input type='hidden' name='test_id' value='".$test_id."'>
<input type='submit' class='btn' name='submit' value='書き出す'>
</div></form></td>";
echo "</tr>";
}
db.php
<?php
$db['db_host'] = "localhost";
$db['db_user'] = "root";
$db['db_pass'] = "root";
$db['db_name'] = "product";
foreach($db as $key => $value){
define(strtoupper($key), $value);
}
$db = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
mysqli_set_charset($db,"utf8");
?>