Добрый день! Недавно начал изучать php , пытаюсь сделать регистрацию (если что коряво не ругайтесь, а подскажите зелёному), не могу добавить данные в БД. В браузере ни каких ошибок не выдаёт. Пользуюсь сборкой денвер. Вот код. <?php header ('Content-Type: text/html; charset=utf-8'); if(isset($_POST['submit'])){ $name = htmlspecialchars ($_POST['name']); $surname = htmlspecialchars ($_POST['surname']); $mail = htmlspecialchars ($_POST['mail']); $password = htmlspecialchars ($_POST['password']); $r_password = htmlspecialchars ($_POST['r_password']); $bad = false; session_start(); unset ($_SESSION['error_name']); unset ($_SESSION['error_password']); unset ($_SESSION['reg_suc']); if ((strlen($name) < 3) || (strlen($name) < 50)) { $_SESSION['error_name'] = 1; $bad = true; } if ((strlen($password) < 6) || (strlen($password) < 50)) { $_SESSION['error_password'] = 1; $bad = true; } if($password != $r_password);{ $_SESSION['error_password'] = 1; $bad = true; } if (!$bad){ $mysqli = new mysqli ("localhost","root","","tc"); $password = md5($password); $mysqli->query("INSERT INTO users ('name','surname','mail','password') VALUES ('','$name',' $surname','$mail','$password')"); $mysqli->close(); $_SESSION ['reg_suc'] = 1; header ("Location: index.php"); } } ?>
Код (PHP): $mysqli->query("INSERT INTO users ('name','surname','mail','password') VALUES ('','$name',' $surname','$mail','$password')"); Здесь в запросе ты пытаешься в 4 колонки вставить 5 значений. Так нельзя. Если не указываешь первое поле (видимо id AUTO_INCREMENT) в перечне полей - то не надо его указывать и в перечне вставляемых значений. Названия полей (и таблиц) нужно писать в косых кавычках, которые на букве ё при английской раскладке, а ты ставишь обычные одинарные. Данные перед вставкой в базу данных нужно пропускать через функцию для экранирования данных в mysql, а ты пропускаешь их через функцию экранирования спец.символов html - это разные вещи и у них разное предназначение. Для вставки в б.д. нужно юзать Код (PHP): $name = $mysqli->real_escape_string($_POST['name']); а htmlspecialchars - это используется при выводе текста в браузер. Да, $mysqli->real_escape_string будет работать только после того, как установлено соединение с базой, то есть после строки Код (PHP): $mysqli = new mysqli ("localhost","root","","tc"); Добавлено спустя 1 минуту 26 секунд: Код (PHP): if ((strlen($name) < 3) || (strlen($name) < 50)) { ещё тут у тебя ошибка наверно. Сдаётся мне, что во второй части условия должен стоять знак больше, а не меньше, как у тебя. Добавлено спустя 1 минуту 28 секунд: Если используешь кодировку utf-8, то нужно также заменить strlen на mb_strlen: Код (PHP): mb_strlen($name, 'utf-8') < 3