Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Программирование на PHP

  Все выпуски  

RusFAQ.ru: Программирование на PHP


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / PHP

Выпуск № 738
от 14.08.2007, 13:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 447, Экспертов: 55
В номере:Вопросов: 4, Ответов: 15


Вопрос № 97716: Что в этом коде не так?? Выводит ошибку You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'by, comment, ip, stamp) values ('396', 'wormik', 'dsfadsf',...
Вопрос № 97792: Необходимо отпраить письмо функцией mail() и прикрепить к нему текстовый файл. как лучше можно это сделать?...
Вопрос № 97831: есть простая форма с двумя полями, файл который обрабатывает данные с формы должен за счет условия if и просмотра переменной $_POST на наличие пустой переменой используя isset должна либо принять данные (если все поля заполнены) или выдать сообщение ...
Вопрос № 97832: Здраствуйте, уважаемые эксперты! Это программа "покер в кости", правда, изображения костей нельзя поместить здесь В этой программе (как и в некоторых других, которые я писал) есть проблема: данные после совершения круга действий тер...

Вопрос № 97.716
Что в этом коде не так?? Выводит ошибку

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'by, comment, ip, stamp) values ('396', 'wormik', 'dsfadsf', '127

Приложение:

Отправлен: 08.08.2007, 13:12
Вопрос задал: Бобровский Сергей Сергеевич (статус: 2-ой класс)
Всего ответов: 6
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Селев Валерий
Здравствуйте, Бобровский Сергей Сергеевич!

Поскольку Вы заключаете значение $query в двойные кавычки, эскейпить одинарные не надо, попробуйте так:

$query = "INSERT INTO comments (id_pic, by, comment, ip, stamp) values ('$_POST[id_pic]', '$by', '$_POST[text]', '$ip', NOW())";
Ответ отправил: Селев Валерий (статус: 5-ый класс)
Ответ отправлен: 08.08.2007, 13:17
Оценка за ответ: 4
Комментарий оценки:
Уже нашел, в чем проблема. Удивительным образом заключил поля и название таблици в косые кавычки ` и всё заработало. ХМм. Задумался.

Отвечает: Powoditch konstantin
Здравствуйте, Бобровский Сергей Сергеевич!
Дело в том что слово by является ключевым словом для SQL. Его надо екранировать вот так:
INSERT INTO comments (id_pic, `by`, comment, ip, stamp) values ('$_POST[id_pic]', '$by', '$_POST[text]', '$ip', NOW())
Ответ отправил: Powoditch konstantin (статус: 4-ый класс)
Ответ отправлен: 08.08.2007, 13:19
Оценка за ответ: 5
Комментарий оценки:
Благодарю. ТЕперь я понял, почему ошибка исчезла, когда я заключил поля и таблицу в косые кавыки!

Отвечает: PVS
Здравствуйте, Бобровский Сергей Сергеевич!
Что-то у Вас слишком много всего экранировано слэшами и индексы массивов криво написаны. SQL должен выглядеть так:
$query = "INSERT INTO comments (id_pic, by, comment, ip, stamp) values ( '".$_POST['id_pic']."', '$by', '".$_POST['text']."', '$ip', NOW())";
Ответ отправил: PVS (статус: Специалист)
Ответ отправлен: 08.08.2007, 13:20

Отвечает: Oleg S. Mezhov
Здравствуйте, Бобровский Сергей Сергеевич!
1. Не нужно экранировать одинарные кавычки, если вы создаете строку в двойных.
2. Интерполяция (подстановка значений переменных в строку) не всегда работает правильно, чаще используют следующий код или функцию создания форматированной строки sprintf.

Приложение:

Ответ отправил: Oleg S. Mezhov (статус: 3-ий класс)
Ответ отправлен: 08.08.2007, 13:31

Отвечает: Киряков Александр Иванович
Здравствуйте, Бобровский Сергей Сергеевич!
$_POST['text'] уберите обратный слеш -
Ответ отправил: Киряков Александр Иванович (статус: 1-ый класс)
Ответ отправлен: 08.08.2007, 15:34

Отвечает: Gines
Здравствуйте, Бобровский Сергей Сергеевич!

by - это ключевое слово и лучше не использовать его в качестве имени поля. Я думаю что ошибка в этом.
Ответ отправил: Gines (статус: 3-ий класс)
Ответ отправлен: 08.08.2007, 17:19


Вопрос № 97.792
Необходимо отпраить письмо функцией mail() и прикрепить к нему текстовый файл. как лучше можно это сделать?
Отправлен: 09.08.2007, 01:17
Вопрос задал: Sol_ (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Powoditch konstantin
Здравствуйте, Sol_!
Вам следует прочитать о стандарте MIME. В приложении обяснение этого стандарта и пример посылки письма с приклеплением двух файлов к нему. Информацию нашел только на английском. Вас ведь это не остановит? Весь пример не влез в приложение, если есть интерес - напишите мне я вышлю на емейл полный текст.

Приложение:

Ответ отправил: Powoditch konstantin (статус: 4-ый класс)
Ответ отправлен: 09.08.2007, 11:40


Вопрос № 97.831
есть простая форма с двумя полями, файл который обрабатывает данные с формы должен за счет условия if и просмотра переменной $_POST на наличие пустой переменой используя isset должна либо принять данные (если все поля заполнены) или выдать сообщение "Не заполнены все поля"
но почему то скрипт все время выводит одно и тоже в не зависимости от того чтоя вводил в поле формы!!!
Помогите пожалуйста а то уже 8 час мучаюсь с этой проблемой как только не изменял и форму и скрипт уже в каждой строчке ошибки мерещатся .. ппц

Приложение:

Отправлен: 09.08.2007, 12:57
Вопрос задал: Вацура Кирилл Андреевич (статус: Посетитель)
Всего ответов: 7
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: PVS
Здравствуйте, Вацура Кирилл Андреевич!
Не method="$_POST" а method="POST"
Ответ отправил: PVS (статус: Специалист)
Ответ отправлен: 09.08.2007, 13:03

Отвечает: Селев Валерий
Здравствуйте, Вацура Кирилл Андреевич!

Попробуйте заменить
<form action="script.php" method="$_POST">

на
<form action="script.php" method="post">
Ответ отправил: Селев Валерий (статус: 5-ый класс)
Ответ отправлен: 09.08.2007, 13:09

Отвечает: Nexus
Здравствуйте, Вацура Кирилл Андреевич!

Исправленный код в приложении. Во-первых, метод не $_POST, а просто post, $_POST это суперглобальный массив в пхп, к html никакого отношения не имеет. Во-вторых, isset() всегда будет возвращать true, т.к. у тебя есть это поле в форме, т.е. переменная у тебя будет объявлена, но содержаться в ней может либо пустая строка, либо нет. И еще, лучше отключи register_globals опцию в php.ini и обращайся к переменным из поста, гета, сессий и пр. через соответствующие суперглобальные массивы - $_POST, $_GET, $_SESSION соответственно

Приложение:

Ответ отправил: Nexus (статус: 9-ый класс)
Ответ отправлен: 09.08.2007, 13:09

Отвечает: Flynn
Здравствуйте, Вацура Кирилл Андреевич!
Методы для формы - POST и GET. $_POST - это же глобальный массив в РНР и в обычном HTML он соответсвенно использоваться не будет.

Так же для проверки сразу нескольких их можно задавать сразу в один isset.
If iseet($_POST['name'],$_POST['sname'],...) {...}
Ответ отправил: Flynn (статус: 3-ий класс)
Ответ отправлен: 09.08.2007, 13:11

Отвечает: Бобровский Сергей Сергеевич
Здравствуйте, Вацура Кирилл Андреевич!
Замените $_POST на POST. Ну это Вам уже сказали.
Также у вас проверяется наличие переменной
isset($_POST['surname'])
вернет TRUE при наличии этой переменной, следовательно если она есть, то скрипт выведет "Не заполнено поле", а если нет, то попытается вывести имя. Вам же нужно наоборот. Для этого нужно добавить восклицательный знак. Исправленный и компактный код в приложении.

Приложение:

---------
Никогда не бойтесь делать то, что не умеете! Помните: Ноев Ковчег построил любитель, а Титаник - профессионал.

Ответ отправил: Бобровский Сергей Сергеевич (статус: 2-ой класс)
Ответ отправлен: 09.08.2007, 13:32

Отвечает: M@gi$†e®
Здравствуйте, Вацура Кирилл Андреевич!
Ошибка: пропущен оператор ! (not)
должно быть if(!isset($_POST["имя_переменной"]))
---------
Aquila non Capta Muscas
Ответ отправил: M@gi$†e® (статус: 3-ий класс)
Ответ отправлен: 09.08.2007, 19:41

Отвечает: Powoditch konstantin
Здравствуйте, Вацура Кирилл Андреевич!
Гммм. Такая простая ситуация=) Функция isset(value) - ВСЕГДА будет возвращать тру если Вы сабмитите форму, тоисть переменные name и surname будут всегда присутствувать! Вам просто напросто надо заменить isset на empty, тогда всё будет нормально.
Ответ отправил: Powoditch konstantin (статус: 4-ый класс)
Ответ отправлен: 09.08.2007, 22:16


Вопрос № 97.832
Здраствуйте, уважаемые эксперты!
Это программа "покер в кости", правда, изображения костей нельзя поместить здесь
В этой программе (как и в некоторых других, которые я писал) есть проблема: данные после совершения круга действий теряются, т.е. например выполнен первый бросок, оставлены метки, выполнен 2-ой и показано, сколько выигрышь составил и сколько теперь наличных, а при нажатии "еще раз бросить" все начинается с начала, т.е. сумма наличных не сохраняется. Подскажите, как это исправить можно?

Приложение:

Отправлен: 09.08.2007, 13:00
Вопрос задал: Павел Владимирович (статус: 4-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Flynn
Здравствуйте, Павел Владимирович!
После value = "$secondroll" у вас не закрыт тег - поэтому он не видит следующий cash.
Так же я бы посоветовал выключить register_globals в php.ini и использовать массив $_POST дабы не засорять строку запроса всяким хламом, который пользователю видеть совсем не обязательно.
Еще данные типа количетсва бросков и суммы лучше хранить в этом случае в сессиях (session_start();session_register('cash');$_SESSION['cash'] = $cash;).
Ответ отправил: Flynn (статус: 3-ий класс)
Ответ отправлен: 09.08.2007, 13:26
Оценка за ответ: 5
Комментарий оценки:
Спасибо, очень выручили.


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.54 beta от 01.08.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное