register.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <?php
  2. function handleRegisterPost() {
  3. if (!crsf_check()) {
  4. return '页面已过期';
  5. }
  6. if (!isset($_POST['username'])) {
  7. return "无效表单";
  8. }
  9. if (!isset($_POST['password'])) {
  10. return "无效表单";
  11. }
  12. if (!isset($_POST['email'])) {
  13. return "无效表单";
  14. }
  15. $username = $_POST['username'];
  16. $password = $_POST['password'];
  17. $email = $_POST['email'];
  18. if (!validateUsername($username)) {
  19. return "失败:无效用户名。";
  20. }
  21. if (queryUser($username)) {
  22. return "失败:用户名已存在。";
  23. }
  24. if (!validatePassword($password)) {
  25. return "失败:无效密码。";
  26. }
  27. if (!validateEmail($email)) {
  28. return "失败:无效电子邮箱。";
  29. }
  30. $password = getPasswordToStore($password, $username);
  31. $esc_email = DB::escape($email);
  32. $svn_pw = uojRandString(10);
  33. if (!DB::selectCount("SELECT COUNT(*) FROM user_info")) {
  34. DB::query("insert into user_info (username, email, password, svn_password, register_time, usergroup) values ('$username', '$esc_email', '$password', '$svn_pw', now(), 'S')");
  35. } else {
  36. DB::query("insert into user_info (username, email, password, svn_password, register_time, usergroup) values ('$username', '$esc_email', '$password', '$svn_pw', now(), 'B')");
  37. }
  38. return "欢迎你!" . $username . ",你已成功注册。";
  39. }
  40. if (isset($_POST['register'])) {
  41. echo handleRegisterPost();
  42. die();
  43. } elseif (isset($_POST['check_username'])) {
  44. $username = $_POST['username'];
  45. if (validateUsername($username) && !queryUser($username)) {
  46. echo '{"ok" : true}';
  47. } else {
  48. echo '{"ok" : false}';
  49. }
  50. die();
  51. }
  52. ?>
  53. <?php
  54. $REQUIRE_LIB['md5'] = '';
  55. $REQUIRE_LIB['dialog'] = '';
  56. ?>
  57. <?php echoUOJPageHeader(UOJLocale::get('register')) ?>
  58. <h2 class="page-header"><?= UOJLocale::get('register') ?></h2>
  59. <form id="form-register" class="form-horizontal">
  60. <div id="div-email" class="form-group">
  61. <label for="input-email" class="col-sm-2 control-label"><?= UOJLocale::get('email') ?></label>
  62. <div class="col-sm-3">
  63. <input type="email" class="form-control" id="input-email" name="email" placeholder="<?= UOJLocale::get('enter your email') ?>" maxlength="50" />
  64. <span class="help-block" id="help-email"></span>
  65. </div>
  66. </div>
  67. <div id="div-username" class="form-group">
  68. <label for="input-username" class="col-sm-2 control-label"><?= UOJLocale::get('username') ?></label>
  69. <div class="col-sm-3">
  70. <input type="text" class="form-control" id="input-username" name="username" placeholder="<?= UOJLocale::get('enter your username') ?>" maxlength="20" />
  71. <span class="help-block" id="help-username"></span>
  72. </div>
  73. </div>
  74. <div id="div-password" class="form-group">
  75. <label for="input-password" class="col-sm-2 control-label"><?= UOJLocale::get('password') ?></label>
  76. <div class="col-sm-3">
  77. <input type="password" class="form-control" id="input-password" name="password" placeholder="<?= UOJLocale::get('enter your password') ?>" maxlength="20" />
  78. <input type="password" class="form-control top-buffer-sm" id="input-confirm_password" placeholder="<?= UOJLocale::get('re-enter your password') ?>" maxlength="20" />
  79. <span class="help-block" id="help-password"></span>
  80. </div>
  81. </div>
  82. <div class="form-group">
  83. <div class="col-sm-offset-2 col-sm-3">
  84. <button type="submit" id="button-submit" class="btn btn-secondary"><?= UOJLocale::get('submit') ?></button>
  85. </div>
  86. </div>
  87. </form>
  88. <script type="text/javascript">
  89. function checkUsernameNotInUse() {
  90. var ok = false;
  91. $.ajax({
  92. url : '/register',
  93. type : 'POST',
  94. dataType : 'json',
  95. async : false,
  96. data : {
  97. check_username : '',
  98. username : $('#input-username').val()
  99. },
  100. success : function(data) {
  101. ok = data.ok;
  102. },
  103. error : function(XMLHttpRequest, textStatus, errorThrown) {
  104. alert(XMLHttpRequest.responseText);
  105. ok = false;
  106. }
  107. });
  108. return ok;
  109. }
  110. function validateRegisterPost() {
  111. var ok = true;
  112. ok &= getFormErrorAndShowHelp('email', validateEmail);
  113. ok &= getFormErrorAndShowHelp('username', function(str) {
  114. var err = validateUsername(str);
  115. if (err)
  116. return err;
  117. if (!checkUsernameNotInUse())
  118. return '该用户名已被人使用了。';
  119. return '';
  120. })
  121. ok &= getFormErrorAndShowHelp('password', validateSettingPassword);
  122. return ok;
  123. }
  124. function submitRegisterPost() {
  125. if (!validateRegisterPost()) {
  126. return;
  127. }
  128. $.post('/register', {
  129. _token : "<?= crsf_token() ?>",
  130. register : '',
  131. username : $('#input-username').val(),
  132. email : $('#input-email').val(),
  133. password : md5($('#input-password').val(), "<?= getPasswordClientSalt() ?>")
  134. }, function(msg) {
  135. if (/^欢迎你!/.test(msg)) {
  136. BootstrapDialog.show({
  137. title : '注册成功',
  138. message : msg,
  139. type : BootstrapDialog.TYPE_SUCCESS,
  140. buttons: [{
  141. label: '好的',
  142. action: function(dialog) {
  143. dialog.close();
  144. }
  145. }],
  146. onhidden : function(dialog) {
  147. var prevUrl = document.referrer;
  148. if (!prevUrl) {
  149. prevUrl = '/';
  150. };
  151. window.location.href = prevUrl;
  152. }
  153. });
  154. } else {
  155. BootstrapDialog.show({
  156. title : '注册失败',
  157. message : msg,
  158. type : BootstrapDialog.TYPE_DANGER,
  159. buttons: [{
  160. label: '好的',
  161. action: function(dialog) {
  162. dialog.close();
  163. }
  164. }],
  165. });
  166. }
  167. });
  168. }
  169. $(document).ready(function() {
  170. $('#form-register').submit(function(e) {
  171. submitRegisterPost();
  172. return false;
  173. });
  174. });
  175. </script>
  176. <?php echoUOJPageFooter() ?>