Автор Тема: запрос с php  (Прочитано 3742 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Sigma

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 35
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
запрос с php
« : 07 Января 2004, 23:40:02 »
вобщем такой кусок кода
@ $db = mysql_pconnect("localhost");
   if (!$db)
   {
      echo "Не могу подключиться к базе";
      exit;
   }
mysql_select_db("rieltr");
$query = "insert into rieltr.mainrielt (name, action, object, metro, price, email, phone, comment ) values ( ".$name." , ".$action." , ".$object.", ".$metro.", ".$price.", ".$email.", ".$phone.", ".$comm.")";
$result = mysql_query($query);
if ($result)
   echo mysql_affected_rows ()." запись добавлена в таблицу.";


где тут косяк ибо в базу ничё не добавляется ... ? или вообще нужны какие-то доп установки ( сижу в winXP, mysql и apache запущены ).

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
запрос с php
« Ответ #1 : 08 Января 2004, 01:32:22 »
1. убери собаку @ (ты, судя по коду, еще не такой профи, чтобы писать код с использованием собак)
2. строку: $result mysql_query($query); замени пока на
$result mysql_query($query) or die (mysql_error().\'
\'.$query);
и сообщи какие ошибки выводит
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Sigma

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 35
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
запрос с php
« Ответ #2 : 08 Января 2004, 01:44:38 »
заменила, теперь выдаёт
Unknown column \'Вася\' in \'field list\'
и дальше весь запрос как он есть ...

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
запрос с php
« Ответ #3 : 08 Января 2004, 02:04:56 »
значения полей в запросе ОБЯЗАТЕЛЬНО должны быть взяты в кавычки
подробнее http://faq.phpclub.net/slashes

Оффлайн Sigma

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 35
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
запрос с php
« Ответ #4 : 08 Января 2004, 02:28:17 »
а у меня разве не кавычках ? :)

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
запрос с php
« Ответ #5 : 08 Января 2004, 02:35:16 »
нет.
выведи свой запрос на экран.

Оффлайн Sigma

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 35
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
запрос с php
« Ответ #6 : 08 Января 2004, 02:40:49 »
ага :) теперь все работает ... спасибо.
А можно подробнее вот про @ в
@ $db = mysql_pconnect("localhost");

что в ней особенного то ?

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
запрос с php
« Ответ #7 : 08 Января 2004, 03:24:12 »
До чего же ты, Сигма, приятнее одного клиента, с которым я работал только что на другом форуме.
Лепит вообще не понимая смысла ни отдельных функций, ни целых конструкций.
И в голову не приходит хотя бы спросить - для его они нужны.

Я, как раз собирался сам об этом написать, но потом передумал.
уж очень трудно людей уговорить делать правильно.

а эта строка все, сплошь неправильная, не только собака :-)
правильно данная конструкция должна выглядеть так:
mysql_connect() or die mysql_error();

теперь по пунктам:
@ - запрещение вывода сообщений об ошибках.
очень вредный оператор. сообщения об ошибках - это хлеб программиста. Без них он не может и шагу ступить.
А применяют эту собаку совсем не по назначению.
чтобы юзер не видел сообщения об ошибке.
Это то же самое, что лечить головную боль гильотиной.
Не хочешь, чтобы юзер сообщение видел? Запрети ему это, например, директивой display_errors.
Но совсем не подавляй! Самому же понадобится.

дальше. $db=
переменной $db присваивается значение идентификатора соединения.
в 99% случаев эта переменная не нужна, и ее можно опустить. Не присваивать вовсе. У тебя в скрипте, к примеру, она не используется.

mysql_pconnect
эта функция стоит в первой десятке проблем пхп скриптов.
она устанавливает соединение с mysql но не закрывает его. очень быстро лимит соединений исчерпываетя и скрипты перестают работать.
вместо нее надо использовать mysql_connect

"localhost" - это адрес сервера.
если это "localhost", то указывать это не надо, это значение по умолчанию, РНР сам его подставит.

Вообще, все это не относится к базам данных, так что я надеюсь, что модератор этого раздела перенесет данную тему в РНР. или хотя бы последнее сообщение.
« Последнее редактирование: 08 Января 2004, 03:29:30 от RomikChef »

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
запрос с php
« Ответ #8 : 08 Января 2004, 15:49:32 »
внимательный читатель может заметить, что die(mysql_error()) выводит сообщение об ошибке пользователю, о вреде какового действия мы говорили ранее.
Такая конструкция приведена исключительно для примера.
На рабочем сервере желательно ошибку выводить не на экран, а в лог-файл, да и работу программы завершать не аварийно, а покрасивее.

Оффлайн Sigma

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 35
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
запрос с php
« Ответ #9 : 08 Января 2004, 18:57:40 »
ну просто лучше сразу разобраться, чтобы потом не доставать всех глупыми вопросами :) спасибо.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
запрос с php
« Ответ #10 : 08 Января 2004, 19:32:31 »
вопросы твои совсем неглупые.
Уж поверь моему опыту, бывают и глупее.
Так что всегда рады ответить.

Если тебе интересно, я могу и весь приведенный код разобрать

вот эта, к примеру, конструкция,
Цитировать
@ $db = mysql_pconnect("localhost");
if (!$db)
{
echo "Не могу подключиться к базе";
exit;
}

заменяется на одну строчку
mysql_pconnect("localhost") or die("Не могу подключиться к базе");

Ну, про mysql_error и сообщения для юзеров я уже писал.

mysql_select_db имеет столько же шансов не выполниться, сколько и mysql_connect, и поэтому ее надо оформлять так же.

однако забавно, что в твоем примере можно обойтись и без нее совсем, поскольку название БД ты пишешь в запросе.
Чтобы не усложнять код, лучше сделать что-то одно.
традиционно используется функция, а в запросе БД не пишется.

Дальше - запрос.
если в базу вставляются все поля, то перечислять их не нужно, можно использовать краткую запись.
Вообще, про запрос ты можешь почитать в соседней ветке.
Я там объясняю принципы построения запросов и неплохую функцию привел в самом последнем посте.
http://forums.webscript.ru/showthread.php?s=&threadid=15268

далее.
если mysql_connect при неудаче выдает причину, то mysql_query - НЕТ.
И если выводить mysql_error после первой можно по желанию, то после второй - обязательно.
Эта функция тебе выдаст ошибку в запросе.
Ну, тебе уже написал об этом Макс.

mysql_affected_rows () опять же здесь бессмысленно.
если квери прошла нормально, то и так можно сказать, что вставлена одна запись. совсем не нужно зря дергать функцию.

а вот текст после вставки в базу выдавать никакой не надо.
тому есть две взаимосвязанные причины.
1. Если в результате запроса пользователя меняются данные в базе, то такой запрос надо делать метобом ПОСТ.
в частности, это гарантия того, что на кнопку не нажмет робот.
2. Если данные были отправлены методом ПОСТ, то надо после него, не выводя ничего в браузер, перенаправить юзера методом ГЕТ.
об этом подробно написано тут:
http://phpclub.ru/talk/showthread.php?s=&threadid=43521

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28