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

2019-08-22    193   322

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

会員登録の画面では、ユーザー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 登録なしでご自由にご入力いただけます(^^)ぜひぜひ記事のご感想をお聞かせ下さい。

anonymous10月9日

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

返信
m2net10月10日

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

返信

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

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

この内容でコメントを送る
コメントをする
この記事がお役に立てましたら是非シェアのご協力お願いします。