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で質問しましょう!
似たような質問が見つかりました
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
HTMLで前の画面に戻る時、入力...
-
syntax error, unexpected '}' ...
-
PHPで画像の渡しが上手く行きま...
-
フォームへの前回入力値をクリ...
-
ラジオボタンをsessionで使いたい
-
同じページでフォームデータを...
-
PHPで、ボタンを押すと同じペー...
-
文字列から抜き出す
-
<input type="hidden" >で配列...
-
フォームでのリセットを使う方法
-
phpの掲示板で新しい順に表...
-
選択された値をセッションで保...
-
入力フォーム→確認画面→送信画...
-
php ラジオボタンのデータの渡...
-
エラーを元の画面に表示させるには
-
ラジオボタンを押すと、表示が...
-
検索時の選択内容を保持する方法
-
テキストボックスとsubmitボタ...
-
チェックボックスのvalueを連結...
-
smartyでチェックボックスをチ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<input type="hidden" >で配列...
-
検索時の選択内容を保持する方法
-
HTMLで前の画面に戻る時、入力...
-
DBの値をチェックボックスに反...
-
フォームへの前回入力値をクリ...
-
PHPでCookieを使った訪問回数に...
-
PHPで画像の渡しが上手く行きま...
-
PHP ボタンが押されたら処理を...
-
HTMLのリンクをクリックするこ...
-
syntax error, unexpected '}' ...
-
画面が更新されてもチェックボ...
-
チェックボックスのvalueを連結...
-
チェックボックスの必須項目指定
-
PHPでユーザー情報を入力して簡...
-
PHPの関数実行
-
POSTデータのNAME属性をVALUEに...
-
パラメーターを隠す
-
phpで分からないエラーが出てし...
-
PHPで、ボタンを押すと同じペー...
-
テキストボックスに初期値を入れる
おすすめ情報
皆さん、回答ありがとうございます。
ちなみにですが、既存の情報の登録を防止するのにもセッション変数が役に立つのでしょうか?
個人的には既存の情報が登録済みの場合、「既に登録済みです」というコメントを出力できるようにしたいです。