
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を見た人はこんなQ&Aも見ています
-
先着1,000名様に1,000円分もらえる!
教えて!gooから感謝をこめて電子書籍1,000円分プレゼント
-
プログラミング言語で繰り返し処理って何ですか?
その他(プログラミング・Web制作)
-
cssでこ要素を親要素の外側に移動させるプロパティ
HTML・CSS
-
同ページへの通信
PHP
-
4
HTMLで全角文字のみ入力するにはどんな文を書けば良いんですか? 半角英数字が入らないようにした方が
HTML・CSS
-
5
ウェブアプリケーションを作る際に、膨大なコードの量になりますがそれは手入力ですか?
その他(プログラミング・Web制作)
-
6
プログラミング独学 発表できる場 中一です。 プログラミングを独学にしようかなと思っています。 今は
その他(プログラミング・Web制作)
-
7
IT生活について行けてますか❓
システム
-
8
SQLiteについて
MySQL
-
9
テーブルの任意の列を非表示にしたい
HTML・CSS
-
10
プログラミング言語について
JavaScript
-
11
プログラミングわからない
JavaScript
-
12
htmlのolやulなどlistにtitleやcaptionをつけられますか?
HTML・CSS
-
13
引数を渡さずに呼び出し元の変数等を参照できますか
JavaScript
-
14
この表の公転周期Tを縦軸に、公転半径aを横軸にした折れ線グラフを作りたいのですが、どちらも横軸になっ
Excel(エクセル)
-
15
Set objMailbox = objNamespace.Folders・・でエラーがでます。
Visual Basic(VBA)
-
16
困ってます!Cプログラミングについてです。
C言語・C++・C#
-
17
DIVのサイズが変わっても文字の位置を固定するには???
HTML・CSS
-
18
JavaScript canvas グラデーションをアニメーションしたい
JavaScript
-
19
htmlで取得した値をjavascriptの変数に代入したい
JavaScript
-
20
c言語でsinx=0(0<x<5)をニュートン法で解くプログラムを教えてください。 全く意味がわかり
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
【HTML(PHP?)】複数のフォーム...
-
5
syntax error, unexpected '}' ...
-
6
フォームのテキストボックスに...
-
7
phpで分からないエラーが出てし...
-
8
入力フォーム→確認画面→送信画...
-
9
チェックボックスから複数のval...
-
10
HTMLのリンクをクリックするこ...
-
11
テキストボックスに初期値を入れる
-
12
検索時の選択内容を保持する方法
-
13
アンケートフォームの作り方
-
14
PHP+MySQLで複数のラジオボタン...
-
15
PHP insert文内での、変数の記...
-
16
チェックボックスを使った複数...
-
17
画面が更新されてもチェックボ...
-
18
チェックボックスのvalueを連結...
-
19
table を配列で取得
-
20
PHPエラー 教えて下さい
おすすめ情報
皆さん、回答ありがとうございます。
ちなみにですが、既存の情報の登録を防止するのにもセッション変数が役に立つのでしょうか?
個人的には既存の情報が登録済みの場合、「既に登録済みです」というコメントを出力できるようにしたいです。