PHPのformで入力した内容をMySQLに保存したい。
Q&A
Closed
解決したいこと
MySQLで作成したDBをPHPで表示させるプログラムを作っています。
(登録する内容としては、PCの端末情報を登録する資産管理データです)
端末テーブルに新規端末登録のリンクを用意してPHPのformから入力した情報を
MySQLに保存するようにしたいのですが、
入力画面→確認画面まではいくのですが、確認画面→入力完了画面と遷移する際に
例外処理として指定した
「端末名が重複しています : 入力し直してください」
と値が重複していなくても表示され、入力した情報も保存されません。
特にreg端末.phpで値を受け取る記述の仕方についてご教示をお願いします。
発生している問題・エラー
入力した新規端末情報(terminal~years)を端末テーブルに正常に保存したい。
端末名が重複していない場合に例外処理が発生しないようにしたい。
該当するソースコード
端末.php
<?php
try {
$db = new PDO ('mysql:dbname=XXXX;host=127.0.0.1;charset=utf8', 'root','');
} catch (PDOException $e) {
echo 'DB接続エラー : ' . $e->getMessage();
}
$端末 = $db ->query('SELECT * FROM 端末');
?>
<!DOCTYPE html>
<html>
<head>
<title>端末テーブル表示</title>
<meta charset="utf-8">
</head>
<body>
<h1>端末テーブル</h1>
<table border='1'>
<tr><th>端末名</th><th>ユーザID</th>
<th>型番</th><th>コンピュータ名</th>
<th>シリアル</th><th>学校ID</th>
<th>耐用年数</th><th>導入年月</th>
<th>使用年数</th></tr>
<form action="input端末.php" method="post">
<input type="submit" value="新規端末登録">
</form>
<?php
foreach($端末 as $row){
?>
<tr>
<td><?php echo $row['terminal']; ?></td>
<td><?php echo $row['userid']; ?></td>
<td><?php echo $row['model']; ?></td>
<td><?php echo $row['computer']; ?></td>
<td><?php echo $row['serial']; ?></td>
<td><?php echo $row['schoolid']; ?></td>
<td><?php echo $row['service']; ?></td>
<td><?php echo $row['introduced']; ?></td>
<td><?php echo $row['years']; ?></td>
</tr>
<?php
}
?>
</table>
</body>
</html>
input端末.php
<?php
try {
$db = new PDO ('mysql:dbname=XXXX;host=127.0.0.1;charset=utf8', 'root','');
} catch (PDOException $e) {
echo 'DB接続エラー : ' . $e->getMessage();
}
?>
<!DOCTYPE html>
<html lang="ja" dir="ltr">
<head>
<meta charset="utf-8">
<title>新規端末登録</title>
</head>
<body>
<h1>新規登録画面</h1>
<form action="端末.php" method="post">
<input type="submit" value="戻る">
</form>
<form action="confirm端末.php" method="post">
端末名<br>
<input type="text" name="terminal"><br>
ユーザID<br>
<input type="text" name="userid"><br>
型番<br>
<input type="text" name="model"><br>
コンピュータ名<br>
<input type="text" name="computer"><br>
シリアル<br>
<input type="text" name="serial"><br>
学校ID<br>
<input type="text" name="schoolid"><br>
耐用年数<br>
<input type="text" name="servie"><br>
導入年月<br>
<input type="text" name="introduced"><br>
使用年数<br>
<input type="text" name="years"><br>
<input type="submit" value="確認">
</form>
</body>
</html>
confirm端末.php
<?php
try {
$db = new PDO ('mysql:dbname=XXXX;host=127.0.0.1;charset=utf8', 'root','');
} catch (PDOException $e) {
echo 'DB接続エラー : ' . $e->getMessage();
}
$terminal = $_POST['terminal'];
$userid = $_POST['userid'];
$model = $_POST['model'];
$computer = $_POST['computer'];
$serial = $_POST['serial'];
$schoolid = $_POST['schoolid'];
$servie = $_POST['servie'];
$introduced = $_POST['introduced'];
$years = $_POST['years'];
?>
<!DOCTYPE html>
<html lang="ja" dir="ltr">
<head>
<meta charset="utf-8">
<title>確認ページ</title>
</head>
<body>
<h1>確認画面</h1>
<h3>下記の情報で登録しますがよろしいですか?</h3>
<form action="reg端末.php" method="post">
端末名<br>
<input type="text" name="terminal" value="<?php echo $_POST['terminal']; ?>" disabled><br>
ユーザID<br>
<input type="text" name="userid" value="<?php echo $_POST['userid']; ?>" disabled><br>
型番<br>
<input type="text" name="model" value="<?php echo $_POST['model']; ?>" disabled><br>
コンピュータ名<br>
<input type="text" name="computer" value="<?php echo $_POST['computer']; ?>" disabled><br>
シリアル<br>
<input type="text" name="serial" value="<?php echo $_POST['serial']; ?>" disabled><br>
学校ID<br>
<input type="text" name="schoolid" value="<?php echo $_POST['schoolid']; ?>" disabled><br>
耐用年数<br>
<input type="text" name="servie" value="<?php echo $_POST['servie']; ?>" disabled><br>
導入年月<br>
<input type="text" name="introduced" value="<?php echo $_POST['introduced']; ?>" disabled><br>
使用年数<br>
<input type="text" name="years" value="<?php echo $_POST['years']; ?>" disabled><br>
<!-- 入力画面から受け取ったデータを格納 -->
<input type="hidden" name="terminal" value="<?php echo $terminal; ?>">
<input type="hidden" name="userid" value="<?php echo $userid; ?>">
<input type="hidden" name="model" value="<?php echo $model; ?>">
<input type="hidden" name="computer" value="<?php echo $computer; ?>">
<input type="hidden" name="serial" value="<?php echo $serial; ?>">
<input type="hidden" name="schoolid" value="<?php echo $schoolid; ?>">
<input type="hidden" name="servie" value="<?php echo $servie; ?>">
<input type="hidden" name="introduced" value="<?php echo $introduced; ?>">
<input type="hidden" name="years" value="<?php echo $years; ?>">
<input type="submit" value="登録">
</form>
<form action="input端末.php">
<input type="submit" value="戻る">
</form>
</body>
</html>
reg端末.php
<?php
try {
$db = new PDO ('mysql:dbname=XXXX;host=127.0.0.1;charset=utf8', 'root','');
} catch (PDOException $e) {
echo 'DB接続エラー : ' . $e->getMessage();
}
try {
$statement = $db ->prepare('INSERT INTO 端末 SET terminal=?, userid=?, model=?, computer=?, serial=?, schoolid=?, servie=?, introduced=?, years=?');
$statement ->execute(array($_POST['terminal'], $_POST['userid'], $_POST['model'], $_POST['computer'], $_POST['serial'], $_POST['schoolid'], $_POST['servie'], $_POST['introduced'], $_POST['years']));
} catch (PDOException $e) {
echo '端末名が重複しています : 入力し直してください';
}
?>
<!DOCTYPE html>
<html lang="ja" dir="ltr">
<head>
<meta charset="utf-8">
<title>登録完了</title>
</head>
<body>
<h1>登録完了</h1>
<p>入力お疲れ様でした</p>
<form action="端末.php" method="post">
<input type="submit" value="端末テーブル画面に戻る">
</form>
</body>
</html>
自分で試したこと
ユーザテーブルを作成してみてうまくいったので
同様の構造で端末テーブルを作成してみましたが、登録がうまくいきません。
カラムが多くなり、「reg端末.php」の「try{~}catch」に指定しているstatement文が長くなってしまった為、簡潔に記述するやり方についてもご教示いただきたいです。