PHP,HTMLで顧客登録画面を作っていて、同じ情報を登録できないようにしたいのですが、どうやったらそんなプログラムができるんでしょうか?いろんな人の意見を知りたいです。
一応ソースコードを載せておきます。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta charset="utf8">
<meta name="viewport" content="width=device-width">
<title>顧客登録</title>
<link rel="stylesheet" href="ser_style.css">
<script type="text/javascript">
function check(){
var flag = 0;
if(document.form1.C_name.value == ""){
flag = 1;
}
else if(document.form1.C_num.value == ""){
flag = 1;
}
else if(document.form1.C_phon.value == ""){
flag = 1;
}
else if(document.form1.C_sa.value == ""){
flag = 1;
}
if(flag){
window.alert('項目に未入力がありました'); // 入力漏れがあれば警告ダイアログを表示
return false;
}
else{
return true;
}
}
</script>
</head>
<body>
<div class="content">
<h1>顧客登録</h1>
<form action="c_regi_veri.php" method="GET" name="form1" onSubmit="return check()">
<div class="control">
<label for="C_name">顧客名(全角カナのみ入力可)<span class="required">必須</span></label>
<input pattern="[^\x20-\x7E]*" id="C_name" type="text" name="C_name" value=""/>
</div>
<div class="control">
<label for="C_num">顧客番号(修正不可、半角数字のみ入力可)<span class="required">必須</span></label>
<input id="C_num" type="number" name="C_num" value=""/>
</div>
<div class="control">
<label for="C_phon">顧客電話番号(11桁まで入力可)<span class="required">必須</span></label>
<input id="C_phon" type="tel" type="tel" maxlength="11" name="C_phon" value=""/>
</div>
<div class="control">
<label for="C_sa">顧客住所<span class="required">必須</span></label>
<input id="C_sa" type="text" name="C_sa" value=""/>
</div>
<div class="control">
<input type="submit" value="登録">
</div>
</form>
<form action="menu.php" method="GET">
<div class="control">
<input type="submit" value="メニューへ">
</div>
</form>
</div>
</body>
</html>
No.3ベストアンサー
- 回答日時:
案1. 識別子(token)で重複対策
(No.1 の回答にある「シリアル番号」と同じです)
PHP にてセッションを使用する様に設定する
https://www.php.net/manual/ja/intro.session.php
↓
入力画面 PHP にて識別子を生成 (one time token)
識別子をフォーム内に加える (hidden要素)
セッションに識別子を記憶する
↓
登録画面 PHP にて、フォーム情報とセッションから両者を読み出す
両者を突き合わせて一致したら成功
成功したら、セッションから識別子を削除
↓
重複送信しても、二回目は一致せず失敗する
おまけに CSRF による外部からの攻撃も失敗する
案2. 登録済み情報を検証して重複対策
名寄せの精度を高めるため、入力フォーム値を正規化する
例) 電話番号はハイフンや括弧を削除、全角は半角に変換
↓
登録済み情報を検索して、同じ値があるか検証
例) 顧客番号に同じ値があるなら登録失敗
↓
名寄せして危険な値があれば警告 or 確認画面を表示する
例) 名前と住所が一致する値があれば、重複の可能性が高いと警告
例) 携帯型の電話番号で一致する値があれば、重複の可能性が高いと警告
例) 名前と電話番号と住所が一致するなら、ほぼ重複として失敗
No.2
- 回答日時:
>ここでいうシリアル番号
多重登録の防止なので、ページにたいしてなにかユニークなキーをつける、ということです。セッションキーのようなものです。あくまで、例えば、なので。
No.1
- 回答日時:
同じ画面の二度押し防止ならいくつか手段があります。
1)サブミットボタンが押されたら、ボタンをJSで無効にする。
→JSをハックされたらダメですが、そこまで想定しなくていいなら簡単
2)ページにシリアル番号をHIDDENで埋め込み、登録時にチェックする
など。
同一人物からの、意図的な二重登録禁止は、「名寄せ」という概念であるていど判別できます。
面倒なことを避けたいなら、上記だと、「電話番号」かな・・・
名前は、女性だと苗字が変わることもあるし。
回答ありがとうございます。
すいません、回答でわからないところがあるのですが、ここでいうシリアル番号というのは顧客名や顧客番号などのことをいうのですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
<input type="hidden" >で配列...
-
phpでのボタン押下の活性・非活...
-
PHPで画像の渡しが上手く行きま...
-
画像ボタンをクリックした時の...
-
検索時の選択内容を保持する方法
-
MySQL+PHPでキーワード検索を...
-
phpで分からないエラーが出てし...
-
POSTやGETの変数をフォーム無し...
-
HTMLで前の画面に戻る時、入力...
-
チェックボックスでの送信
-
特殊文字のエスケープについて
-
チェックボックスから複数のval...
-
チェックボックスの受け渡し
-
このような問い合わせフォーム...
-
ラジオボタンのチェックを判定...
-
フォームへの前回入力値をクリ...
-
PHP : チェックボックスの判断は?
-
SESSIONを使用したユーザ登録を...
-
現在ラジオボタンのデータベー...
-
PHP insert文内での、変数の記...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
HTMLで前の画面に戻る時、入力...
-
PHP ボタンが押されたら処理を...
-
<input type="hidden" >で配列...
-
検索時の選択内容を保持する方法
-
フォームへの前回入力値をクリ...
-
フォームでのリセットを使う方法
-
PHPで画像の渡しが上手く行きま...
-
画面が更新されてもチェックボ...
-
フォームボタンを押すたびに数...
-
ラジオボタンをsessionで使いたい
-
テキストボックスに初期値を入れる
-
syntax error, unexpected '}' ...
-
【HTML(PHP?)】複数のフォーム...
-
チェックボックスの必須項目指定
-
HTMLのリンクをクリックするこ...
-
DBの値をチェックボックスに反...
-
複数チェックボックスの入力制...
-
チェックボックスのvalueに変数...
-
input nameで日本語を使うと
-
POSTデータのNAME属性をVALUEに...
おすすめ情報
皆さん、回答ありがとうございます。
ちなみにですが、既存の情報の登録を防止するのにもセッション変数が役に立つのでしょうか?
個人的には既存の情報が登録済みの場合、「既に登録済みです」というコメントを出力できるようにしたいです。