重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

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

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


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

A 回答 (2件)

やり方は2つ


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

この回答への補足

すいません間違えました
こちらが新規登録の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
    • good
    • 0
この回答へのお礼

ありがとうございます

下記は更新画面になります
こちらのプログラムをアップデート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

insert ignore into でデータを投入して、


php側でaffected_rows()やrowCount()で作用した行数を数え
0だった場合にメッセージをだせばいいのでは?

この回答への補足

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

<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
    • good
    • 0
この回答へのお礼

ありがとうございます

下記は更新画面になります
こちらのプログラムをアップデート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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す