Не пишутся данные в БД.

Тема в разделе "PHP", создана пользователем sidor, 17 ноя 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. sidor

    sidor

    Регистр.:
    7 июн 2006
    Сообщения:
    220
    Симпатии:
    14
    Прошу не пинать ногами. Только начал изучение php :)

    Вообщем есть БД "test".
    Я создаю БД через php:
    PHP:
    <?
    $user="root";
    $password="root";
    $database="test";
    mysql_connect(localhost,$user,$password);
    @
    mysql_select_db($database) or 
    die(
    "Unable to select database");
    $query="CREATE TABLE     contacts
    (id int(6) NOT NULL auto_increment,
    first varchar(15) NOT NULL,
    last varchar(15) NOT NULL,
    phone varchar(20) NOT NULL,
    mobile varchar(20) NOT NULL,
    fax varchar(20) NOT NULL,
    email varchar(30) NOT NULL,
    web varchar(30) NOT NULL,
    PRIMARY KEY (id), UNIQUE id (id), KEY id_2 (id))"
    ;
    mysql_query($query);
    mysql_close();
    ?>
    Для добавления новостей использую html-форму
    HTML:
    <html>
    <head>
    <title>contacts db</title>
    </head>
    <body>
    <form action="insert.php" method="post">
    Фамилия: <input type="text" name="first"><br>
    Имя: <input type="text" name="last"></input><br>
    Телефон: <input type="text" name="phone"></input><br>
    Мобильний телефон: <input type="text" name="mobile"></input><br>
    Факс: <input type="text" name="fax"></input><br>
    E-mail: <input type="text" name="email"></input><br>
    Веб-страница: <input type="text" name="web"></input><br><br>
    <input type="submit"></input>
    </form>
    </body>
    </html>
    И наконец, тот самый indert.php, который добавляет данные в таблицу:
    PHP:
    <?
    $user="root";
    $password="root";
    $database="test";
    mysql_connect(localhost,$user,$password);
    @
    mysql_select_db($database) or 
    die(
    "Unable to select database");
    $query="INSERT INTO contacts VALUES
    ('','
    $first','$last','$phone','$mobile','$fax','$email','$web')";
    mysql_query($query);
    mysql_close();
    ?>
    Итак, в чем проблема. Добавляются все поля с новым id, но они все пустые.
    Вот так выглядит это в phpmyadmin (первые две строки сам заполнил:(
    [​IMG]

    Скажите пожалуйста, в чем может быть проблема? А то зашел в тупик.
     
  2. DIAgen

    DIAgen Постоялец

    Регистр.:
    30 окт 2006
    Сообщения:
    134
    Симпатии:
    72
    переменые $first, $last и так далее используются регистра глобал он
    делай так
    PHP:
    $first $_POST['first'];
    $last $_POST['last'];
    И еще фильтруй переменые :)
     
    sidor нравится это.
  3. sidor

    sidor

    Регистр.:
    7 июн 2006
    Сообщения:
    220
    Симпатии:
    14
    ммм.. про register_globals = on/off уже почитал. спасибо.
    а что ты имеешь ввиду под "фильтруй переменные"?
     
  4. RxB

    RxB

    Заблокирован
    Регистр.:
    16 июл 2007
    Сообщения:
    236
    Симпатии:
    51
    Имеет ввиду что из переменных надо вырезать кавычки и прочие нехорошие символы, чтобы избежать sql-инъекций.
     
    sidor нравится это.
  5. sidor

    sidor

    Регистр.:
    7 июн 2006
    Сообщения:
    220
    Симпатии:
    14
    всех отблагодарил. проблема решена. прошу модеров закрыть тему.
     
  6. Eihwaz

    Eihwaz

    Регистр.:
    7 окт 2007
    Сообщения:
    156
    Симпатии:
    54
    Я может не понимаю чего, но мне неясно, как при таком синтаксисе запроса
    PHP:
    "INSERT INTO contacts VALUES
    ('','
    $first','$last','$phone','$mobile','$fax','$email','$web')";
    В бд могут добавиться значения указанных переменных, а не сами строки "$first" и т.п., если используются одинарные кавычки и нет никакой конкатенации.
    Запрос должен выглядеть так:
    PHP:
    "INSERT INTO contacts VALUES
    ('','"
    .$first."','".$last."','".$phone."','".$mobile."','".$fax."','".$email."','".$web."')";
     
  7. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    Потому что вся строка взята в двойные кавычки и соответственно переменные буду обработаны, учи матчасть (можешь сделать просто echo указанной строки и сам увидишь).
     
    Eihwaz нравится это.
Статус темы:
Закрыта.