За последние 24 часа нас посетили 16774 программиста и 1607 роботов. Сейчас ищут 1313 программистов ...

Скрипт регистрации (help)

Тема в разделе "Сделайте за меня", создана пользователем Snwdn, 9 май 2019.

  1. Snwdn

    Snwdn Новичок

    С нами с:
    9 май 2019
    Сообщения:
    5
    Симпатии:
    0
    Код (Text):
    1.  
    2. <?php
    3. require "config/config.php";
    4.  
    5. $dsn = sprintf('mysql:host=%s;dbname=%s', $configs['database']['host'], $configs['database']['database']);
    6.  
    7. $db = new PDO($dsn, $configs['database']['username'], $configs['database']['password']);
    8.  
    9. $view_success = false;
    10.  
    11. $register = isset($_POST['register']) ? (array)$_POST['register'] : false;
    12.  
    13. $errors = [];
    14.  
    15. if ($register) {
    16.  
    17.     foreach ($register as $key => $row) {
    18.  
    19.         $row = trim($row);
    20.  
    21.         if (empty($row)) {
    22.             $errors[$key] = 'Поле обязательно к заполнению.';
    23.             continue;
    24.         }
    25.  
    26.         if (strlen($row) < $configs['validation'][$key]['min_length']) {
    27.             $errors[$key] = "Длина поля должна составлять не менее {$configs['validation'][$key]['min_length']} символов.";
    28.             continue;
    29.         }
    30.  
    31.         if (strlen($row) > $configs['validation'][$key]['max_length']) {
    32.             $errors[$key] = "Длина поля должна быть не более {$configs['validation'][$key]['max_length']} символов.";
    33.             continue;
    34.         }
    35.  
    36.         if (['$password2'] != ['$password'] )
    37.         {
    38.         $errors[$password2] = 'Пароли не совпадают';
    39.         continue;
    40.         }
    41.  
    42.         if ($key !== 'email' && preg_match($configs['validation'][$key]['preg_match'], $row)) {
    43.             $errors[$key] = 'В поле содержатся недоступстимые символы.';
    44.             continue;
    45.         }
    46.  
    47.         if ($key === 'email' && !filter_var($row, FILTER_VALIDATE_EMAIL)) {
    48.             $errors[$key] = 'Неверный E-mail адрес.';
    49.             continue;
    50.         }
    51.  
    52.         if ($key === 'login') {
    53.             $stmt = $db->prepare('SELECT 1 FROM users WHERE name=?');
    54.             $stmt->execute([$row]);
    55.  
    56.             if ($stmt->fetchColumn()) {
    57.                 $errors[$key] = 'Логин уже используется.';
    58.                 continue;
    59.             }
    60.         }
    61.  
    62.         if ($key === 'email') {
    63.             $stmt = $db->prepare('SELECT 1 FROM users WHERE email=?');
    64.             $stmt->execute([$row]);
    65.  
    66.             if ($stmt->fetchColumn()) {
    67.                 $errors[$key] = 'E-mail уже используется.';
    68.                 continue;
    69.             }
    70.         }
    71.     }
    72.  
    73.     if (!count($errors)) {
    74.  
    75.         if (checkCaptcha()) {
    76.  
    77.             $max_user_id = $db->prepare('SELECT MAX(id) AS id FROM users LIMIT 1');
    78.             $max_user_id->execute([]);
    79.             $max_user_id = $max_user_id->fetchColumn();
    80.  
    81.             if (!$max_user_id) {
    82.                 $max_user_id = 16;
    83.             }
    84.  
    85.             $new_user_id = $max_user_id += 16;
    86.  
    87.             $date = date('Y-m-d H:i:s');
    88.  
    89.             $new_user = [
    90.                 $new_user_id,
    91.                 $register['login'],
    92.                 passwordHash($register['login'], $register['password']),
    93.                 $register['email'],
    94.                 $date,
    95.                 $_SERVER['REMOTE_ADDR'],
    96.                 passwordHash($register['login'], $register['password']),
    97.             ];
    98.  
    99.             $create = $db->prepare('INSERT INTO users SET id=?,name=?,passwd=?,email=?,creatime=?,qq=?,passwd2=?');
    100.             $create->execute($new_user);
    101.  
    102.             if ($configs['setting']['gold_count'] > 0) {
    103.  
    104.                 $new_cash = [
    105.                     $new_user_id,
    106.                     $configs['setting']['zone_id'],
    107.                     $configs['setting']['zone_id'],
    108.                     $configs['setting']['gold_count'],
    109.                     $date,
    110.                 ];
    111.  
    112.                 $gold = $db->prepare("INSERT INTO usecashnow SET userid=?,zoneid=?,aid=?,cash=?,status='1',creatime=?");
    113.                 $gold->execute($new_cash);
    114.             }
    115.  
    116.             $view_success = true;
    117.  
    118.         } else {
    119.             $reCaptcha_error = 'Повторите попытку.';
    120.         }
    121.  
    122.     }
    123. }
    124.  
    125. function passwordHash($login, $password)
    126. {
    127.     global $configs;
    128.  
    129.     switch ($configs['setting']['encode_type']) {
    130.         case 1:
    131.             $salt = '0x' . md5($login . $password);
    132.             break;
    133.         case 2:
    134.             $salt = base64_encode(md5($login . $password, true));
    135.             break;
    136.         default:
    137.             $salt = '0x' . md5($login . $password);
    138.             break;
    139.     }
    140.  
    141.     return $salt;
    142. }
    143.  
    144. function checkCaptcha()
    145. {
    146.     global $configs;
    147.  
    148.     if (!$configs['reCaptcha']['enable']) {
    149.         return true;
    150.     }
    151.  
    152.     $g_response = isset($_POST['g-recaptcha-response']) ? (string)$_POST['g-recaptcha-response'] : 0;
    153.  
    154.     $ch = curl_init();
    155.     curl_setopt($ch, CURLOPT_URL, 'https://www.google.com/recaptcha/api/siteverify');
    156.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    157.     curl_setopt($ch, CURLOPT_POST, true);
    158.     curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
    159.     curl_setopt($ch, CURLOPT_POSTFIELDS, "secret={$configs['reCaptcha']['secret']}&response=$g_response");
    160.     $result = json_decode(curl_exec($ch), true);
    161.     curl_close($ch);
    162.  
    163.     return isset($result['success']) && $result['success'] === true;
    164. }
    165.  
    166. function getValue($input)
    167. {
    168.     if (isset($_POST['register'][$input])) {
    169.         return $_POST['register'][$input];
    170.     }
    171.  
    172.     return false;
    173. }
    174.  
    175. function errorDisplay($text)
    176. {
    177.     if (isset($text)) {
    178.         echo sprintf('<p class="text text-danger">%s</p>', $text);
    179.     }
    180.  
    181.     return false;
    182. }
    183.  
    184. ?>

    Код (Text):
    1.      
    2. <?php if (!$view_success): ?>
    3. <h2>Регистрация</h2>
    4. <div class="nk-gap-2"></div>
    5. <!-- START: Login Form -->
    6. <form name="register[]" action="register.php" method="post" accept-charset="utf-8">
    7. <input placeholder="Логин" id="login" name="register[login]" type="text" value="<?php echo getValue('login'); ?>"class="form-control">
    8.                             <small class="form-text text-muted">
    9.                                 От <?php echo $configs['validation']['login']['min_length']; ?>
    10.                                 до <?php echo $configs['validation']['login']['max_length']; ?> символов.
    11.                             </small>
    12.                             <?php isset($errors['login']) ? errorDisplay($errors['login']) : false; ?>
    13. <input id="password" name="register[password]" type="password" placeholder="Пароль" value="<?php echo getValue('password'); ?>"class="form-control">
    14. <small class="form-text text-muted">
    15.                                 От <?php echo $configs['validation']['password']['min_length']; ?>
    16.                                 до <?php echo $configs['validation']['password']['max_length']; ?> символов.
    17.                             </small>
    18.                             <?php isset($errors['password']) ? errorDisplay($errors['password']) : false; ?>
    19.  
    20.  
    21.  
    22.  
    23. <!-- Repeat-->
    24. <input id="password_repeat" name="password2" type="password" placeholder="Подтвердите пароль" value="<?php echo getValue ('$password2'); ?>"class="form-control">
    25.             <small class="form-text text-muted">Пароли должны совпадать.</small>
    26. <?php isset($errors['password2']) ? errorDisplay($errors['password2']) : false; ?>
    27. <!-- Repeat-->
    28.  
    29.  
    30.  
    31. <!-- Email-->
    32. <input id="email" name="register[email]" type="text" placeholder="E-mail" value="<?php echo getValue('email'); ?>" class="form-control">
    33.                             <small class="form-text text-muted">Используется для восстановления пароля.
    34.                             </small>
    35.                             <?php isset($errors['email']) ? errorDisplay($errors['email']) : false; ?>
    36. <center><?php if ($configs['reCaptcha']['enable']): ?>
    37. <!-- Email-->
    38. <div class="nk-gap-2">
    39. </div>
    40.                             <div class="form-group">
    41.                                 <div class="g-recaptcha" data-sitekey="<?php echo $configs['reCaptcha']['public']; ?>"></div>
    42.                                 <?php isset($reCaptcha_error) ? errorDisplay($reCaptcha_error) : false; ?>
    43.                             </div>
    44.                         <?php endif; ?></center>
    45. <div class="nk-gap-2"></div>
    46. <button  type="submit"class="nk-btn nk-btn-x2 nk-btn-block nk-btn-rounded nk-btn-color-main-2">Регистрация</button>
    47. </form>
    48. <div class="nk-gap-2"></div>
    49. <button  type="buttom"class="nk-btn nk-btn-x2 nk-btn-block nk-btn-rounded nk-btn-color-main-1" onclick="location.href='/recover.php'">Забыли пароль?</button>
    50. <?php else: ?>
    51.                    <h2 class="text-success">Регистрация успешно завершена!</h2>
    52.                 <div class="nk-gap-2">
    53. </div>
    54.                     <p><b>Ваш логин:</b> <?php echo getValue('login'); ?></p>
    55.                     <p><b>Ваш пароль:</b> <?php echo getValue('password'); ?></p>
    56.             <p class="text-danger">Запомните эти данные!</p>
    57.              <div class="nk-gap-2">
    58. </div>
    59.             <p>В случае их утери вы можете восстановить их воспользовавшись функцией <a href="#"><b>Восстановления пароля</b></a>.</p>
    60.             <p>Если у вас возникли какие-либо другие проблемы, обращайтесь в службу поддержки.</p>
    61.             <?php endif; ?>
    62. <!-- END: Register Form -->

    Проблема следующая:

    По непонятным для меня причинам, не получается задействовать подтверждение пароля. Если точнее, то хотелось бы сверять веденный пароль с подтвержденным и если они отличаются, то выводить ошибку. Пытался и так и сяк, но ни в какую.

    Так же, если подключить рекапчу, то идет переадресация на "белую" страницу, ну и пользователь, соответственно не регистрируется. Т,е без капчи всё работает, а с ней - не хочет. Подскажите, кому не лень рыться в этом "говне". Я в этом деле новенький, буду рад любой помощи.
     
    #1 Snwdn, 9 май 2019
    Последнее редактирование: 9 май 2019
  2. lastdays

    lastdays Активный пользователь

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    Для начала я бы проверил, что пришли все нужные данные, а потом сверял их.
    Реализация странная.

    PHP:
    1. if (  $register['password'] != $register['password2'] )
    2. {
    3.   //- Пароли не совпадают
    4. }
     
  3. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Зачем так заморачиваться, у тебя изначально все как то пошло не так, да еще и через цикл foreach делаешь все проверки, по моему так делают не многие :) в первые вижу такое
    PHP:
    1. if ( $row['password'] != $row['password2'] )
    2. {
    3.     $errors['password'] = 'Пароли не совпадают';
    4.     continue;
    5. }
    а вообще код нужно переписать, или же если работает пусть работает, главное чтобы работало :)
     
  4. Snwdn

    Snwdn Новичок

    С нами с:
    9 май 2019
    Сообщения:
    5
    Симпатии:
    0
    Спасибо за ответы, проблему решил удалением всего кода :oops: