За последние 24 часа нас посетили 18408 программистов и 1605 роботов. Сейчас ищут 947 программистов ...

Немогу добавить данные в БД

Тема в разделе "MySQL", создана пользователем Arazor, 7 май 2014.

  1. Arazor

    Arazor Новичок

    С нами с:
    7 май 2014
    Сообщения:
    1
    Симпатии:
    0
    Добрый день! Недавно начал изучать 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");
    }
    }
    ?>
     
  2. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Код (PHP):
    1. $mysqli->query("INSERT INTO users ('name','surname','mail','password') VALUES ('','$name',' $surname','$mail','$password')");
    Здесь в запросе ты пытаешься в 4 колонки вставить 5 значений. Так нельзя. Если не указываешь первое поле (видимо id AUTO_INCREMENT) в перечне полей - то не надо его указывать и в перечне вставляемых значений.
    Названия полей (и таблиц) нужно писать в косых кавычках, которые на букве ё при английской раскладке, а ты ставишь обычные одинарные.
    Данные перед вставкой в базу данных нужно пропускать через функцию для экранирования данных в mysql, а ты пропускаешь их через функцию экранирования спец.символов html - это разные вещи и у них разное предназначение. Для вставки в б.д. нужно юзать

    Код (PHP):
    1. $name = $mysqli->real_escape_string($_POST['name']);
    а htmlspecialchars - это используется при выводе текста в браузер. Да, $mysqli->real_escape_string будет работать только после того, как установлено соединение с базой, то есть после строки

    Код (PHP):
    1. $mysqli = new mysqli ("localhost","root","","tc");
    Добавлено спустя 1 минуту 26 секунд:
    Код (PHP):
    1. if ((strlen($name) < 3) || (strlen($name) < 50)) {
    ещё тут у тебя ошибка наверно. Сдаётся мне, что во второй части условия должен стоять знак больше, а не меньше, как у тебя.

    Добавлено спустя 1 минуту 28 секунд:
    Если используешь кодировку utf-8, то нужно также заменить strlen на mb_strlen:

    Код (PHP):
    1. mb_strlen($name, 'utf-8') < 3