За последние 24 часа нас посетили 21696 программистов и 1054 робота. Сейчас ищут 696 программистов ...

Не добавляются данные с форума в бд

Тема в разделе "PHP для новичков", создана пользователем Daryaa049, 10 окт 2020.

  1. Daryaa049

    Daryaa049 Новичок

    С нами с:
    5 окт 2020
    Сообщения:
    28
    Симпатии:
    0
    У меня не добавляются данные в таблицу, при этом ошибки вроде не показывает, но вылезает вот это сообщение:Error: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: ���� ���� ����������.Может я что-то не до добавила?
    PHP:
    1. <?php
    2. //check if submit button is clicked
    3. If(isset($_POST['submit'])){
    4.     try {
    5.     $conn = new PDO("mysql:host=hostname;dbname=registra", 'root', '');
    6.    
    7.     // set the PDO error mode to exception
    8.     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    9.    
    10.     $err[] = array();
    11.    
    12. //*******************************************************************************************************/
    13. // prepare sql and bind parameters
    14. $stmt = $conn->prepare("INSERT INTO registrasia (lastname, firstname, email, number,password)
    15. VALUES (:lastname, :firstname, :email, :number, :password)");
    16. $stmt->bindParam(':firstname', $firstname);
    17. $stmt->bindParam(':lastname', $lastname);
    18. $stmt->bindParam(':email', $email);
    19. $stmt->bindParam(':number', $number);
    20. $stmt->bindParam(':password', $password);
    21.  
    22. $firstname = $_POST['firstname'];
    23. $lastname = $_POST['lastname'];
    24. $email = $_POST['email'];
    25. $number = $_POST['number'];
    26. $password = $_POST['password'];
    27. $password1 = $_POST['password1'];
    28. $stmt->execute();
    29. echo "New records created successfully";
    30. }catch(PDOException $e){
    31. echo "Error: " . $e->getMessage();
    32.  
    33. }
    34. if (!empty($password1) && $password != $password1){
    35.     $err[]='<font color="red">Пароли не совпадают</font>';
    36.     }
    37. }
    38.  
    39. //*******************************************************************************************************/
    40. ?>
    41. <?php
    42. echo'
    43. <form action="" method="post"/>
    44. Фамилия:<input type="text" name="lastname"/>
    45. <br>
    46. <br>
    47. Имя:<input type="text" name="firstname"/>
    48. <br>
    49. <br>
    50. Email:<input type="email" name="email"/>
    51. <br>
    52. <br>
    53. Номер телефона:<input type="phone" name="number"/>
    54. <br>
    55. <br>
    56. Пароль:<input type="password" name="password"/>
    57. <br>
    58. <br>
    59. Введите пароль еще раз:<input type="password1" name="password1"/>
    60. <br>
    61. <br>
    62. <input type="submit" name="submit" value = "Отправить"></input>
    63. </form>
    64. '
    65. ?>
     
  2. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Ты объявила переменные для пост данных сильно поздно)
    PHP:
    1. $firstname = $_POST['firstname'];
    2. $lastname = $_POST['lastname'];
    3. $email = $_POST['email'];
    4. $number = $_POST['number'];
    5. $password = $_POST['password'];
    6. $password1 = $_POST['password1'];
    их нужно было объявлять до запроса.
    PHP:
    1. <?php
    2. try {
    3. $conn = new PDO("mysql:host=hostname;dbname=registra", 'root', '');
    4. // set the PDO error mode to exception
    5. $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    6. echo "New records created successfully";
    7. }catch(PDOException $e){
    8. echo "Error: " . $e->getMessage();
    9. }
    10.  
    11. # проверяем какой метод используется на веб странице
    12. if ($_SERVER['REQUEST_METHOD'] == 'POST')
    13. {
    14. # подготавливаем данные из формы фильтруем их
    15. $rulles = [
    16. 'lastname' => FILTER_DEFAULT,
    17. 'firstname' => FILTER_DEFAULT,
    18. 'email' => FILTER_VALIDATE_EMAIL,
    19. 'number' => FILTER_SANITIZE_NUMBER_INT,
    20. 'password' => FILTER_DEFAULT,
    21. 'password1' => FILTER_DEFAULT
    22. ];
    23.  
    24. $filter = filter_input_array( INPUT_POST, $rulles );
    25.  
    26. $err = []; # пустой массив для ошибок
    27.  
    28. # проверка пароль1 не равен ли паролю2
    29. if ($filter['password'] != $filter['password1']){
    30. $err[]='<font color="red">Пароли не совпадают</font>';
    31. }
    32. # тут вставляешь дальше все проверки которые нужны
    33. # например:
    34. //if (!$filter['email']){
    35.  // $err[]='<font color="red">email не валидный</font>';
    36.  //}
    37.  
    38. # вставка записи в бд
    39. $stmt = $conn->prepare("INSERTINTO `registrasia` (`lastname`, `firstname`, `email`, `number`, `password`) VALUES (?, ?, ?, ?, ?)");
    40. $stmt->execute([ $filter['firstname'], $filter['lastname'], $filter['email'], $filter['number'], $filter['password'] ]);
    41.  
    42. }
    43. ?>
    44.  
    45. <form action="" method="post">
    46. Фамилия:<input type="text" name="lastname">
    47. Имя:<input type="text" name="firstname">
    48. Email:<input type="email" name="email">
    49. Номер телефона:<input type="phone" name="number">
    50. Пароль:<input type="password" name="password">
    51. Введите пароль еще раз:<input type="password1" name="password1">
    52. <input type="submit" name="submit" value="Отправить">
    53. </form>
     
    #2 _ne_scaju_, 10 окт 2020
    Последнее редактирование: 10 окт 2020
    MouseZver нравится это.
  3. Daryaa049

    Daryaa049 Новичок

    С нами с:
    5 окт 2020
    Сообщения:
    28
    Симпатии:
    0
    Спасибо, но теперь возникает ошибка:Fatal error: Uncaught Error: Call to a member function prepare() on null in C:\OSPanel\domains\regustratandvhod\index.php:49 Stack trace: #0 {main} thrown in C:\OSPanel\domains\regustratandvhod\index.php on line 49
     
  4. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    PHP:
    1. $stmt = $conn->prepare("INSERT INTO `registrasia` (`lastname`, `firstname`, `email`, `number`, `password`) VALUES (?, ?, ?, ?, ?)");
    2. $stmt->execute([ $filter['firstname'], $filter['lastname'], $filter['email'], $filter['number'], $filter['password'] ]);
    чет вставка кода крыво заходит, у меня нормально в блокноте а сюда все поля слипаются, запрос поправил.
     
  5. Daryaa049

    Daryaa049 Новичок

    С нами с:
    5 окт 2020
    Сообщения:
    28
    Симпатии:
    0
    Я уже заметила и исправила, но он все равно показывает это сообщение)В прошлый раз у меня была такая же фигня, и там в начале была просто функция $conn = null Я ее убрала и все заработало, а здесь этого нет, и в чем причина непонятно
     
  6. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    для начала попробуй сделать вот что, в этом куске кода:
    PHP:
    1. try {
    2. $conn = new PDO("mysql:host=hostname;dbname=registra", 'root', '');
    3. // set the PDO error mode to exception
    4. $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    5. echo "New records created successfully";
    6. }catch(PDOException $e){
    7. echo "Error: " . $e->getMessage();
    8. }
    убери все оставь:
    PHP:
    1. $conn = new PDO("mysql:host=hostname;dbname=registra", 'root', '');
    Вызови форму регистрации и проверь в базу записываются значения от пользователя.
    И еще покажи файл index.php от начала до 49 строчки где вылазит ошибка, если конечно это и есть index.php))))
     
  7. Daryaa049

    Daryaa049 Новичок

    С нами с:
    5 окт 2020
    Сообщения:
    28
    Симпатии:
    0
    Да, это Index.php)
    --- Добавлено ---
    Балин, Fatal error: Cannot use try without catch or finally in C:\OSPanel\domains\regustratandvhod\index.php on line 2
    Файл
     

    Вложения:

    • index.zip
      Размер файла:
      1,4 КБ
      Просмотров:
      3
  8. Daryaa049

    Daryaa049 Новичок

    С нами с:
    5 окт 2020
    Сообщения:
    28
    Симпатии:
    0
    Твою ж, мне еще проверку на количество символов и присутствие такой же записи проверять , а я уже который день не могу с этой фигней разобраться:(
     
  9. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    я попросил все убрать оставить одно подключение, а ты что оставила еще try{}
    держи еще раз, плюс добавил проверку на email.
    PHP:
    1. <?php
    2.     $conn = new PDO("mysql:host=hostname;dbname=registra", 'root', '');
    3.  
    4.    # проверяем какой метод используется на веб странице
    5.    if ($_SERVER['REQUEST_METHOD'] == 'POST')
    6.     {
    7.      # подготавливаем данные из формы фильтруем их
    8.     $rulles = [
    9.      'lastname' => FILTER_DEFAULT,
    10.      'firstname' => FILTER_DEFAULT,
    11.      'email' => FILTER_VALIDATE_EMAIL,
    12.      'number' => FILTER_DEFAULT,
    13.      'password' => FILTER_DEFAULT,
    14.      'password1' => FILTER_DEFAULT
    15.      ];
    16.    
    17.     $filter = filter_input_array( INPUT_POST, $rulles );
    18.    
    19.     $err = []; # пустой массив для ошибок
    20.  
    21.     # проверка пароль1 не равен ли паролю2
    22.    if ($filter['password'] != $filter['password1']){
    23.     $err[]='<font color="red">Пароли не совпадают!</font>';
    24.     }
    25.     # тут вставляешь дальше все проверки которые нужны
    26.    //**********************************************************************************************/
    27.     #Проверка на валидатность email
    28.    if (!$filter['email']){
    29.       $err[]='<font color="red">email не валидный!</font>';
    30.      }
    31.      #Проверка на валидатность номера телефона
    32.     if (!$filter['number']){
    33.         $err[]='<font color="red">Номер телефона не валидный!</font>';
    34.        }
    35.     #Проверка длины строки Фамилия
    36.    if (!$filter['lastname'] && (strlen($filter['lastname']) < 3 || strlen($filter['lastname']) > 32)) {
    37.         $err[]='<font color="red">Фамилия должен содержать от 3 до 32 символов!</font>';
    38.     }
    39.   # проверка существования логина.
    40.    $stmt = $conn->prepare('SELECT `email` FROM `users` WHERE `email` = ?');
    41.     $result = $stmt->execute([$filter['email']]);
    42.     if ($result){
    43.         $err[]='email существует выбери другой';
    44.     }
    45.  
    46.  
    47.      //*******************************************************************************************/
    48.     # вставка записи в бд
    49.    $stmt = $conn->prepare("INSERT INTO `registrasia` (`lastname`, `firstname`, `email`, `number`, `password`) VALUES (?, ?, ?, ?, ?)");
    50.     $stmt->execute([ $filter['firstname'], $filter['lastname'], $filter['email'], $filter['number'], $filter['password'] ]);
    51.    
    52.     }
    53.  
    54.     ?>
    55.    
    56.     <form action="" method="post">
    57.     Фамилия:<input type="text" name="lastname">
    58.     Имя:<input type="text" name="firstname">
    59.     Email:<input type="email" name="email">
    60.     Номер телефона:<input type="phone" name="number">
    61.     Пароль:<input type="password" name="password">
    62.     Введите пароль еще раз:<input type="password1" name="password1">
    63.     <input type="submit" name="submit" value="Отправить">
    64.     </form>
     
  10. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    PHP:
    1. <?php
    2. # проверяем какой метод используется на веб странице, если не POST завершаем обработку
    3. if ($_SERVER['REQUEST_METHOD'] == 'POST')
    4. {
    5.     # подготавливаем данные из формы фильтруем их  
    6.    $rulles = [
    7.         'lastname'   => FILTER_DEFAULT,
    8.         'firstname'  => FILTER_DEFAULT,
    9.         'email'      => FILTER_VALIDATE_EMAIL,
    10.         'phone'      => FILTER_DEFAULT,
    11.         'password_1' => FILTER_DEFAULT,
    12.         'password_2' => FILTER_DEFAULT
    13.     ];
    14.     # фильтруем данные при необходимости
    15.    $filter = filter_input_array(INPUT_POST, $rulles);
    16.  
    17.     # создадим пустой массив, для хранения ошибок
    18.    $errors = [];
    19.  
    20.     # проверяем не пуста ли переменная имени
    21.    if(empty($filter['lastname'])) {
    22.         $errors[] = 'Введите имя!';
    23.     }
    24.     # проверяем не пуста ли переменная фамилии
    25.    if(empty($filter['firstname'])) {
    26.       $errors[] = 'Введите фамилию!';
    27.     }
    28.     # проверяем не пуста ли переменная email и заполнина она валидно
    29.    if(empty($filter['email']) && !$filter['email']) {
    30.       $errors[] = 'Email не валидный, пример email: example@ya.ru';
    31.     }
    32.  
    33.     # проверка существования email в базе
    34.    $sql = $pdo->prepare('SELECT `email` FROM `users` WHERE `email` = :email');
    35.     $sql -> execute(['email' => $filter['email']]);
    36.     $result = $sql -> fetch();
    37.  
    38.     if (!$result['email'] == false) {
    39.         $errors[] = 'email существует выбери другой';
    40.     }
    41.  
    42.     # проверяем не пуста ли переменная телефон
    43.    if(empty($filter['phone'])) {
    44.         $errors[] = 'Введите телефон!';
    45.     }
    46.  
    47.     # проверка существования телефон в базе
    48.    $sql = $pdo->prepare('SELECT `phone` FROM `users` WHERE `phone` = :phone');
    49.     $sql -> execute(['phone' => $filter['phone']]);
    50.     $result = $sql -> fetch();
    51.  
    52.     if (!$result['phone'] == false) {
    53.         $errors[] = 'телефон существует выбери другой';
    54.     }
    55.  
    56.     # проверяем не пуста ли переменная пароль
    57.    if(empty($filter['password_1']))
    58.     {
    59.       $errors[] = 'Введите пароль!';
    60.     }
    61.     # проверяем совпадение паролей, если пароль1 не равен паролю2
    62.    if($filter['password_1'] != $filter['password_2'])
    63.     {
    64.         $errors[] = 'Пароли не совпадают!';
    65.     }
    66.  
    67.     # если количество ошибок больше нуля показываем их
    68.    if(count($errors) > 0){
    69.         echo '<div id="errors" style="color:red;">' .array_shift($errors). '</div><hr>';
    70.     }else{
    71.         #регистрация
    72.        # перед регистрацией захешируем пароль который вставим в базу
    73.        $pass = password_hash($filter['password_1'], PASSWORD_DEFAULT);
    74.  
    75.         $stmt = $pdo->prepare("INSERT INTO `users`(`last_name`, `first_name`, `phone`, `email`, `password`) VALUES (?, ?, ?, ?, ?)");
    76.         $stmt->execute([$filter['lastname'], $filter['firstname'], $filter['phone'], $filter['email'], $pass ]);
    77.  
    78.         echo '<div style="color:green;">Вы успешно зарегистрированы!</div><hr>';
    79.         echo '<a href="/login.php">перейти на главную</a>';
    80.     }
    81.     // echo '<pre>';
    82.     // var_dump($errors);
    83.     // echo '</pre>';
    84. }
    85.  
    86. ?>
    87. <!DOCTYPE HTML>
    88. <head>
    89. <meta charset="utf-8" />
    90.     <link rel="stylesheet" href="style.css">
    91. </head>
    92. <body>
    93. <form action="/signup.php" method="POST">
    94.     <br><br><br>
    95.     <strong>Ваше имя</strong>
    96.     <input type="text" name="lastname" value="<?=$filter['lastname']; ?>">
    97.     <p>
    98.     <strong>Ваша фамилия</strong>
    99.     <input type="text" name="firstname" value="<?=$filter['firstname']; ?>">
    100.     <p>
    101.     <strong>Ваш Email</strong>
    102.     <input type="email" name="email" value="<?=$filter['email']; ?>">
    103.     <p>
    104.     <strong>Ваш номер телефона</strong>
    105.     <input type="phone" name="phone" value="<?=$filter['phone']; ?>">
    106.     <p>
    107.     <strong>Ваш пароль</strong>
    108.     <input type="password" name="password_1" value="<?=$filter['password_1']; ?>">
    109.     <p>
    110.     <strong>Повторите пароль*</strong>
    111.     <input type="password" name="password_2" value="<?=$filter['password_2']; ?>">
    112.     <strong><!--?php captcha_show(); ?--></strong>
    113.     <p>
    114.     <button type="submit" name="do_signup">Отправить</button>
    115. </form>
    116. </body>
    117. </html>