<?php error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED); session_start(); require_once '../lib/mysql.php'; require_once '../lib/user.class.php'; require_once '../lib/lib.php'; require_once '../lib/qdmail.php'; $user = new user(); //print_r($_POST); $error = null; if (isset($_POST['name']) && isset($_POST['pass']) && isset($_POST['pass2']) && isset($_POST['email'])){ $con = new mysqliEx('contents'); $result = register(); $con->close(); if ($result === true){ $tmp = "<p>アカウント情報の登録を受け付けました。<br />現在、仮登録状態のため、あなたのアカウントにログインすることはできません。<br />"; $tmp .= "この登録を完了するために、登録メールアドレスへ有効化のためのURLを送信しました。<br />"; $tmp .= "お手数ですが、メールをご確認いただき、24時間以内にアクティベーションをお願いいたします。<p>"; $_SESSION["alert-header"] = "ユーザ情報登録を行いました"; $_SESSION["alert"] = $tmp; header("Location: /"); exit; }else{ $error = $result; } } // placeholder $uservalue = (isset($_POST['name'])) ? htmlspecialchars($_POST['name'], ENT_QUOTES) : ""; //$passvalue = (isset($_POST['pass'])) ? $_POST['pass'] : ""; //$pass2value = (isset($_POST['pass2'])) ? $_POST['pass2'] : ""; $emailvalue = (isset($_POST['email'])) ? htmlspecialchars($_POST['email'], ENT_QUOTES) : ""; function register(){ global $_POST, $con; $name = $_POST['name']; $pass = $_POST['pass']; $pass2 = $_POST['pass2']; $mail = $_POST['email']; // name if (!isValidName($name)){ return "不正なユーザーIDです!"; } $res = $con->query('SELECT `id` FROM `'.TPREFIX.'pic_user` WHERE `user_id` = "'.$con->escape_string($name).'"'); if ($res === false) return("データベースへの接続に失敗しました"); if ($res->num_rows > 0){ return "既に登録されているユーザーIDです!"; } // pass if (strlen($pass) !== mb_strlen($pass, "UTF-8")){ return "不正な文字がパスワードに含まれています!"; } $tmp = strlen($pass); if ($tmp < 6 || $tmp > 20){ return "パスワードの文字数が不正です! 6 ~ 20文字で入力してください!"; } if ($pass !== $pass2){ return "確認のパスワードが一致していません!"; } // mail if (!isValidMail($mail)){ return "不正なメールアドレスです!"; } if (strlen($mail) > 100){ return "このメールアドレスはご利用いただけません"; } $res = $con->query('SELECT `id` FROM `'.TPREFIX.'pic_user` WHERE `email` = "'.$con->escape_string($mail).'"'); if ($res->num_rows > 0){ return "既に登録されているメールアドレスです!"; } // prepare variables $encrypted = hash('SHA512', $pass); $now = time(); $actKey = getRandomActKey(); // insert table $query = 'INSERT INTO `'.TPREFIX.'pic_user` (`user_id`, `password`, `email`, `regdate`, `act_key`, `reg_ip`, `last_ip`) '; $query .= 'VALUES (?, ?, ?, ?, ?, ?, ?)'; $stmt = $con->prepare($query); $stmt->bind_param('sssisss', $name, $encrypted, $mail, $now, $actKey, $_SERVER['REMOTE_ADDR'], $_SERVER['REMOTE_ADDR']); $stmt->execute(); if ($stmt->affected_rows !== 1){ return "内部エラーのためユーザ登録に失敗しました!管理人へご連絡ください!"; } // send activation e-mail $title = "あなたの pic.sakura-server.net アカウントをアクティベートしてください"; $body = $name." さん\n\n"; $body .= "SakuraServer画像共有サービスにサインアップしていただきありがとうございます。\n"; $body .="あなたのアカウントはまだ有効化されていません。次のリンクをクリックして、アカウントをアクティベートしてください:\n"; $body .= "http://pic.sakura-server.net/activate/".$actKey."?user=".$name."\n\n"; $body .= "--SakuraServer Share pictures\n http://pic.sakura-server.net"; $m = new Qdmail(); $m->to($mail, $name); $m->from('noreply@sakura-server.net', "SakuraServer Pictures"); $m->subject($title); $m->text($body); $m->send(); return true; } function getRandomActKey($nLengthRequired = 16){ // excludes: i, l, I, O, 0 $sCharList = "abcdefghjkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789_"; mt_srand(); $sRes = ""; for($i = 0; $i < $nLengthRequired; $i++){ $sRes .= $sCharList[mt_rand(0, strlen($sCharList) - 1)]; } return $sRes; } ?> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8"/> <title>Create account - pic.sakura-server.net</title> <?php include '../includes/imports.php'; ?> </head> <body> <?php include '../includes/header.php'; ?> <div id="wrapper"> <div id="content" class="xfluid"> <?php if($error != null){ $html = <<< EOF <div class="portlet x12"> <div class="portlet-header"><h4>Error!</h4></div> <div class="portlet-content"> %ERROR% </div> </div> EOF; print str_replace("%ERROR%", $error, $html); } ?> <div class="portlet x8"> <div class="portlet-header"><h4>Create account</h4></div> <div class="portlet-content"> <form id="make_account-form" class="form-horizontal" name="make_account" action="make_account" method="post"> <div id="err_name" class="control-group"> <label class="control-label" for="inputUser">ユーザー名</label> <div class="controls"><input type="text" id="inputUser" name="name" placeholder="ユーザー名" value="<?=$uservalue;?>" required> <span class="help-inline">2~16文字 半角英数字とアンダーバーが使用できます</span></div> </div> <div class="control-group err_pass"> <label class="control-label" for="inputPass">パスワード</label> <div class="controls"><input type="password" id="inputPass" name="pass" autocomplete="off" placeholder="パスワード" required> <span class="help-inline">6~20文字 半角英数記号が使用できます</span></div> </div> <div class="control-group err_pass"> <label class="control-label" for="inputPass2">パスワード(確認)</label> <div class="controls"><input type="password" id="inputPass2" name="pass2" autocomplete="off" placeholder="パスワード" required></div> </div> <div id="err_email" class="control-group"> <label class="control-label" for="inputEmail">メールアドレス</label> <div class="controls"><input type="email" id="inputEmail" name="email" placeholder="メールアドレス" value="<?=$emailvalue;?>" required> <span class="help-inline">受信可能な正しいメールアドレスをご入力ください</span></div> </div> <div id="err_confirm" class="control-group"> <label class="control-label" for="inputConfirm">確認</label> <div class="controls"> <label class="checkbox"><input id="inputConfirm" type="checkbox"> <a href="/terms" target="_blank">利用規約</a>に同意します </label> </div> </div> <div class="controls"><button id="submit" class="btn btn-primary">上記の内容で登録</button></div> </form> </div> </div> <div class="portlet x4"> <div class="portlet-header"><h4>利用規約</h4></div> <div class="portlet-content"> <p>当サービスの利用を始める前に、<a href="/terms" target="_blank">利用規約</a>をご覧ください。</p> </div> </div> <div class="portlet x4"> <div class="portlet-header"><h4>ステートメント</h4></div> <div class="portlet-content"> <p>登録されたメールアドレスは、アカウントの有効化と、何らかの問題が発生した場合のご連絡にのみ使用します。その他の目的では一切使用致しません。</p> <p>パスワードについては、強固な暗号化技術を用いて暗号化を行い、適切なアクセス制御を行っているデータベース上に保存されます。ですが一般的に、他のウェブサイトやサービスなどで利用されているものと同一のパスワードを使用することは、セキュリティ上推奨されません。</p> <p>他者による意図しないアカウントの利用を防ぐために、強固なパスワードをご設定ください。</p> </div> </div> </div> <?php include '../includes/footer.php'; ?> </div> <script type="text/javascript" charset="utf-8"> $("#submit").click(function(){ if (!validate()){ alert("内容に不備があります!"); return false; } return true; }); function validate(){ var error = false; // name var tmp = $("#inputUser").val().length; if (tmp < 2 || tmp > 16){ $("#err_name").addClass("error"); error = true; }else{ $("#err_name").removeClass("error"); } // password var tmp = $("#inputPass").val().length; if (tmp < 6 || tmp > 20 || ($("#inputPass").val() != $("#inputPass2").val())){ $(".err_pass").addClass("error"); error = true; }else{ $(".err_pass").removeClass("error"); } // email if ($("#inputEmail").val().length <= 3){ $("#err_email").addClass("error"); error = true; }else{ $("#err_email").removeClass("error"); } // checkbox if (!($("#inputConfirm").attr('checked'))){ $("#err_confirm").addClass("error"); error = true; }else{ $("#err_confirm").removeClass("error"); } return (!error); } </script> </body> </html>