У меня не добавляются данные в таблицу, при этом ошибки вроде не показывает, но вылезает вот это сообщение:Error: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: ���� ���� ����������.Может я что-то не до добавила? PHP: <?php //check if submit button is clicked If(isset($_POST['submit'])){ try { $conn = new PDO("mysql:host=hostname;dbname=registra", 'root', ''); // set the PDO error mode to exception $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $err[] = array(); //*******************************************************************************************************/ // prepare sql and bind parameters $stmt = $conn->prepare("INSERT INTO registrasia (lastname, firstname, email, number,password) VALUES (:lastname, :firstname, :email, :number, :password)"); $stmt->bindParam(':firstname', $firstname); $stmt->bindParam(':lastname', $lastname); $stmt->bindParam(':email', $email); $stmt->bindParam(':number', $number); $stmt->bindParam(':password', $password); $firstname = $_POST['firstname']; $lastname = $_POST['lastname']; $email = $_POST['email']; $number = $_POST['number']; $password = $_POST['password']; $password1 = $_POST['password1']; $stmt->execute(); echo "New records created successfully"; }catch(PDOException $e){ echo "Error: " . $e->getMessage(); } if (!empty($password1) && $password != $password1){ $err[]='<font color="red">Пароли не совпадают</font>'; } } //*******************************************************************************************************/ ?> <?php echo' <form action="" method="post"/> Фамилия:<input type="text" name="lastname"/> <br> <br> Имя:<input type="text" name="firstname"/> <br> <br> Email:<input type="email" name="email"/> <br> <br> Номер телефона:<input type="phone" name="number"/> <br> <br> Пароль:<input type="password" name="password"/> <br> <br> Введите пароль еще раз:<input type="password1" name="password1"/> <br> <br> <input type="submit" name="submit" value = "Отправить"></input> </form> ' ?>
Ты объявила переменные для пост данных сильно поздно) PHP: $firstname = $_POST['firstname']; $lastname = $_POST['lastname']; $email = $_POST['email']; $number = $_POST['number']; $password = $_POST['password']; $password1 = $_POST['password1']; их нужно было объявлять до запроса. PHP: <?php try { $conn = new PDO("mysql:host=hostname;dbname=registra", 'root', ''); // set the PDO error mode to exception $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "New records created successfully"; }catch(PDOException $e){ echo "Error: " . $e->getMessage(); } # проверяем какой метод используется на веб странице if ($_SERVER['REQUEST_METHOD'] == 'POST') { # подготавливаем данные из формы фильтруем их $rulles = [ 'lastname' => FILTER_DEFAULT, 'firstname' => FILTER_DEFAULT, 'email' => FILTER_VALIDATE_EMAIL, 'number' => FILTER_SANITIZE_NUMBER_INT, 'password' => FILTER_DEFAULT, 'password1' => FILTER_DEFAULT ]; $filter = filter_input_array( INPUT_POST, $rulles ); $err = []; # пустой массив для ошибок # проверка пароль1 не равен ли паролю2 if ($filter['password'] != $filter['password1']){ $err[]='<font color="red">Пароли не совпадают</font>'; } # тут вставляешь дальше все проверки которые нужны # например: //if (!$filter['email']){ // $err[]='<font color="red">email не валидный</font>'; //} # вставка записи в бд $stmt = $conn->prepare("INSERTINTO `registrasia` (`lastname`, `firstname`, `email`, `number`, `password`) VALUES (?, ?, ?, ?, ?)"); $stmt->execute([ $filter['firstname'], $filter['lastname'], $filter['email'], $filter['number'], $filter['password'] ]); } ?> <form action="" method="post"> Фамилия:<input type="text" name="lastname"> Имя:<input type="text" name="firstname"> Email:<input type="email" name="email"> Номер телефона:<input type="phone" name="number"> Пароль:<input type="password" name="password"> Введите пароль еще раз:<input type="password1" name="password1"> <input type="submit" name="submit" value="Отправить"> </form>
Спасибо, но теперь возникает ошибка: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
PHP: $stmt = $conn->prepare("INSERT INTO `registrasia` (`lastname`, `firstname`, `email`, `number`, `password`) VALUES (?, ?, ?, ?, ?)"); $stmt->execute([ $filter['firstname'], $filter['lastname'], $filter['email'], $filter['number'], $filter['password'] ]); чет вставка кода крыво заходит, у меня нормально в блокноте а сюда все поля слипаются, запрос поправил.
Я уже заметила и исправила, но он все равно показывает это сообщение)В прошлый раз у меня была такая же фигня, и там в начале была просто функция $conn = null Я ее убрала и все заработало, а здесь этого нет, и в чем причина непонятно
для начала попробуй сделать вот что, в этом куске кода: PHP: try { $conn = new PDO("mysql:host=hostname;dbname=registra", 'root', ''); // set the PDO error mode to exception $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "New records created successfully"; }catch(PDOException $e){ echo "Error: " . $e->getMessage(); } убери все оставь: PHP: $conn = new PDO("mysql:host=hostname;dbname=registra", 'root', ''); Вызови форму регистрации и проверь в базу записываются значения от пользователя. И еще покажи файл index.php от начала до 49 строчки где вылазит ошибка, если конечно это и есть index.php))))
Да, это Index.php) --- Добавлено --- Балин, Fatal error: Cannot use try without catch or finally in C:\OSPanel\domains\regustratandvhod\index.php on line 2 Файл
Твою ж, мне еще проверку на количество символов и присутствие такой же записи проверять , а я уже который день не могу с этой фигней разобраться
я попросил все убрать оставить одно подключение, а ты что оставила еще try{} держи еще раз, плюс добавил проверку на email. PHP: <?php $conn = new PDO("mysql:host=hostname;dbname=registra", 'root', ''); # проверяем какой метод используется на веб странице if ($_SERVER['REQUEST_METHOD'] == 'POST') { # подготавливаем данные из формы фильтруем их $rulles = [ 'lastname' => FILTER_DEFAULT, 'firstname' => FILTER_DEFAULT, 'email' => FILTER_VALIDATE_EMAIL, 'number' => FILTER_DEFAULT, 'password' => FILTER_DEFAULT, 'password1' => FILTER_DEFAULT ]; $filter = filter_input_array( INPUT_POST, $rulles ); $err = []; # пустой массив для ошибок # проверка пароль1 не равен ли паролю2 if ($filter['password'] != $filter['password1']){ $err[]='<font color="red">Пароли не совпадают!</font>'; } # тут вставляешь дальше все проверки которые нужны //**********************************************************************************************/ #Проверка на валидатность email if (!$filter['email']){ $err[]='<font color="red">email не валидный!</font>'; } #Проверка на валидатность номера телефона if (!$filter['number']){ $err[]='<font color="red">Номер телефона не валидный!</font>'; } #Проверка длины строки Фамилия if (!$filter['lastname'] && (strlen($filter['lastname']) < 3 || strlen($filter['lastname']) > 32)) { $err[]='<font color="red">Фамилия должен содержать от 3 до 32 символов!</font>'; } # проверка существования логина. $stmt = $conn->prepare('SELECT `email` FROM `users` WHERE `email` = ?'); $result = $stmt->execute([$filter['email']]); if ($result){ $err[]='email существует выбери другой'; } //*******************************************************************************************/ # вставка записи в бд $stmt = $conn->prepare("INSERT INTO `registrasia` (`lastname`, `firstname`, `email`, `number`, `password`) VALUES (?, ?, ?, ?, ?)"); $stmt->execute([ $filter['firstname'], $filter['lastname'], $filter['email'], $filter['number'], $filter['password'] ]); } ?> <form action="" method="post"> Фамилия:<input type="text" name="lastname"> Имя:<input type="text" name="firstname"> Email:<input type="email" name="email"> Номер телефона:<input type="phone" name="number"> Пароль:<input type="password" name="password"> Введите пароль еще раз:<input type="password1" name="password1"> <input type="submit" name="submit" value="Отправить"> </form>
PHP: <?php # проверяем какой метод используется на веб странице, если не POST завершаем обработку if ($_SERVER['REQUEST_METHOD'] == 'POST') { # подготавливаем данные из формы фильтруем их $rulles = [ 'lastname' => FILTER_DEFAULT, 'firstname' => FILTER_DEFAULT, 'email' => FILTER_VALIDATE_EMAIL, 'phone' => FILTER_DEFAULT, 'password_1' => FILTER_DEFAULT, 'password_2' => FILTER_DEFAULT ]; # фильтруем данные при необходимости $filter = filter_input_array(INPUT_POST, $rulles); # создадим пустой массив, для хранения ошибок $errors = []; # проверяем не пуста ли переменная имени if(empty($filter['lastname'])) { $errors[] = 'Введите имя!'; } # проверяем не пуста ли переменная фамилии if(empty($filter['firstname'])) { $errors[] = 'Введите фамилию!'; } # проверяем не пуста ли переменная email и заполнина она валидно if(empty($filter['email']) && !$filter['email']) { $errors[] = 'Email не валидный, пример email: example@ya.ru'; } # проверка существования email в базе $sql = $pdo->prepare('SELECT `email` FROM `users` WHERE `email` = :email'); $sql -> execute(['email' => $filter['email']]); $result = $sql -> fetch(); if (!$result['email'] == false) { $errors[] = 'email существует выбери другой'; } # проверяем не пуста ли переменная телефон if(empty($filter['phone'])) { $errors[] = 'Введите телефон!'; } # проверка существования телефон в базе $sql = $pdo->prepare('SELECT `phone` FROM `users` WHERE `phone` = :phone'); $sql -> execute(['phone' => $filter['phone']]); $result = $sql -> fetch(); if (!$result['phone'] == false) { $errors[] = 'телефон существует выбери другой'; } # проверяем не пуста ли переменная пароль if(empty($filter['password_1'])) { $errors[] = 'Введите пароль!'; } # проверяем совпадение паролей, если пароль1 не равен паролю2 if($filter['password_1'] != $filter['password_2']) { $errors[] = 'Пароли не совпадают!'; } # если количество ошибок больше нуля показываем их if(count($errors) > 0){ echo '<div id="errors" style="color:red;">' .array_shift($errors). '</div><hr>'; }else{ #регистрация # перед регистрацией захешируем пароль который вставим в базу $pass = password_hash($filter['password_1'], PASSWORD_DEFAULT); $stmt = $pdo->prepare("INSERT INTO `users`(`last_name`, `first_name`, `phone`, `email`, `password`) VALUES (?, ?, ?, ?, ?)"); $stmt->execute([$filter['lastname'], $filter['firstname'], $filter['phone'], $filter['email'], $pass ]); echo '<div style="color:green;">Вы успешно зарегистрированы!</div><hr>'; echo '<a href="/login.php">перейти на главную</a>'; } // echo '<pre>'; // var_dump($errors); // echo '</pre>'; } ?> <!DOCTYPE HTML> <head> <meta charset="utf-8" /> <link rel="stylesheet" href="style.css"> </head> <body> <form action="/signup.php" method="POST"> <br><br><br> <strong>Ваше имя</strong> <input type="text" name="lastname" value="<?=$filter['lastname']; ?>"> <p> <strong>Ваша фамилия</strong> <input type="text" name="firstname" value="<?=$filter['firstname']; ?>"> <p> <strong>Ваш Email</strong> <input type="email" name="email" value="<?=$filter['email']; ?>"> <p> <strong>Ваш номер телефона</strong> <input type="phone" name="phone" value="<?=$filter['phone']; ?>"> <p> <strong>Ваш пароль</strong> <input type="password" name="password_1" value="<?=$filter['password_1']; ?>"> <p> <strong>Повторите пароль*</strong> <input type="password" name="password_2" value="<?=$filter['password_2']; ?>"> <strong><!--?php captcha_show(); ?--></strong> <p> <button type="submit" name="do_signup">Отправить</button> </form> </body> </html>