みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

php pdo 主キー

番号 int プライマリーキ-
氏名 varchar
住所 varchar

データベースで入力フォームから新規登録をしたいのですが
Duplicate entry '11' for key 'PRIMARY'
11はすでに存在していると出ます
オートナンバー型に変えずに"すでに登録されている番号です"というエラーメッセージを出し、もう一度登録画面に戻るしたいのですが、
try文で例外処理させれば出来ますか?


また出来るのであればどういう風に記述するか教えてもらえますか?

投稿日時 - 2014-04-17 17:17:46

QNo.8558241

すぐに回答ほしいです

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

やり方は2つ
1つは先に select してみてデータが有ればエラーメッセージを表示する。
もう1つは insert してみてエラーが返ってきたら、DBのエラー内容を解読してページにエラーメッセージを表示する。

投稿日時 - 2014-04-17 17:58:10

補足

すいません間違えました
こちらが新規登録のphpです

<html>
<body>
<blockquote>
<?php
$con=mysqli_connect("localhost","root","admin","db_test");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

if ($_POST['ID'] != '' && $_POST['NAME'] != '' && $_POST['ADDR'] != '')
{
$id = mysqli_real_escape_string($con, $_POST['ID']);
$name = mysqli_real_escape_string($con, $_POST['NAME']);
$addr = mysqli_real_escape_string($con, $_POST['ADDR']);
$sql="INSERT INTO tbl_test (番号, 氏名, 住所) VALUES ('$id','$name','$addr')";
if (!mysqli_query($con,$sql))
{
die('Error: ' . mysqli_error($con));
}
echo "登録完了しました";
} else {
echo "<br>番号が既に登録されている番号か<BR>またはデータが未入力の箇所があります。すべてデータを入力してください";
}



mysqli_close($con);
?>
<br><br><br>
<a href="http://localhost/regist.php">
<INPUT TYPE = "button" VALUE = "登録画面に戻る" style ="font-size:20px; WIDTH: 140px; HEIGHT: 40px"></A>

<br><br><br>
<A HREF="http://localhost/top.php">
<INPUT TYPE = "button" VALUE = "一覧に戻る" style ="font-size:20px; WIDTH: 140px; HEIGHT: 40px"></A>
</blockquote>
</body>
</html>

投稿日時 - 2014-04-18 09:07:33

お礼

ありがとうございます

下記は更新画面になります
こちらのプログラムをアップデートphpに送っています
<head>
<body>
<blockquote>
<br><br>
更新画面
<br><br><br>
<?php
$ID = htmlspecialchars($_GET['番号']);
$pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin");
$st = $pdo->prepare("SELECT * FROM tbl_test WHERE 番号=?");
$st->execute(array($ID));
$row = $st->fetch();
$NAME = htmlspecialchars($row['氏名']);
$ADDR = htmlspecialchars($row['住所']);
?>
<form action="update.php" method="post">
番号 <?php echo $ID ?><br><br><br>
<input type="hidden" name="ID" value="<?php echo $ID; ?>">
氏名
<input type="text" size = "50" name="NAME" value="<?php echo $NAME ?>"><br><br><br>
住所
<input type="text" size = "130"name="ADDR" value="<?php echo $ADDR ?>"><br><br><br>
<BR><BR>
<input type="submit" value = "更新する" style ="font-size:20px; WIDTH: 100px; HEIGHT: 40px">
<A HREF="http://localhost/top.php">
<INPUT TYPE = "button" VALUE = "一覧に戻る" style ="font-size:20px; WIDTH: 140px; HEIGHT: 40px"></A>


update.phpです
<html>
<body>
<blockquote>
<?php
$err = "";
if(empty($_POST['NAME'])) $err.= "<br><br>名前を入力してください。<br><br>";
if(empty($_POST['ADDR'])) $err.= "<br><br>住所を入力してください。<br><br>";
if(empty($err))
{
$pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin");
$st = $pdo->prepare("UPDATE tbl_test SET 氏名=?,住所=?WHERE 番号=?");
$st->execute(array($_POST['NAME'], $_POST['ADDR'],$_POST['ID']));
echo "<br><br>レコードを修正しました<br>";
}else{
echo $err;
}

?>


<br><br><br> <a href="http://localhost/top.php">
<input type = "submit" value = "一覧に戻る" style ="font-size:20px; WIDTH: 150px; HEIGHT: 40px"></A>
</blockquote>
</body>
</html>


どんな感じに書けばいいですか?

投稿日時 - 2014-04-18 09:04:43

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

insert ignore into でデータを投入して、
php側でaffected_rows()やrowCount()で作用した行数を数え
0だった場合にメッセージをだせばいいのでは?

投稿日時 - 2014-04-17 18:31:55

補足

すいません間違えました
こちらが新規登録画面です

<html>
<body>
<blockquote>
<?php
$con=mysqli_connect("localhost","root","admin","db_test");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

if ($_POST['ID'] != '' && $_POST['NAME'] != '' && $_POST['ADDR'] != '')
{
$id = mysqli_real_escape_string($con, $_POST['ID']);
$name = mysqli_real_escape_string($con, $_POST['NAME']);
$addr = mysqli_real_escape_string($con, $_POST['ADDR']);
$sql="INSERT INTO tbl_test (番号, 氏名, 住所) VALUES ('$id','$name','$addr')";
if (!mysqli_query($con,$sql))
{
die('Error: ' . mysqli_error($con));
}
echo "登録完了しました";
} else {
echo "<br>番号が既に登録されている番号か<BR>またはデータが未入力の箇所があります。すべてデータを入力してください";
}



mysqli_close($con);
?>
<br><br><br>
<a href="http://localhost/regist.php">
<INPUT TYPE = "button" VALUE = "登録画面に戻る" style ="font-size:20px; WIDTH: 140px; HEIGHT: 40px"></A>

<br><br><br>
<A HREF="http://localhost/top.php">
<INPUT TYPE = "button" VALUE = "一覧に戻る" style ="font-size:20px; WIDTH: 140px; HEIGHT: 40px"></A>
</blockquote>
</body>
</html>

結構大変ですかね?

投稿日時 - 2014-04-18 09:08:33

お礼

ありがとうございます

下記は更新画面になります
こちらのプログラムをアップデートphpに送っています
<head>
<body>
<blockquote>
<br><br>
更新画面
<br><br><br>
<?php
$ID = htmlspecialchars($_GET['番号']);
$pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin");
$st = $pdo->prepare("SELECT * FROM tbl_test WHERE 番号=?");
$st->execute(array($ID));
$row = $st->fetch();
$NAME = htmlspecialchars($row['氏名']);
$ADDR = htmlspecialchars($row['住所']);
?>
<form action="update.php" method="post">
番号 <?php echo $ID ?><br><br><br>
<input type="hidden" name="ID" value="<?php echo $ID; ?>">
氏名
<input type="text" size = "50" name="NAME" value="<?php echo $NAME ?>"><br><br><br>
住所
<input type="text" size = "130"name="ADDR" value="<?php echo $ADDR ?>"><br><br><br>
<BR><BR>
<input type="submit" value = "更新する" style ="font-size:20px; WIDTH: 100px; HEIGHT: 40px">
<A HREF="http://localhost/top.php">
<INPUT TYPE = "button" VALUE = "一覧に戻る" style ="font-size:20px; WIDTH: 140px; HEIGHT: 40px"></A>


update.phpです
<html>
<body>
<blockquote>
<?php
$err = "";
if(empty($_POST['NAME'])) $err.= "<br><br>名前を入力してください。<br><br>";
if(empty($_POST['ADDR'])) $err.= "<br><br>住所を入力してください。<br><br>";
if(empty($err))
{
$pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin");
$st = $pdo->prepare("UPDATE tbl_test SET 氏名=?,住所=?WHERE 番号=?");
$st->execute(array($_POST['NAME'], $_POST['ADDR'],$_POST['ID']));
echo "<br><br>レコードを修正しました<br>";
}else{
echo $err;
}

?>


<br><br><br> <a href="http://localhost/top.php">
<input type = "submit" value = "一覧に戻る" style ="font-size:20px; WIDTH: 150px; HEIGHT: 40px"></A>
</blockquote>
</body>
</html>


どんな感じに書けばいいですか?

投稿日時 - 2014-04-18 09:04:56

あなたにオススメの質問