アプリ版:「スタンプのみでお礼する」機能のリリースについて

携帯サイトを構築しております。登録画面にてSELECT+INSERT文にてDuplicate entry for keyというエラーがでてしまいます。解決方法がわからない状態です。ご教授お願いいたします。ちなみにIDはPRIMARYでauto_incrementで、mailとNoは個別でUNIQUE KEYに設定しております。
<?php
// データベースに接続する
$conn = mysql_connect("xxxx","xxxxx","123456") or die("接続エラー");
mysql_query("set character set sjis") or die("エラー");
mysql_select_db("aaa") or die("接続エラー");

//すでに登録済みかどうか調べる
$sql = sprintf("SELECT mail,No FROM users where (mail = '%s')or(No = '%s')",
mysql_real_escape_string($mail),
mysql_real_escape_string($No));

$res = mysql_query($sql, $conn) or die("データ抽出エラー");
$count = mysql_num_rows($res);

//データが抽出できたときはすでに登録済みと判断できる
if($count > 0) {
print '<font color="red">既に登録されております</font><br />
<a href="login.html">こちらからログインしてください</a>';

}
?>
<?php

DBに接続
$con = mysql_connect("xxxxxxx","xxxxxx","4123456")or die(mysql_error());
mysql_query("set character set sjis") or die("エラー");
mysql_select_db("xxxxxxx")or die(mysql_error());
$sql = "INSERT INTO users(name,kana,nick,sex,pass,mail,No,date)VALUES('".$name."','".$kana."','".$nick."','".$sex."','".$pass."','".$mail."','".$No."',NOW())";
$res = mysql_query($sql) or die(mysql_error());
mysql_close($con);


function mysql_insert_string($table_name, $values) {
$names = '`'.implode('`,`', array_keys($values)).'`';
$values = implode(',', array_map(mysql_escape, $values));

return "INSERT INTO `{$table_name}` ({$names}) VALUES({$values});";
}

function mysql_escape($value) {
switch (true) {
case is_null($value) : return 'NULL';
case is_bool($value) : return $value ? 1 : 0;
case is_numeric($value) : return $value;
default : return "'".mysql_real_escape_string($value)."'";
}
}
?>

A 回答 (1件)

ユーザーが「再読み込み」か「戻るボタン」を押した為、同じINSERTが実行された可能性もあると思います。


原因がわからないときは、ログ出力処理を追加して、異常発生時に原因がわかるように対策したらよいと思います。
    • good
    • 0
この回答へのお礼

回答ありです!例えばですが、1度ユーザーが既に登録済みだった場合、またそのユーザーが登録しようとしたときにこのエラーがでるのですが、それを出さないようにしたいのですが、可能でしょうか?

お礼日時:2010/06/22 17:44

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