【ajax+MySQL】ユーザーIDやメールアドレスが既に登録されている場合にアラートを出す(重複登録を防止)

2019-08-22    729   1853

会員登録制のサイトでは当たり前に必要となる重複登録を防止する機能。
ページ遷移なく、重複を確認する方法の手順をメモとして残します。

会員登録の画面では、ユーザーID及びメールアドレスの重複を防ぐ必要性があります。
下記のコード例では、id名「inpMail」の入力フォームからフォーカスが外れた際に、重複チェックがされる仕組みとなっています。

<HTML+jQuery>


<!----><!----><form method="post" action="?">
    <!----><!----><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>
「ajax_unique_check.php」に3つのデータを送信しています。
tableはデータベースのテーブル名。fuildはテーブルのフィールド(カラム)名です。

<PHP(ajax_unique_check.php)>


<?php
$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);
?>
DBに既に登録されている場合は1(true)をフラグとしてjavascript側に返しています。
自作PHP派の方にとって参考になってくれれば幸いです(^^)

カテゴリ: PHP

comment 登録なしでご自由にご入力いただけます(^^)ぜひぜひ記事のご感想をお聞かせ下さい。

anonymous2019年10月9日

SQLインジェクション考慮してください

返信
m2net2019年10月10日

コメントありがとうございます。SQLインジェクションはサイト運営側のサーバーへの影響しかないと思います。データベースの中身を書き換えられたり、見られたりというものですよね。ですので、見てる側にはウイルス感染の支障は全くありません。

1 返信
nnn2020年1月4日

blurイベントでajaxをphp側に飛ばした際に、ajax_unique_check.phpに要する時間はどのくらいでしょうか?

1 返信
m2net2020年1月6日

大体の場合は一瞬ですけど、サーバーによって異なります。1秒くらいかかるときもありまし、全然反応しないこともありますので、PHP側でも重複チェックのコードを仕込んでおくと万全です。

返信
delicon2021年4月19日

ここでajax_unique_check.phpをurlで指定していますが、
この時ajax_unique_check.phpはフルパスを指定しなくてもよいのですか?
自分も同じようなことをしたいのですが、urlにどうやってファイル名を指定し、どこにphpファイルをセットしたらいいか分かりません。

返信

お名前とコメントは入力必須です。

コメントの文字数が短すぎます。

この内容でコメントを送る
コメントをする

目が疲れている方向けにラジオ系Youtubeを始めました

オススメのPHPに関する記事

この記事がお役に立てましたら是非シェアのご協力お願いします。