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

  Все выпуски  

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


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

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

Выпуск № 463
от 19.09.2006, 15:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 364, Экспертов: 56
В номере:Вопросов: 7, Ответов: 23


Вопрос № 55366: Уважаемые эксперты! Подскажите, как средствами PHP разобрать XML-запрос, переданный методом POST? Если вопрос требует очень пространного ответа, то где об этом можно почитать?...
Вопрос № 55396: Необходимо передать значения переменных методом POST, но по тегу A. С методом GET проблем нет: abc.php?a=5&b=2, а как сделать тоже методом POST? P.S. Кнопку submit делать нехочу, она выглядит коряво. ..
Вопрос № 55410: Расскажите, плиз, как в пхп работать с чекбоксами. Интереснее всего знать, как проверять, помечены они или нет. Заранее спасибо за ответы....
Вопрос № 55414: Думаю ошибка где-то здесь. Я пытаюсь добавить текст в бд, то есть после подключения к бд, идет выбор бд, потом вставка в таблицу news данных из $news_text Хотя мне нужно, чтоб вставка проходила по такому принципу в таблицу news в поле news_text ...
Вопрос № 55419: Здравствуйте! Такая прорблема. Нужна форма на сайте в которую посетитель вводит логин и пароль и нажимает отправить, после чего данные отсылаются мне на почту. Скрипт несложный я написал его сам (см в приложении). На денвере он работает х...
Вопрос № 55425: Извините, неточно сформулировал вопрос. Расскажите, как в пхп определить помеченные чекбоксы, при условии, что этих самых чекбоксов не фиксированное количество, которое может принимать довольно большие значения. Заранее спасибо за ответы....
Вопрос № 55430: Уважаемые, Где и что надо изменить, чтоб php код работал в html на локалке?...

Вопрос № 55.366
Уважаемые эксперты!

Подскажите, как средствами PHP разобрать XML-запрос, переданный методом POST? Если вопрос требует очень пространного ответа, то где об этом можно почитать?
Отправлен: 14.09.2006, 00:06
Вопрос задал: chiefff (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: HookEst
Здравствуйте, chiefff!
Если правильно понял, XML-запрос это переменная, передаваемая скрипту через HTTP POST содержащая строку в формате XML, или uploaded XML файл, то в простых случаях можно обработать текст с помощью регулярных выражений(на этом не буду останавливаться, существует множество статей и книг по этой теме), или же воспользоваться встроенными в PHP XML Parser Functions.
в примере(взят из мануала по PHP) выводиться структура XML файла data.xml с отступами.
Основные функции:
xml_parser_create() - создает объект xml_parser;
xml_set_element_handler() - задает парсеру callback функции вызываемые при открытии и закрытии каждого элемента(функции startElement и endElement);
startElement,endElement - вызываются при открытии и закрытии элемента, для его обработки, в параметрах передаются: объект parser, имя текущего элемента, и ассоциативный массив его аттрибутов(ключ-имя аттрибута, значение - его значение);
xml_parse()- непосредственно парсит XML вызывая startElement и endElement для каждого элемента по порядку;
xml_parser_free() уничтожает xml_parser;

ну а все остальное - механизм чтения XML из файла, если у Вас строка можно все это опустить, а в xml_parse передать эту строку.
по литературе что-нибудь особое к сожалению подсказать не могу, разве что стандартный мануал по PHP(http://www.php.net/docs.php)
Если что, пишите.
Удачи.

Приложение:

Ответ отправил: HookEst (статус: 2-ой класс)
Ответ отправлен: 15.09.2006, 11:25
Оценка за ответ: 5
Комментарий оценки:
Спасибо!


Вопрос № 55.396
Необходимо передать значения переменных методом POST, но по тегу A.
С методом GET проблем нет: abc.php?a=5&b=2, а как сделать тоже методом POST?

P.S. Кнопку submit делать нехочу, она выглядит коряво.
Отправлен: 14.09.2006, 09:44
Вопрос задал: NiGHT (статус: Студент)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Козлов Алексей Сергеевич
Здравствуйте, NiGHT!

Простыми средствами (без использования кнопки submit) это сделать невозможно.
---------
Вы доставили мне истинное удовольствие парни, взвалив на меня Ваши проблемы (М. Фрай).
Ответ отправил: Козлов Алексей Сергеевич (статус: 7-ой класс)
Ответ отправлен: 14.09.2006, 09:56

Отвечает: Straight
Здравствуйте, NiGHT!
Ну, во-первых, кто мешает сделать кнопку, которая выглядит не коряво?
А во-вторых, если уж так приспичило, то сделайте форму с невидимыми полями и без кнопки (хоть вообще невидимую форму в невидимом слое). В теге А напишите:
onClick="mycoolform.submit();"
Ответ отправил: Straight (статус: Студент)
Ответ отправлен: 14.09.2006, 09:56
Оценка за ответ: 5


Вопрос № 55.410
Расскажите, плиз, как в пхп работать с чекбоксами. Интереснее всего знать, как проверять, помечены они или нет. Заранее спасибо за ответы.
Отправлен: 14.09.2006, 12:01
Вопрос задал: Romooseek (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: SPEKTR
Здравствуйте, Romooseek!
Просто в теге указываете имя чекбокса, а после, при обработке PHP днлаете проверку:

<?

// Допустим, имя чекбокса -- "vodka", а метод - POST

if ($HTTP_POST_VARS['vodka'] == true) // Если помечен
{echo 'Водка пить -- земля валяться!';}
else // Если не помечен
{echo 'Трава курить -- орёл летать!';};

?>
---------
Кто эксперт? Я эксперт?! Не, вы меня с кем-то путаете...
Ответ отправил: SPEKTR (статус: 2-ой класс)
Ответ отправлен: 14.09.2006, 12:13

Отвечает: Козлов Алексей Сергеевич
Здравствуйте, Romooseek!
1. Для удобства работы желательно использовать ассоциированные массивы.
2. Основная особенность работы чекбоксо'ов состоит в том, что если он не выбран, то НИКАКИХ данных по этому чекбоксу не передается. Что бы этого не присходило необходимо применять поле HIDDEN.

Пример рабочего кода приведен в приложении.

Приложение:

---------
Вы доставили мне истинное удовольствие парни, взвалив на меня Ваши проблемы (М. Фрай).

Ответ отправил: Козлов Алексей Сергеевич (статус: 7-ой класс)
Ответ отправлен: 14.09.2006, 12:15

Отвечает: Physicist
Здравствуйте, Romooseek!

У каждого checkbox'а есть имя (name='imya') и значение (value='znach'). Если checkbox помечен, то при отправке данных на сервер будет отправлена строка imya=znach (POST или GET методом, если поле value не указано, считается что оно равно 'on'), а если не помечен - ничего не отправится.

Так что достаточно проверить просто факт существования переменной с именем imya:
if (isset($_REQUEST['imya'])) {
...//checkbox помечен
}
Ответ отправил: Physicist (статус: Студент)
Ответ отправлен: 14.09.2006, 12:21

Отвечает: PVS
Здравствуйте, Romooseek!
Чекбокс - это то что Вы видите. на самом деле он такой же input как текстовое поле или radiobutton тоесть он имеет name="SomeName" и value="SomeValue" . Для PHP это значит что при отмеченом чекбоксе в отправленых данных будет установлена переменная $SomeName (в php3. в php4 и выше при настройке register_globals=On) или $_REQUEST["SomeName"] (в php4 и выше - всегда, независимо от register_globals). Значение этой переменной, естественно, будет SomeValue .
Если чекбоксов много и/или заранее неизвестно сколько, то их называют так: name="SomeName[]" и разные value. Тоесть PHP получит переменную-массив. Если нескольким чекбоксам дать одно имя, но не в виде массива (без []) то PHP получит только последнее значение.
Ответ отправил: PVS (статус: Студент)
Ответ отправлен: 14.09.2006, 12:21

Отвечает: NoOne
Здравствуйте, Romooseek!
Я бы предложил такой вариант.

Приложение:

---------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (c) М.Фаулер

Ответ отправил: NoOne (статус: 2-ой класс)
Ответ отправлен: 14.09.2006, 14:18


Вопрос № 55.414
Думаю ошибка где-то здесь. Я пытаюсь добавить текст в бд, то есть после подключения к бд, идет выбор бд, потом вставка в таблицу news данных из $news_text
Хотя мне нужно, чтоб вставка проходила по такому принципу в таблицу news в поле news_text из $news_text
Подскажите как это написать
Спасибо!

Приложение:

Отправлен: 14.09.2006, 12:16
Вопрос задала: MadeInUSSR (статус: 2-ой класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: SPEKTR
Здравствуйте, MadeInUSSR!
Тут достаточно после имени таблицы указать имя поля в скобках. Ещё я немного Вам код поменял, пару кавычек поставил, так вернее и вообще правильней. Удачи!

$query="insert into news (`news_text`) values ('" . $news_text . "')";
---------
Кто эксперт? Я эксперт?! Не, вы меня с кем-то путаете...
Ответ отправил: SPEKTR (статус: 2-ой класс)
Ответ отправлен: 14.09.2006, 12:26
Оценка за ответ: 5

Отвечает: Козлов Алексей Сергеевич
Здравствуйте, MadeInUSSR!
Запрос следует переписать так:

$query="insert into news (news_text) values ('$news_text');";
$result=mysql_query($query);
---------
Вы доставили мне истинное удовольствие парни, взвалив на меня Ваши проблемы (М. Фрай).
Ответ отправил: Козлов Алексей Сергеевич (статус: 7-ой класс)
Ответ отправлен: 14.09.2006, 12:26

Отвечает: PVS
Здравствуйте, MadeInUSSR!
Кавычек мало, да и немного не там они
$query="insert into new(news_text) values ('".$news_text."')";
$news_text также предварительно должен быть обработан на предмет наличия символов кавычек, слэша и чего-там еще sql не любит. Например так $news_text=addslashes($news_text);
Ответ отправил: PVS (статус: Студент)
Ответ отправлен: 14.09.2006, 12:27
Оценка за ответ: 5


Вопрос № 55.419
Здравствуйте!
Такая прорблема.
Нужна форма на сайте в которую посетитель вводит логин и пароль и нажимает отправить, после чего данные отсылаются мне на почту.
Скрипт несложный я написал его сам (см в приложении). На денвере он работает хорошо и без збоев.
Как только перенес на хостинг (бесплатный но с поддержкой пхп, jino-net.ru) перестал.
Причем письмо мне приходит но без логина и пароля. Такое впечатление что просто не переносятся значения переменных. Что нужно исправить в скрипте или в форме, чтобы все было в порядке.
На вышеупомянутом сайте стоит пхп 5, а на денвере если не ошибаюсь 4. Может проблема в этом?

Приложение:

Отправлен: 14.09.2006, 12:34
Вопрос задал: Valeraorg1 (статус: 2-ой класс)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Цепковский Антон Сергеевич
Здравствуйте, Valeraorg1!

Проблема в том, что у Вас в денвере выставлена переменная RegisterGlobal в on, а на хостинге в off. И соответственно на хостинге переменные, переданные через метод post будут храниться в массиве $_POST.

Перепишите участок кода след. образом, должно заработать:

============php===============
<?php
// файл sendmail.php
if (mail("valeraorg@mail.ru", "сайт", "Данные клиента Логин:".$_POST["body"]." ".Пароль: ".$_POST["pas"])) {
echo("Ваш логин и пароль отосланы") ;
} else {
echo ("Сбой") ;
}
?>

С уважением,
Антон Цепковский.

Приложение:

---------
Вся наша жизнь - RPG

Ответ отправил: Цепковский Антон Сергеевич (статус: 4-ый класс)
Ответ отправлен: 14.09.2006, 12:42
Оценка за ответ: 5
Комментарий оценки:
Спасибо большое!!!!!!!!!!!!!!
Заработало!!!!!!

Отвечает: Straight
Здравствуйте, Valeraorg1!
Похоже на то, что на сервере стоит "register_global off".
Попробуйте брать данные не напрямую из переменных, а из массива $_POST
$body = $_POST['body'];
$pas = $_POST['pas'];
Ответ отправил: Straight (статус: Студент)
Ответ отправлен: 14.09.2006, 12:42
Оценка за ответ: 5
Комментарий оценки:
Спасибо большое!!!!!!!!!!!!!!
Заработало!!!!!!

Отвечает: Козлов Алексей Сергеевич
Здравствуйте, Valeraorg1!
Причина очень проста - в Денвере включена опция registr_globals, который отключен у провайдера. Поэтому добавте в начало файла sendmail.php следующий код:

$body = $_REQUEST['body'];
$pas = $_REQUEST['pas'];


---------
Вы доставили мне истинное удовольствие парни, взвалив на меня Ваши проблемы (М. Фрай).
Ответ отправил: Козлов Алексей Сергеевич (статус: 7-ой класс)
Ответ отправлен: 14.09.2006, 12:44
Оценка за ответ: 5
Комментарий оценки:
Спасибо большое!!!!!!!!!!!!!!
Заработало!!!!!!

Отвечает: PVS
Здравствуйте, Valeraorg1!
Вероятно в Денвере выставлена настройка register_globals=On. По умолчанию она отключена. Замените $body на $_POST["body"], $pas на $_POST["pas"] и т.д.
Ответ отправил: PVS (статус: Студент)
Ответ отправлен: 14.09.2006, 12:58
Оценка за ответ: 5
Комментарий оценки:
Спасибо большое!!!!!!!!!!!!!!
Заработало!!!!!!


Вопрос № 55.425
Извините, неточно сформулировал вопрос. Расскажите, как в пхп определить помеченные чекбоксы, при условии, что этих самых чекбоксов не фиксированное количество, которое может принимать довольно большие значения. Заранее спасибо за ответы.
Отправлен: 14.09.2006, 13:18
Вопрос задал: Romooseek (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Physicist
Здравствуйте, Romooseek!

Тогда так: присваиваешь каждому checkbox'у имя-массив, например name="checks[]" и задаешь значение value="123", где 123 - номер checkbox'а. Тогда проверка того, что chekbox 123 помечен выглядит так:

Приложение:

Ответ отправил: Physicist (статус: Студент)
Ответ отправлен: 14.09.2006, 13:35

Отвечает: SPEKTR
Здравствуйте, Romooseek!
А можно так.
Где-то должно храниться количество этих чекбоксов (а то как программа определит их количество?), а после присваиваем чекбоксам имена "check1", "check2", "check3"...
После устраиваем цикл, примерно такой:

<?

// Допустим, что чекбоксов 4, количество надо
// вытаскивать или из базы данных или из текстового файла.
// Метод -- POST
// И пусть ещё, если чекбокс отбечен, то выводится какой-то текст из файла.

for ($q = 1; $q <= 4; $q++)
{if ($HTTP_POST_VARS['check' . $q] == true)
{require('file' . $q . '.txt');};};

?>
---------
Кто эксперт? Я эксперт?! Не, вы меня с кем-то путаете...
Ответ отправил: SPEKTR (статус: 2-ой класс)
Ответ отправлен: 14.09.2006, 13:41

Отвечает: PVS
Здравствуйте, Romooseek!
Дайте им всем имя name="cb_arr[]" и value , по которому вы сможете их идентифицировать (например уникальное поле из базы данных или на основании чего там они у вас формируются). Тогда в PHP Вы получите
$cb_arr=$_REQUEST["cb_arr"];
foreach($cb_arr as $cb_val){
echo $cb_val." отмечен";
};
Ответ отправил: PVS (статус: Студент)
Ответ отправлен: 14.09.2006, 13:51

Отвечает: NoOne
Здравствуйте, Romooseek!
Я бы предложил такой вариант

Приложение:

---------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (c) М.Фаулер

Ответ отправил: NoOne (статус: 2-ой класс)
Ответ отправлен: 14.09.2006, 14:18

Отвечает: Cimus
Здравствуйте, Romooseek!
Посмотрите приложение, там достаточно всё понятно.
Можно ещё все checkbox`ы собрать в отдельный массив, для этого надо имена checkbox`ов поменять на
NAME='array[1] '
NAME='array[2] '
NAME='array[3] '
...........
NAME='array[133] '

и соответственно просмотреть всё в цикле

foreach($_POST['array'] as $key=>$value)
{
print "Вы отметили кнопку <b>"$key"</b>, её значение равно - <b>"$value"</b><br> ";
}

Приложение:

---------
Достичь можно любых высот !

Ответ отправил: Cimus (статус: 7-ой класс)
Ответ отправлен: 14.09.2006, 15:39


Вопрос № 55.430
Уважаемые, Где и что надо изменить, чтоб php код работал в html на локалке?
Отправлен: 14.09.2006, 13:44
Вопрос задала: MadeInUSSR (статус: 2-ой класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: PVS
Здравствуйте, MadeInUSSR!
Если PHP установлен, то в httpd.conf прописаны расширения которые он обрабатывает: AddType application/x-httpd-php .php
Надо добавить
AddType application/x-httpd-php .htm
AddType application/x-httpd-php .html
и т.д. - все что Вам нужно пропустить через PHP
Ответ отправил: PVS (статус: Студент)
Ответ отправлен: 14.09.2006, 13:49
Оценка за ответ: 5

Отвечает: Цепковский Антон Сергеевич
Здравствуйте, MadeInUSSR!

Это настраивается в настройках Вашего web-сервера.

Для IIS: Вкладка "Домашний каталог", кнопка "Настройка", для типа файла .html ставите обработчик [путь]/php.exe

Для Apache: в файле httpd.conf добавьте директиву AddType application/x-httpd-php .html

С уважением,
Антон Цепковский
---------
Вся наша жизнь - RPG
Ответ отправил: Цепковский Антон Сергеевич (статус: 4-ый класс)
Ответ отправлен: 14.09.2006, 14:05
Оценка за ответ: 5

Отвечает: Козлов Алексей Сергеевич
Здравствуйте, MadeInUSSR!
Одно из интересных свойств PHP является то, что ВСЕ находящееся за пределами тегов <?php и ?> выводится как есть. Поэтому я пишу скрипт в котором перемешивается HTML и PHP код.

Приложение:

---------
Вы доставили мне истинное удовольствие парни, взвалив на меня Ваши проблемы (М. Фрай).

Ответ отправил: Козлов Алексей Сергеевич (статус: 7-ой класс)
Ответ отправлен: 14.09.2006, 14:14
Оценка за ответ: 5


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

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

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

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

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


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


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.36 от 06.09.2006
Яндекс Rambler's Top100

В избранное