За последние 24 часа нас посетили 36232 программиста и 1695 роботов. Сейчас ищут 1194 программиста ...

Вопрос по вводу в базу данных

Тема в разделе "PHP для новичков", создана пользователем Naivety, 3 сен 2010.

  1. Naivety

    Naivety Активный пользователь

    С нами с:
    9 май 2010
    Сообщения:
    11
    Симпатии:
    0
    Адрес:
    Донецк
    У меня подобная ошибка была а теперь проблема.
    Базу данных создал в phpMyAdmin. БД - users. В ней одна таблица - user. В таблице четыре поля:
    id - это primary key и auto_increment, тип - int.
    e-mail - тип text.
    nickname - тип text.
    password - тип text.
    Заполнил в том же phpMyAdmin две строчки.
    Дальше код. Пока просто разбираюсь с MySQL, поэтому на ввод проверок не делаю.
    1 страница:
    HTML:
    1. <form action="registration.php" method="get">
    2. <table border=0>
    3. <tr><td>Почта</td><td><input type=text name="email"/></td></tr>
    4. <tr><td>Имя</td><td><input type=text name="nickname"/></td></tr>
    5. <tr><td>Пароль</td><td><input type=password name="pass"/></td></tr>
    6. <tr><td></td><td><input type=submit value="Зарегестрироваться"/></td></tr>
    7. </form>
    Здесь без вопросов: проверка на следующей странице подтверждает, что вроде все ок.
    2 страница:
    вначале просто проверяю, передаются ли данные с предидущей страницы:
    PHP:
    1. Вы ввели следующие данные:<br/>
    2. Почта: <?echo $_GET['email']?><br/>
    3. Имя: <?echo $_GET['nickname']?><br/>
    4. Пароль: <?echo $_GET['pass']?><br/>
    Дальше делаю переменные для ввода в базу новой строки:
    PHP:
    1. <?
    2. $dbhost ="localhost";
    3. $dbuser ="root";
    4. $dbpass ="hello13";
    5. $email=$_GET['email'];
    6. $nickname=$_GET['nickname'];
    7. $pass=$_GET['pass'];
    8. $query="
    9.     INSERT INTO users.user (
    10.     e-mail ,
    11.     nickname ,
    12.     password
    13.     )
    14.     VALUES ($email,$nickname,$pass}
    15.     )
    16.     ";
    17.  
    Делаю ввод:
    PHP:
    1.  
    2. if($connect=mysql_connect($dbhost,$dbuser,$dbpass))
    3. {  
    4.     echo "соединение установлено.<br/>";
    5.     if($select_db=mysql_select_db('users',$connect))
    6.     {echo 'Соединение с базой установлено<br/>';}
    7.     else {echo 'Соединение с базой тупит<br/>';}
    8.  
    9.     if(mysql_query($query,$connect)) echo "Данные успешно занесены.<br/>";
    10.     else {echo "Данные где-то тупят.<br/>";mysql_error();}
    11. }
    Далее вывод всей таблицы(здесь тожде вопросов нет, но на всякий случай привожу весь код):
    PHP:
    1. $db = mysql_connect($dbhost,$dbuser,$dbpass);
    2. mysql_select_db("users",$db);
    3. $result = mysql_query("SELECT * FROM user",$db);
    4. $num_rows = mysql_num_rows($result);
    5. for ($i=0;$i<$num_rows;$i++)
    6. {
    7. printf("email: %s<br>\n", mysql_result($result,$i,"e-mail"));
    8. printf("NickName: %s<br>\n", mysql_result($result,$i,"nickname"));
    9. printf("Password: %s<br>\n", mysql_result($result,$i,"password"));
    10. }
    11.  
    12. ?>
    В итоге выводится следующая картина:

    Вы ввели следующие данные:
    Почта: 1
    Имя: 2
    Пароль: 3
    соединение установлено.
    Соединение с базой установлено
    Данные где-то тупят.
    email: admin
    NickName: admin
    Password: hello13
    email: 5
    NickName: 5
    Password: 5

    То есть вначале выдавало ошибку
    Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in ...

    А когда сделал переменные
    $email=$_GET['email'];
    $nickname=$_GET['nickname'];
    $pass=$_GET['pass'];
    Просто ничего не делает. Что не так, можете подсказать???
     
  2. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Код (Text):
    1. $query="INSERT INTO users.user (`e-mail`, `nickname`, `password`) VALUES ('{$email}', '{$nickname}', '{$pass}')";
    советую вначале генерировать запрос, затем выводить в браузер, а не сразу посылать мускулу.
    и ТО, что вывелось в браузер, попробовать отправить в мускул вручную. обычно ошибки видно сразу.
     
  3. Naivety

    Naivety Активный пользователь

    С нами с:
    9 май 2010
    Сообщения:
    11
    Симпатии:
    0
    Адрес:
    Донецк
    О, так заработало... Как я понимаю, основная проблема проблема в этих кавычках была: `
    Это фишка MySQL такие кавычки ставить? И вообще это ж вроде как апостроф...

    Или я не понял, или я так и делал???

    В смысле втупую забить MySQL запрос в phpMyAdmin?[/quote]
     
  4. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    данные не в кавычках! зачем нужна фигурная скобка?

    апострофами в мускуле ограничиваются названия полей/столбцов/таблиц.

    если отлаживать код, то после объявления переменной $query нужно её выводить в браузер
    Код (Text):
    1.  
    2. $query = "...";
    3. echo $query;
    4. exit();
    затем строка (которая по идее отсылается в мускул) вручную выполняется в phpMyAdmin.
    все ошибки будут налицо.
     
  5. Naivety

    Naivety Активный пользователь

    С нами с:
    9 май 2010
    Сообщения:
    11
    Симпатии:
    0
    Адрес:
    Донецк
    Запара - не заметил.


    Спасибо большое за разъяснения и исправления!
     
  6. Naivety

    Naivety Активный пользователь

    С нами с:
    9 май 2010
    Сообщения:
    11
    Симпатии:
    0
    Адрес:
    Донецк
    Просто не вводится именно когда убираю апострофы...
    Хотя вроде они даже не во всех манулаха есть - эти апострофы...
    Ну да ладно - буду с ними писать...
     
  7. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    потому что или e-mail нельзя, или password - предопределённое слово.
    чтобы мускул не путал названия полей и инструкций/функций, названия полей и заключаются в апострофы.

    кстати, в PostgreSQL для той же цели вместо апострофов используются одинарные кавычки
     
  8. Naivety

    Naivety Активный пользователь

    С нами с:
    9 май 2010
    Сообщения:
    11
    Симпатии:
    0
    Адрес:
    Донецк
    Хм, благодарю... интерсный момент.. .:)