ホーム

会員登録の際に被らないようにする実装 - PHP

これは、完全に自分用のメモです。会員登録の際、ポストで飛んできたデータをMYSQLのデータベースに既に登録されているデータと被らないか判定して、もし被っていた場合は登録させないという実装になります。

言語はPHPとPODを用いています。判定内容は「ユーザーネームとメールアドレス、どちらもデータベースの既に存在するユーザーネームとメールアドレスに同じものがなければ登録完了」という実装です。

最初にデータベースのユーザーネームカラムのデータ全てを、ポストで飛んできた値と比較します、その後にデータベースのメールアドレスカラムのデータ全てを、ポストで飛んできた値と比較します。

感想

下記のコードは多くの問題があります。まず、データが存在しない場合`foreach`が動かず登録ができない。それから`$username_flag = "string";`と`$mail_flag = "string";`の変数を用いて最終的にDBの中にPOSTされてきたデータが存在するかを確認しているけどスマートなやり方とは思えない。後if文が多すぎだし複雑だし不親切極まりない。きっと後で読む人がだるく感じる。スマートじゃない。

実装

<?php

// echo "名前は".$_POST["UserName"].
// "アドレスは".$_POST["mail"].
// "パスワードは".$_POST["password"].
// "ニュースレターは". $_POST["newsletter"];

if ($_POST["newsletter"] != 'on') {$newsletter = 'off';};
if ($_POST["UserName"] != '' && $_POST["mail"] != '' && $_POST["password"] != '') {
try {
$dbh = new PDO('mysql:host=localhost;dbname=db_name', 'root', ' password');
} catch (PDOException $e) {
print "エラー!: " . $e->getMessage() . "<br/>";
die();
}
$smtt = $dbh->query('select * from tbl_userdata');
$select_data = $smtt->fetchAll(PDO::FETCH_ASSOC);
//ポストで飛んできたデータとDBの値を参照するために必要な変数
$username_flag = "string";
$mail_flag = "string";

foreach ($select_data as $valuee) {
if ($valuee['username'] == $_POST["UserName"]){
//echo "ユーザーネームが存在したからループを終了させる";
//echo $valuee['username'];
$username_flag = "ユーザーネームが存在したからループを終了させる";
break;
}else{
//echo "ユーザーネームは存在しない";
$username_flag = "ユーザーネームは存在しない";
};

if ($valuee['mail'] == $_POST["mail"]){
//echo "メールアドレスは存在したからループを終了させる";
//echo $valuee['mail'];
$mail_flag = "メールアドレスは存在したからループを終了させる";
break;
}else{
//echo "メールアドレスは存在しない";
$mail_flag = "メールアドレスは存在しない";
};
};

if ($mail_flag == "メールアドレスは存在しない" && $username_flag == "ユーザーネームは存在しない") {

echo "登録完了しました";
// クッキーを設定します
setcookie("cookie[password]", $_POST["password"], time()+3600, "./"); // 有効期限1時間
setcookie("cookie[mail]", $_POST["mail"], time()+3600, "./"); // 有効期限1時間
setcookie("cookie[UserName]", $_POST["UserName"], time()+3600, "./"); // 有効期限1時間
#値をdbにインサートする
$stmt = $dbh -> prepare("INSERT INTO tbl_userdata (username, mail, password, newsletter) VALUES (:username, :mail, :password, :newsletter)");
$stmt->bindParam(':username', $_POST["UserName"], PDO::PARAM_STR);
$stmt->bindParam(':mail', $_POST["mail"], PDO::PARAM_STR);
$stmt->bindParam(':password', $_POST["password"], PDO::PARAM_STR);
$stmt->bindParam(':newsletter', $newsletter, PDO::PARAM_STR);
$stmt->execute();
}else{
echo "登録失敗(名前、もしくはメールアドレスが既に存在します)";
};
}else{
//echo "入力されていないフィールフォがあるため何も実行しない";
};
?>
Pocket
LinkedIn にシェア

エンジニアにおすすめできる本

Card image cap
リーダブルコード

より良いコードを書くためのシンプルで実践的なテクニック

Card image cap
Webを支える技術

HTTP,URI,HTML,そしてREST

Card image cap
誰でもPythonで作れる

儲かるAIとソフトウェアの作り方

Card image cap
プログラマが知るべき97のこと

現場で使える実践哲学のマスターピース

Card image cap
情熱プログラマー

時代を超えて。ソフトウェア開発者の幸せな生き方

Card image cap
アジャイルサムライ

プログラミング達人開発者への道

Card image cap
Rubyを作った男 まつもとゆきひろ

コードの世界 スーパー・プログラマになる14の思考法

ご提供 sponsor
 

Meee!(ミー)は、ビジネスからプライベート利用まで、個人のスキルを気軽に売り買いできるスキルマーケットです。カテゴリや居住地から、検索することが可能です。

 

ランゲージエクスチェンジは、ネイティブスピーカーと気軽にマッチングできる言語交換プラットフォームです。あなたの地元に住む外国人を探したり、留学や海外移住の前に、現地のネイティブスピーカーと繋がることもできます!

宣伝
 

りょすけトークchは、仕事や私生活をより豊にするYouTubeチャンネルです。文献(本、映画、論文)から役に立つ情報をまとめ、生涯にわたり役に立つ哲学をお届けしています。是非、チャンネル登録してみてね

-ホーム

Copyright© offブログ! , 2021 All Rights Reserved Powered by AFFINGER5.