やりたいこと
PHPで管理画面も含めた用語集サイトを作ります。
わかりやすさを優先して、最低限のソースコードにしています。
管理者パスワード設定もないので、第三者が勝手にコンテンツを変更できる仕様です。
セキュリティが緩いので個人情報を取り扱わないでください。
仕様
- トップページ(index.php)は用語名、用語のフリガナの一覧を表示する。
- トップページの用語のハイパーリンクをクリックすると、用語詳細ページ(item.php)画面に遷移する。
- 用語詳細ページは、用語名、分類、用語のフリガナ、用語の内容を表示する。
- 管理画面で用語の新規登録、編集、削除ができる。
- 管理画面で用語の新規登録、編集、削除ボタンを押すと、確認ページ(xxxx_check.php)に遷移し実行ボタンを押すと、実行結果確認ページ(xxxx_done.php)に遷移する。
その他
サーバーはロリポップを契約、ドメインはムームードメインで取得しています。
ページ構成と画面遷移
ページ一覧
index.php
item.php
list.php
branch.php
add.php
add_check.php
add_done.php
edit.php
edit_check.php
edit_done.php
delete.php
delete_done.php
ng.php
画面遷移図
各ページのソースコード
index.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="description" content="Webサイトのコンテンツ内容">
<title>Webサイトのタイトル</title>
<link rel="stylesheet" href="/main.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
</head>
<body>
<div class="wrapper">
<div id="site_title"><a href="https://XXXX.com/">Webサイトのタイトル</a></div>
<div class="top_page_title_list">
<ul>
<li>
<?php
try {
//DB名、ユーザー名、パスワード
$dsn = 'mysql:dbname=LAAXXXX-XXXX;host=mysqlXXX.phy.lolipop.lan'; //データベース名。''内は一切スペースを入れてはいけない
$user = 'LAAXXXX'; //''内にはユーザ名を入力
$password = 'XXXX'; //''内にはパスワードを入力
$PDO = new PDO($dsn, $user, $password); //MySQLのデータベースに接続
$PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //PDOのエラーレポートを表示
$sql = 'SELECT * FROM contents ORDER BY name asc'; //SELECT文を変数に格納。 contentsテーブルてからname列の値を取り出し、name列順に並び替え
$stmt = $PDO->query($sql); // SQLステートメントを実行し、結果を変数に格納
// foreach文で配列の中身を一行ずつ出力
foreach ($stmt as $row) {
// 取り出した一行を名称とフリガナで表示し、ハイパーリンク設定
echo "<div class='title_name'><a href='http://XXXX.com/item.php?name=".$row['name']."'>".$row['name'].
"<span class='reading'>(".$row['reading'].")</span></a></div>\n";
}
} catch (PDOException $e) {
exit('データベースに接続できませんでした。' . $e->getMessage());
}
?>
</li>
</ul>
</div>
</div>
</body>
</html>
item.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="description" content="Webサイトのコンテンツ内容">
<title>Webサイトのタイトル</title>
<link rel="stylesheet" href="/main.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
</head>
<body>
<div class="wrapper">
<div id="site_title"><a href="https://XXXX.com/">Webサイトのタイトル</a></div>
<div class="detail_page_contents">
<?php
try {
//URLのidの値を取得
$name = $_GET['name'];
//DB名、ユーザー名、パスワード
$dsn = 'mysql:dbname=LAAXXXX-XXXX;host=mysqlXXX.phy.lolipop.lan'; //データベース名。''内は一切スペースを入れてはいけない
$user = 'LAAXXXX'; //''内にはユーザ名を入力
$password = 'XXXX'; //''内にはパスワードを入力
$PDO = new PDO($dsn, $user, $password); //MySQLのデータベースに接続
$PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//名前付けされたプレースホルダを用いてプリペアドステートメントを実行
// プレースホルダとはSQLを発行する際に後から値を指定する方法のこと。SQLインジェクションを回避してセキュリティを高める
$result = $PDO->prepare('SELECT * FROM contents WHERE name = :name');
$result->bindValue(':name', $name);
$result->execute();
while($row = $result->fetch(PDO::FETCH_ASSOC)){
echo "<p>分類 | ".$row['category']."</p>";
echo "<h1>".$row['name']." (".$row['reading'].")</span></h1>";
echo "<p>".nl2br($row['description'])."</p>"; //nl2br関数で改行を反映する
}
} catch (PDOException $e) {
exit('データベースに接続できませんでした。' . $e->getMessage());
}
?>
</div>
</div>
</div>
</body>
</html>
list.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="description" content="Webサイトのコンテンツ内容">
<title>Webサイトのタイトル</title>
<link rel="stylesheet" href="/main.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
</head>
<body>
<?php
//tryはデータベースの接続エラー対策
try
{
//データベースに接続
$dsn = 'mysql:dbname=LAAXXXX-XXXX;host=mysqlXXX.phy.lolipop.lan'; //データベース名。''内は一切スペースを入れてはいけない
$user = 'LAAXXXX'; //''内にはユーザ名を入力
$password = 'XXXX'; //''内にはパスワードを入力
$dbh = new PDO($dsn, $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //この行は定型文としてこのまま書く
// SQL分を使ってレコードを読み込み
$sql ='SELECT name FROM contents WHERE 1'; //'SELECT name FROM contents WHERE 1'を変数$sqlに格納する。contentsテーブルのnameカラムのすべての情報(Where 1で全部という意味)を取得する
$stmt = $dbh->prepare($sql); // レコードを呼び出す準備。この行は定型文としてこのまま書く
$stmt->execute(); // SQL文で指令を出すための命令文。この行は定型文としてこのまま書く
// データベースから切断するプログラム
$dbh = null;
// 一覧を表示する
print '用語一覧<br /><br />';
print '<form method="post" action="branch.php">';
While(true){
$rec = $stmt->fetch(PDO::FETCH_ASSOC); //$stmtから1レコードを取り出す
if($rec==false){ //もし、$recがなければ(もうデータがなければ)、Whileから抜け出す
break;
}
print '<input type="radio" name="name" value="'.$rec['name'].'">';
print $rec['name']; //もし、$recがあれば、$recのnameを表示
print "<br />\n"; //\nはソースコードの改行コード。\nはシングルクオテーションで囲うと文字として出力されてしまうので注意
// 上記3行は結合すると右記のように表示される。 <input type="radio" name="glossary" value="AA">AA<br />
}
print '<input type="submit" name="add" value="追加">';
print '<input type="submit" name="edit" value="修正">';
print '<input type="submit" name="delete" value="削除">';
print '</form>';
}
catch (Exception $e)
{
print 'ただいま障害により表示できません。';
exit(); //強制終了の命令
}
?>
</body>
</html>
branch.php
branch.phpを使って、list.phpで押したボタンに応じて遷移先を制御する。
<?php
if(isset($_POST['add'])==true){ //もし「追加」ボタンが押されていて
header('Location:add.php');
exit();
}
if(isset($_POST['edit'])==true){ //もし「修正」ボタンが押されていて
if(isset($_POST['name'])==false){ //もしラジオボタンが何も選択されていなければ
header('Location:ng.php');
exit();
}
$name=$_POST['name'];
header('Location:edit.php?name='.$name);
exit();
}
if(isset($_POST['delete'])==true){ //もし「修正」ボタンが押されていて
if(isset($_POST['name'])==false){ //もしラジオボタンが何も選択されていなければ
header('Location: ng.php');
exit();
}
$name=$_POST['name'];
header('Location:delete.php?name='.$name);
exit();
}
?>
add.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="description" content="Webサイトのコンテンツ内容">
<title>Webサイトのタイトル</title>
<link rel="stylesheet" href="/main.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
</head>
<body>
用語追加<br />
<br />
<form method="post" action="glossary_add_check.php"> <!--postメソッドで、glossary_add_check.phpに情報を引き渡す-->
用語名を入力してください。<br />
<input type="text" name="name" style="width:100px"><br /> <!--入力された値はtext型。値はnameと名づける-->
読み方を入力してください。英語はカナ、日本語は平仮名<br />
<input type="text" name="reading" style="width:100px"><br /> <!--入力された値はtext型。値はreadingと名づける-->
カテゴリを入力してください。<br />
<input type="text" name="category" style="width:100px"><br /> <!--入力された値はtext型。値はcategoryと名づける。-->
用語の説明文を入力してください。<br />
<textarea name="description" style="width:500px; height:200px;" wrap="soft"></textarea>
<br />
<input type="button" onclick="history.back()" value="戻る"> <!--戻るボタンをクリックすると、前の画面に遷移する-->
<input type="submit" value="OK"> <!--OKボタンをクリックすると、glossary_add_check.phpに遷移する-->
</form>
</body>
</html>
add_check.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="description" content="Webサイトのコンテンツ内容">
<title>Webサイトのタイトル</title>
<link rel="stylesheet" href="/main.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
</head>
<body>
<?php
$name=$_POST['name']; //前の画面から入力値を受け取り、$nameに格納
$reading=$_POST['reading']; //前の画面から入力値を受け取り、$readingに格納
$category=$_POST['category']; //前の画面から入力値を受け取り、$categoryに格納
$description=$_POST['description']; //前の画面から入力値を受け取り、$descriptionに格納
$name=htmlspecialchars($name,ENT_QUOTES,'UTF-8'); //文字列に変換(セキュリティ対策)
$reading=htmlspecialchars($reading,ENT_QUOTES,'UTF-8'); //文字列に変換(セキュリティ対策)
$category=htmlspecialchars($category,ENT_QUOTES,'UTF-8'); //文字列に変換(セキュリティ対策)
$description=htmlspecialchars($description,ENT_QUOTES,'UTF-8'); //文字列に変換(セキュリティ対策)
//$nameがカラならエラーメッセージを表示する
//$nameが入力されていれば、$nameを表示する
if($name==''){
print '用語名が入力されていません。<br />';
}
else
{
print '用語名:';
print $name;
print '<br />';
}
//$readingがカラならエラーメッセージを表示する
//$readingが入力されていれば、$readingを表示する
if($reading==''){
print '読み方が入力されていません。<br />';
}
else
{
print '読み方:';
print $reading;
print '<br />';
}
//$categoryがカラならエラーメッセージを表示する
//$categoryが入力されていれば、$categoryを表示する
if($category==''){
print 'カテゴリが入力されていません。<br />';
}
else
{
print 'カテゴリ:';
print $category;
print '<br />';
}
//$descriptionがカラならエラーメッセージを表示する
//$descriptionが入力されていれば、$categoryを表示する
if($description==''){
print '用語説明が入力されていません。<br />';
}
else
{
print '用語説明:';
print $description;
print '<br />';
}
//$name、$reading、$category、$descriptionのいずれかがカラなら、戻るボタンのみを表示する
//入力項目が適切なら、戻るボタンとOKボタンを表示する。
if($name==''|| $reading==''||$category=='' || $description==''){
print '<form>';
print '<input type="button" onclick="history.back()" value="戻る">';
print '<form>';
}
else
{
print '<form method="post" action="add_done.php">';
print '<input type="hidden" name="name" value="'.$name.'">'; //'<input type="hidden" name="name" value="'と$nameをドットで連結
print '<input type="hidden" name="reading" value="'.$reading.'">'; //'<input type="hidden" name="reading" value="'と$nameをドットで連結
print '<input type="hidden" name="category" value="'.$category.'">'; //'<input type="hidden" name="category" value="'と$categoryをドットで連結
print '<input type="hidden" name="description" value="'.$description.'">'; //'<input type="hidden" name="description" value="'と$descriptionをドットで連結
print '<input type="button" onclick="history.back()" value="戻る">';
print '<input type="submit" value="OK">';
print '</form>';
}
?>
</body>
</html>
add_done.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="description" content="Webサイトのコンテンツ内容">
<title>Webサイトのタイトル</title>
<link rel="stylesheet" href="/main.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
</head>
<body>
<?php
//tryはデータベースの接続エラー対策
try
{
// POSTメソッドで前の画面の入力値を取得する
$name = $_POST['name'];
$reading = $_POST['reading'];
$category = $_POST['category'];
$description = $_POST['description'];
//データベースに接続
$dsn = 'mysql:dbname=LAAXXXX-XXXX;host=mysqlXXXX.lan'; //データベース名。''内は一切スペースを入れてはいけない
$user = 'LAAXXXX'; //rootにはユーザ名を入力
$password = 'XXXX'; //''内にはパスワードを入力
$dbh = new PDO($dsn, $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //この行は定型文としてこのまま書く
// SQL分を使ってレコードを追加
$sql ='INSERT INTO contents(name,reading,category,description) VALUES (?,?,?,?)'; //'INSERT INTO mst_staff(name,reading,category,description) VALUES (?,?,?,?)'を変数$sqlに格納する
$stmt = $dbh->prepare($sql); // レコードを追加する準備。この行は定型文としてこのまま書く
$data[] = $name; // 一つ目の?にセットしたいデータが入っている変数を書く
$data[] = $reading; // 二つ目の?にセットしたいデータが入っている変数を書く
$data[] = $category; // 三つ目の?にセットしたいデータが入っている変数を書く
$data[] = $description; // 四つ目の?にセットしたいデータが入っている変数を書く
$stmt->execute($data); // SQL文で指令を出すための命令文。この行は定型文としてこのまま書く
// データベースから切断するプログラム
$dbh = null;
// セキュリティ対策入力値を文字列に変換。出力時にエスケープする
// エスケープ忘れ、多重エスケープ、エスケープ前の文字列が必要になった際にhtmlspecialchars_decode()等で元に戻す必要があるため
$name = htmlspecialchars($name,ENT_QUOTES,'UTF-8');
$reading = htmlspecialchars($reading,ENT_QUOTES,'UTF-8');
$category = htmlspecialchars($category,ENT_QUOTES,'UTF-8');
$description = htmlspecialchars($description,ENT_QUOTES,'UTF-8');
//結果を表示
print $name;
print 'を追加しました。<br />';
}
catch (Exception $e)
{
print 'ただいま障害により接続できません。';
exit(); //強制終了の命令
}
?>
<a href="list.php">戻る</a>
</body>
</html>
edit.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="description" content="Webサイトのコンテンツ内容">
<title>Webサイトのタイトル</title>
<link rel="stylesheet" href="/main.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
</head>
<body>
<?php
//tryはデータベースの接続エラー対策
try
{
$name=$_GET['name']; //前画面のlist.phpからGETでglossaryを受け取る
//データベースに接続
$dsn = 'mysql:dbname=LAAXXXX-XXXX;host=mysqlXXXX.lan'; //データベース名。''内は一切スペースを入れてはいけない
$user = 'LAAXXXX'; //''内にはにはユーザ名を入力
$password = 'XXXX'; //''内にはパスワードを入力
$dbh = new PDO($dsn, $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //この行は定型文としてこのまま書く
// SQL分を使ってレコードを読み込み
$sql ='SELECT reading, category, description FROM contents WHERE name=?'; //'SELECT name FROM contents WHERE glossary=?'を変数$sqlに格納する。contentsテーブルのnameカラムのあとで指定する(?のこと)値の情報を取得する
$stmt = $dbh->prepare($sql); // レコードを検索する準備。この行は定型文としてこのまま書く
$data[] = $name; // 上の上の行の?の値を設定する
$stmt->execute($data); // SQL文で指令を出すための命令文。この行は定型文としてこのまま書く
$rec=$stmt->fetch(PDO::FETCH_ASSOC);
$reading=$rec['reading'];
$category=$rec['category'];
$description=$rec['description'];
// データベースから切断するプログラム
$dbh = null;
}
catch (Exception $e)
{
print 'ただいま障害により表示できません。';
exit(); //強制終了の命令
}
?>
Name<br />
<form method="post" action="edit_check.php">
<input type="text" name="name" value="<?php print $name; ?>">
<br /><br />
Reading<br />
<form method="post" action="edit_check.php">
<input type="text" name="reading" value="<?php print $reading; ?>">
<br /><br />
Category<br />
<form method="post" action="edit_check.php">
<input type="text" name="category" value="<?php print $category; ?>">
<br /><br />
Discription<br />
<form method="post" action="edit_check.php">
<textarea name="description" style="width:500px; height:200px;" wrap="soft">
<?php print $description; ?>
</textarea>
<br />
<input type="button" onclick="history.back()" value="戻る">
<input type="submit" value="OK">
</form>
</body>
</html>
edit_check.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="description" content="Webサイトのコンテンツ内容">
<title>Webサイトのタイトル</title>
<link rel="stylesheet" href="/main.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
</head>
<body>
<?php
$name=$_POST['name']; //前の画面から入力値を受け取り、$nameに格納
$reading=$_POST['reading']; //前の画面から入力値を受け取り、$readingに格納
$category=$_POST['category']; //前の画面から入力値を受け取り、$categoryに格納
$description=$_POST['description']; //前の画面から入力値を受け取り、$escriptionに格納
//$nameがカラならエラーメッセージを表示する
//$nameが入力されていれば、$nameを表示する
if($name==''){
print '用語名が入力されていません。<br />';
}
else
{
print '用語名:';
print $name;
print '<br /><br />';
}
//$readingがカラならエラーメッセージを表示する
//$readingが入力されていれば、$readingを表示する
if($reading==''){
print '読み方が入力されていません。<br />';
}
else
{
print '読み:';
print $reading;
print '<br /><br />';
}
//$categoryがカラならエラーメッセージを表示する
//$categoryが入力されていれば、$categoryを表示する
if($category==''){
print 'カテゴリが入力されていません。<br />';
}
else
{
print 'カテゴリ:';
print $category;
print '<br /><br />';
}
//$descriptionがカラならエラーメッセージを表示する
//$descriptionが入力されていれば、$categoryを表示する
if($description==''){
print '用語説明が入力されていません。<br /><br />';
}
else
{
print '用語説明:';
print $description;
print '<br /><br />';
}
//$name、$category、$descriptionのいずれかがカラなら、戻るボタンのみを表示する
//入力項目が適切なら、戻るボタンとOKボタンを表示する。
if($name==''|| $reading==''|| $category=='' || $description==''){
print '<form>';
print '<input type="button" onclick="history.back()" value="戻る">';
print '<form>';
}
else
{
print '<form method="post" action="edit_done.php">';
print '<input type="hidden" name="name" value="'.$name.'">'; //'<input type="hidden" name="name" value="'と$nameをドットで連結
print '<input type="hidden" name="reading" value="'.$reading.'">'; //'<input type="hidden" name="namereading" value="'と$readingをドットで連結
print '<input type="hidden" name="category" value="'.$category.'">'; //'<input type="hidden" name="category" value="'と$categoryをドットで連結
print '<input type="hidden" name="description" value="'.$description.'">'; //'<input type="hidden" name="description" value="'と$descriptionをドットで連結
print '<input type="button" onclick="history.back()" value="戻る">';
print '<input type="submit" value="OK">';
print '</form>';
}
?>
</body>
</html>
edit_done.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="description" content="Webサイトのコンテンツ内容">
<title>Webサイトのタイトル</title>
<link rel="stylesheet" href="/main.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
</head>
<body>
<?php
//tryはデータベースの接続エラー対策
try
{
// POSTメソッドで前の画面の入力値を取得する
$name = $_POST['name'];
$reading = $_POST['reading'];
$category = $_POST['category'];
$description = $_POST['description'];
//データベースに接続
$dsn = 'mysql:dbname=LAAXXXX;host=mysqlXXXX.lan'; //データベース名。''内は一切スペースを入れてはいけない
$user = 'XXXX'; //rootにはユーザ名を入力
$password = 'XXXX'; //''内にはパスワードを入力
$dbh = new PDO($dsn, $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //この行は定型文としてこのまま書く
// SQL分を使ってレコードを追加
$sql ='UPDATE contents SET name=?,reading=?,category=?,description=? WHERE name=?'; //$sql ='UPDATE contents SET name=?,reading=?,category=?,description=? WHERE name=?'を変数$sqlに格納する
$stmt = $dbh->prepare($sql); // レコードを追加する準備。この行は定型文としてこのまま書く
$data[] = $name; // 一つ目の?にセットしたいデータが入っている変数を書く
$data[] = $reading; // 二つ目の?にセットしたいデータが入っている変数を書く
$data[] = $category; // 三つ目の?にセットしたいデータが入っている変数を書く
$data[] = $description; // 四つ目の?にセットしたいデータが入っている変数を書く
$data[] = $name; // 五つ目の?にセットしたいデータが入っている変数を書く
$stmt->execute($data); // SQL文で指令を出すための命令文。この行は定型文としてこのまま書く
// データベースから切断するプログラム
$dbh = null;
}
catch (Exception $e)
{
print 'ただいま障害により接続できません。';
exit(); //強制終了の命令
}
?>
修正しました。 <br /><br />
<a href="list.php">戻る</a>
</body>
</html>
delete.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="description" content="Webサイトのコンテンツ内容">
<title>Webサイトのタイトル</title>
<link rel="stylesheet" href="/main.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
</head>
<body>
<?php
//tryはデータベースの接続エラー対策
try
{
$name=$_GET['name']; //前画面のlist.phpからGETでnameを受け取る
//データベースに接続
$dsn = 'mysql:dbname=LAAXXXX;host=mysqlXXXX.lan'; //データベース名。''内は一切スペースを入れてはいけない
$user = 'XXXX'; //''内にはにはユーザ名を入力
$password = 'XXXX'; //''内にはパスワードを入力
$dbh = new PDO($dsn, $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //この行は定型文としてこのまま書く
// SQL分を使ってレコードを読み込み
$sql ='SELECT reading, category, description FROM contents WHERE name=?'; //'SELECT name FROM contents WHERE glossary=?'を変数$sqlに格納する。contentsテーブルのnameカラムのあとで指定する(?のこと)値の情報を取得する
$stmt = $dbh->prepare($sql); // レコードを検索する準備。この行は定型文としてこのまま書く
$data[] = $name; // 上の上の行の?の値を設定する
$stmt->execute($data); // SQL文で指令を出すための命令文。この行は定型文としてこのまま書く
$rec=$stmt->fetch(PDO::FETCH_ASSOC);
$category=$rec['reading'];
$category=$rec['category'];
$description=$rec['description'];
// データベースから切断するプログラム
$dbh = null;
}
catch (Exception $e)
{
print 'ただいま障害により表示できません。';
exit(); //強制終了の命令
}
?>
用語削除<br /><br />
用語<br />
<?php print $name; ?>
<br />
この用語を削除してよろしいですか?<br /><br />
<form method="post" action="delete_done.php">
<input type="hidden" name="name" style="width:200px" value="<?php print $name?>"><br />
<input type="button" onclick="history.back()" value="戻る">
<input type="submit" value="OK">
</form>
</body>
</html>
delete_done.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="description" content="Webサイトのコンテンツ内容">
<title>Webサイトのタイトル</title>
<link rel="stylesheet" href="/main.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
</head>
<body>
<?php
//tryはデータベースの接続エラー対策
try
{
// POSTメソッドで前の画面の入力値を取得する
$name = $_POST['name'];
//データベースに接続
$dsn = 'mysql:dbname=LAAXXXX;host=mysqlXXXX.lan'; //データベース名。''内は一切スペースを入れてはいけない
$user = 'XXXX'; //rootにはユーザ名を入力
$password = 'XXXX'; //''内にはパスワードを入力
$dbh = new PDO($dsn, $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //この行は定型文としてこのまま書く
// SQL分を使ってレコードを追加
$sql ='DELETE FROM contents WHERE name=?'; //DELETE FROM contents WHERE name=?を変数$sqlに格納する
$stmt = $dbh->prepare($sql); // レコードを追加する準備。この行は定型文としてこのまま書く
$data[] = $name; // 一つ目の?にセットしたいデータが入っている変数を書く
$stmt->execute($data); // SQL文で指令を出すための命令文。この行は定型文としてこのまま書く
// データベースから切断するプログラム
$dbh = null;
}
catch (Exception $e)
{
print 'ただいま障害により接続できません。';
exit(); //強制終了の命令
}
?>
削除しました。 <br /><br />
<a href="list.php">戻る</a>
</body>
</html>
ng.php
<!DOCTYPE html>
<html lang="ja">
<!DOCTYPE html>
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="description" content="Webサイトのコンテンツ内容">
<title>Webサイトのタイトル</title>
<link rel="stylesheet" href="/main.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
</head>
<body>
用語が選択されていません。
<a href="list.php">戻る</a>
</body>
</html>