【ajax+MySQL】ユーザーIDやメールアドレスが既に登録されている場合にアラートを出す(重複登録を防止)
2019-08-22 729 1853会員登録制のサイトでは当たり前に必要となる重複登録を防止する機能。
ページ遷移なく、重複を確認する方法の手順をメモとして残します。
会員登録の画面では、ユーザーID及びメールアドレスの重複を防ぐ必要性があります。
下記のコード例では、id名「inpMail」の入力フォームからフォーカスが外れた際に、重複チェックがされる仕組みとなっています。
<HTML+jQuery>
<!----><!----><form method="post" action="?">「ajax_unique_check.php」に3つのデータを送信しています。
<!----><!----><table>
<tr>
<th>ログインID(メールアドレス)</th>
<td><input type="text" name="mail" id="inpMail"></td>
</tr>
</table>
<button>この内容で登録する</button>
</form>
<!----><!----><script src="/js/jquery.min.js"></script>
<!----><!----><script>
$('#inpMail').blur(function() {
var check_str = $(this).val();
if(check_str){
$.ajax({
url: 'ajax_unique_check.php',
type:"POST",
data:{
check: check_str,
table: 'member',
fuild: 'mail',
}
}).done(function(flag){
if(flag == 1){
alert('そのメールアドレスは既に登録されています');
$('#inpMail').val('');
}
})
}
});
</script>
tableはデータベースのテーブル名。fuildはテーブルのフィールド(カラム)名です。
<PHP(ajax_unique_check.php)>
<?phpDBに既に登録されている場合は1(true)をフラグとしてjavascript側に返しています。
$check = $_POST['check']; //チェックする文字列
$table = $_POST['table']; //DBのテーブル名
$fuild = $_POST['fuild']; //フィールド名
$rst = $mysqli->query("SELECT `id` FROM `{$table}` WHERE `{$fuild}` = '{$check}' LIMIT 1");
$row = $rst->fetch_assoc();
$flag = ($row['id'])?1:0;
header('Content-Type: application/json; charset=utf-8');
echo json_encode($flag);
?>
自作PHP派の方にとって参考になってくれれば幸いです(^^)