7

PHP を使用して、フォームからデータベース テーブルへの値の重複を防止したいと考えています。

私は以下を作成しました:

clientという名前のテーブルを持つデータベース:

CREATE TABLE clients(
 firstName varchar(20),
 lastName varchar(20),
 primary key(firstName, lastName));

form.htmlという名前の単純なフォーム

<h2>Enter your First and Last Name</h2>
<form action="frm_script.php" method="post">
<p><strong>First Name:</strong><br /> <input type="text" name="firstName" /></p>
<p><strong>Last Name:</strong><br /> <input type="text" name="lastName"/></p>
<input type="submit" name="submit" value="Add Customer" />
</form>

frm_script.phpという名前のフォーム処理スクリプト

<?php
if(isset($_POST['submit']))
{

//get the name and comment entered by user
$firstName = $_POST['firstName'];
$lastName = $_POST['lastName'];

//connect to the database
$dbc = mysqli_connect('host', 'username', 'password', 'dbname') or die('Error connecting to MySQL server');

//insert results from the form input
$query = "INSERT IGNORE INTO clients(firstName, lastName) VALUES('$firstName', '$lastName')";

$result = mysqli_query($dbc, $query) or die('Error querying database.');

mysqli_close($dbc);
}
echo "Customer Added";
?>

これまでのところ、私のfrm_script.phpファイルでは上記が機能し、顧客が追加した一意のレコードが表示されます。ただし、重複レコードの場合は、「エラー クエリ データベース」がスローされます。

次のようにfrm_script.phpスクリプトを更新するにはどうすればよいですか?

名/姓の組み合わせを入力する際に​​重複する行が見つかった場合は、そのレコードとともに「クライアントは既にリストされています」というメッセージが表示されます。

フォームに名/姓の組み合わせを入力したときに重複する行が見つからない場合は、エントリがデータベースに挿入され、「顧客が追加されました」というメッセージが表示されます。

最初に SELECT を実行してから INSERT を実行する必要があることを読みましたが、これを既存のコードに実装する方法がわかりません。

4

4 に答える 4

3

主キーは (firstName, lastName) であるため、重複した値の挿入を防ぐために php は必要ありません。主キーは一意でなければならないため、Mysql がそれを行います。
(主キーでない場合は、一意の制約を使用できます)

重複するエントリに「クライアントは既にリストされています」というエラー メッセージを表示するmysqli_errno($dbc)には、エラー コードを使用して確認できます1062。あなたが望むことを

するはずのクイックフィックス:or die('Error querying database.');
or die(mysqli_errno($dbc) == 1062 ? "Client already listed" : 'Error querying database.');

于 2013-10-31T20:50:19.643 に答える