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

  Все выпуски  

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


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

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

Выпуск № 443
от 29.08.2006, 11:05

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


Вопрос № 52986: Привет всем экспертам! У меня к Вам вопрос: есть строка вида "какойтотекст$x1текст$x2...". Т.е содержит текст и названия переменных. Она получена динамически(загружена из файла например). Можно ли как-нибудь заменить подстроки $xi на реальн...
Вопрос № 53003: Уважаемые Эксперты раньше пользовлся версией PHP 4.2 при переходе на 4.4 перестали работать сслки вида <a href="index.php?s=company">о компании</a> код индексной странички приведен ниже подскажите для чайника в чем проблемма....
Вопрос № 53012: Доброго времени суток уважаемые. Мне надо сделать скрипт голосования. основанный не на базе данных, а на файлах. И тут я чуть-чуть встал в тупик. Дело в том что вывод нужно сделать срахуна две страницы. в одной итоги голосования а во вторйо комменты....
Вопрос № 53042: Здравстуй те, уважаемые эксперты. Подскажите, пожалуйста, какие-нибудь ссылки на описание и работу с AJAX и его взаимодействие с PHP, елси у кого есть электронные книги по теме, также буду благодарен. Заранее, спасибо...
Вопрос № 53063: Помогите, пожалуйста, найти ошибку Есть форма, при нажатии кнопки переменные формы передаются скрипту...
Вопрос № 53078: Доброе время суток! Вопрос по ф-ции mail() - как можно задать путь к sendmail? В cpanel путь /usr/sbin/sendmail, если просто отправлять письмо через mail, то на двух моих хостингах из трех письма не отправляются. Точнее не доходят, сама ф-ци...
Вопрос № 53082: Здравствуйте эксперты! База данных MySQL содержит слова русского языка (~110000 записей) почему при запросе SELECT* FROM `dictionary` WHERE `word` ='гений' в результат попадает ещё одно слово "веник" ?? С чем это может...

Вопрос № 52.986
Привет всем экспертам! У меня к Вам вопрос: есть строка вида "какойтотекст$x1текст$x2...". Т.е содержит текст и названия переменных. Она получена динамически(загружена из файла например). Можно ли как-нибудь заменить подстроки $xi на реальные значения соответствующих переменных? Причем все автоматически? Названия переменных конечно не пронумерованы.
Отправлен: 23.08.2006, 10:52
Вопрос задал: Alexius (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Zysoftik
Здравствуйте, Alexius!

Можно. Вы можете вызвать функцию eval, которая исполнит переданную ей строку как PHP код.
Т.е. можно так:
<?
...
$s='$str=какойтотекст$x1текст$x2';
eval($s);
echo $str;
...
?>

если код что-о выводит, то вывод будет перенаправлен в браузер (или в открытый активный буфер)
Ответ отправил: Zysoftik (статус: 6-ой класс)
Ответ отправлен: 23.08.2006, 11:01
Оценка за ответ: 5
Комментарий оценки:
Спасибо за быстрый ответ. Помог код из справочника по ф-ии eval:
eval("$str = "$str";");

Отвечает: Cimus
Здравствуйте, Alexius!
Функчия eval более медленная чем include(), можно вывести текст вот так:

include('Ваш текст.txt');
Сам текст должен выглядеть вот так -
текст текст текст <?=$x1?> текст текст текст <?=$x2?> <?=$x2?>текст текст текст
<?=$x...?>.......


---------
Достичь можно любых высот !
Ответ отправил: Cimus (статус: 6-ой класс)
Ответ отправлен: 23.08.2006, 13:28

Отвечает: Santana
Здравствуйте, Alexius!
Ответ лежит на поверхности. ПХП развернет Ваши переменные и в том виде в каком вы его употребили в вопросе. те
есть переменная $x1 и пусть она равна $x1 = " ЗНАЧЕНИЕ ПЕРВОЙ ПЕРЕМЕННОЙ "
соответственно $x2 = " ЗНАЧЕНИЕ ВТОРОЙ ПЕРЕМЕННОЙ " и ежели мы какой то третей переменной пусть это будет $x3 присвоим значение "какойтотекст$x1текст$x2..."

$x3 = "какойтотекст$x1текст$x2..."

то в ней будет строка следущего вида

"какойтотекст ЗНАЧЕНИЕ ПЕРВОЙ ПЕРЕМЕННОЙ текст ЗНАЧЕНИЕ ВТОРОЙ ПЕРЕМЕННОЙ ..."

честно слово :)
Ответ отправил: Santana (статус: 5-ый класс)
Ответ отправлен: 23.08.2006, 18:32

Отвечает: NoOne
Здравствуйте, Alexius!
В общем виде можно сделать так (см. приложение), переменная может состоять из символов a-z0-9 и символа подчеркивание, после переменной должен идти хотя бы один символ, которых не входит в набор a-z0-9 и "_", хотя бы просто пробел. Возможно в приложении код вставится криво и не будет работать, тогда отпишитесь в ПМ.

Приложение:

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

Ответ отправил: NoOne (статус: 2-ой класс)
Ответ отправлен: 23.08.2006, 19:46


Вопрос № 53.003
Уважаемые Эксперты раньше пользовлся версией PHP 4.2 при переходе на 4.4 перестали работать сслки вида <a href="index.php?s=company">о компании</a> код индексной странички приведен ниже подскажите для чайника в чем проблемма.

Приложение:

Отправлен: 23.08.2006, 13:47
Вопрос задал: Игорь Том/ IgorSpb (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Saw
Здравствуйте, Игорь Том/ IgorSpb!

Очевидно изменился параметр register_globals в файле конфигурации php.ini, если этот параметр включен, то это позволяет обращатся к переменным передаваемым скрипту напрямую, т.е. будто они были заданы как глобвльные. А отключение этого параметра так делать не позволяет, и к таким переменным следует обращаться через массивы $_GET - для переменных переданных методом GET и $_POST - для POST, т.е. в данном случае переменная s будет $_GET['s'], а вообще, чтобы скрипт не зависел от установки этого параметра, используйте эти массивы ($_GET и $_POST) всегда.
Ответ отправил: Saw (статус: 3-ий класс)
Ответ отправлен: 23.08.2006, 13:56

Отвечает: Zysoftik
Здравствуйте, Игорь Том/ IgorSpb!

Скорее всего в конфигурации PHP отключена опция register_globals.

А вообще, я бы рекомендовал использовать специальные предопределенные массивы:
$_GET - для переменных, передаваемых через GET запрос,
$_POST - для POST запроса.

Попробуйте вместо $s в коде написать $_GET['s'] и все должно заработать.
Ответ отправил: Zysoftik (статус: 6-ой класс)
Ответ отправлен: 23.08.2006, 13:58

Отвечает: gp
Здравствуйте, Игорь Том/ IgorSpb!
Попробуйте в начале php кода в приведенном примере вставить
$s=$_GET["s"];
Если поможет, значит, в новой конфигурации у вас register_globals = off
---------
Я знаю достаточно, чтобы осознать, сколь многого я не знаю...
Ответ отправил: gp (статус: Академик)
Украина, Симферополь
WWW: Недвижимость в Крыму
----
Ответ отправлен: 23.08.2006, 13:59


Вопрос № 53.012
Доброго времени суток уважаемые. Мне надо сделать скрипт голосования. основанный не на базе данных, а на файлах. И тут я чуть-чуть встал в тупик. Дело в том что вывод нужно сделать срахуна две страницы. в одной итоги голосования а во вторйо комменты. и потому возникает вопрос, как вывести на страницу ЧАСТЬ массива текстового? Ведь иного пути я не вижу, кроме как использовать в текстовой файле массив. И второй вопрос. Я немного полдазил по мануалу, но так и не вспомнил функцию блокирования доступа к файлу пока его считываютзаписывают. И подскжите, как лучше всего организовать вывод массива - общие советы? Просто такое я делаю в первый раз и с базой данных вопросов бы не возникло вообще. Заренее благодарю.
Отправлен: 23.08.2006, 14:39
Вопрос задал: Чинга (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Козлов Алексей Сергеевич
Здравствуйте, Чинга!
1. Хранить данные можно в файле-CSV. Т.е. в виде номер_голосовавщего, оченка, комментарий. Разделенных спецсимволом - например : или ;
Функция fgetcsv() читает построчно CSV-файл с дескриптором $fp и разбивает по символу $delim.

2. Для блокировки файла в PHP существует функция flock(). Для блокировки файла лучше использвать следующую комбинацию:
flock($f, 1); - блокировка на чтение.
flock($f, 2); - блокировка на запись.

... некий код

flock($f, 3); - снятие блокировки.
---------
Вы доставили мне истинное удовольствие парни, взвалив на меня Ваши проблемы (М. Фрай).
Ответ отправил: Козлов Алексей Сергеевич (статус: 6-ой класс)
Ответ отправлен: 23.08.2006, 14:55
Оценка за ответ: 4
Комментарий оценки:
Благодарю. Но я не буду пользовать CVS файлами
1) я не знаю специфику работу.
2) Во избежания разных прецендентов то как, использование на машине хостера php3 - код обязан быть универсальным.

Отвечает: Яруллин Азат Рифкатович
Здравствуйте, Чинга!
можно сделать следующее:
хранить каждый опрос в отдельном файле.
к примеру, 1.txt, 2.txt, 3.txt, ...
всё в одной папке vote
предположим, что каждый файл имеет такую структуру (без нумерации строк):
0. <вопрос>
1. <вариант1>%%<вариант2>%%<вариант3>
2. <количество1>%%<количество2>%%<количество3>
3. <коммент1>%%<коммент2>
так вот, читаете файл с помощью file().
например, $vot = file('vot/2.txt'); получаете массив.
$vot[0] - это ваш вопрос, $vot[1] - варианты ответа, и т.д...
если нужны, варианты ответа, колчество выбора вырианта, комментарии можете разделить ещё.
для этого можете использовать explode(), ну, или split().
для данного примера:
$ver = explode("%%", $vot[1]); $kol = explode("%%", $vot[2]); $com = explode("%%", $vot[3]);
вот Вы и получили всё в массивах...
варианту $ver[$i] соответствует $kol[$i].
для вывода чего-либо просто выводите элементы соответствующего массива в цикле.
это можно сделать так: foreach($com as $key=>$value){ echo($value); } или for($i=0;$i<count($com);$i++){ echo($com[$i]); }
думаю, всё ясно...

на счет блокирования файла...
вот, прочтите это: http://www.compdoc.ru/internet/php/php_blocking/

P.S. Вы можете придумать любую другую структуру для хранения информации. Возможно, получится по лучше... и даже сможете держать все опросы в одном файле...
Удачи!
Ответ отправил: Яруллин Азат Рифкатович (статус: 8-ой класс)
Ответ отправлен: 23.08.2006, 23:21
Оценка за ответ: 5
Комментарий оценки:
Благодарю! Все ясно четко и понятно! ПАСИБО ОГРОМНОЕ ВАМ! :))))


Вопрос № 53.042
Здравстуйте, уважаемые эксперты.
Подскажите, пожалуйста, какие-нибудь ссылки на описание и работу с AJAX и его взаимодействие с PHP, елси у кого есть электронные книги по теме, также буду благодарен.
Заранее, спасибо
Отправлен: 23.08.2006, 17:02
Вопрос задал: Diver (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Яруллин Азат Рифкатович
Здравствуйте, Diver!

http://www-128.ibm.com/developerworks/ru/library/wa-ajaxintro1/
http://www-128.ibm.com/developerworks/ru/library/wa-ajaxintro2/
http://www-128.ibm.com/developerworks/ru/library/wa-ajaxintro3/
http://www-128.ibm.com/developerworks/ru/library/wa-ajaxintro4/
http://www-128.ibm.com/developerworks/ru/library/wa-ajaxintro5/

http://dklab.ru/lib/Subsys_JsHttpRequest/
http://ru.wikipedia.org/wiki/AJAX

книги:
http://www.softaz.org/2006/06/17/knigi_po_ajax_specialno_dlja_aleksandra.html

Удачи!
Ответ отправил: Яруллин Азат Рифкатович (статус: 8-ой класс)
Ответ отправлен: 23.08.2006, 18:51
Оценка за ответ: 5
Комментарий оценки:
Спасибо

Отвечает: Бакулин Станислав Анатольевич
Здравствуйте, Diver!

Нашел книгу "Ajax And Php: Building Responsive Web Applications" на английском языке (русское название книги - "AJAX и PHP. Разработка динамических веб-приложений". Книгу можно скачать с http://rapidshare.de/files/28779396/Packt.Publishing.Ajax.And.Php.Building.Responsive.Web.Applications.Mar.2006.rar.html
Ответ отправил: Бакулин Станислав Анатольевич (статус: 1-ый класс)
Ответ отправлен: 24.08.2006, 13:38
Оценка за ответ: 5
Комментарий оценки:
Спасибо


Вопрос № 53.063
Помогите, пожалуйста, найти ошибку
Есть форма, при нажатии кнопки переменные формы передаются скрипту

Приложение:

Отправлен: 23.08.2006, 20:22
Вопрос задал: TaRaS (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Santana
Здравствуйте, TaRaS!
Ну во первых в sex.php нужны теги <html> и <body> в паре иссесно
во вторых зачем <form action="http://test1.ru/sex.php" method="get"> если они в одном каталоге на серваке вполне хватит <form action="sex.php" method="get">.
а так вроде все нормально. может разве, что метод не get a post попробовать

удачи
Ответ отправил: Santana (статус: 5-ый класс)
Ответ отправлен: 23.08.2006, 20:36

Отвечает: Яруллин Азат Рифкатович
Здравствуйте, TaRaS!
Вы просто не правильно получаете выбранное значение...
Вот:
Файл sex.php
<?php
echo($_GET['sex']); // или echo($_REQUEST['sex']);
?>
Удачи!

Приложение:

Ответ отправил: Яруллин Азат Рифкатович (статус: 8-ой класс)
Ответ отправлен: 23.08.2006, 20:37
Оценка за ответ: 5


Вопрос № 53.078
Доброе время суток!

Вопрос по ф-ции mail() - как можно задать путь к sendmail? В cpanel путь /usr/sbin/sendmail, если просто отправлять письмо через mail, то на двух моих хостингах из трех письма не отправляются. Точнее не доходят, сама ф-ция возвращает true, никаких варнингов не выпадет... ini_set('sendmail_path', '/usr/sbin/sendmail') ничего не меняет.

Я конечно понимаю что тут нужно в саппорт обращаться, но сейчас я этого сделать не могу, поэтому если есть какие-то идеи - помогите плз. Заранее благодарен!
Отправлен: 23.08.2006, 23:48
Вопрос задал: Nexus (статус: 4-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Яруллин Азат Рифкатович
Здравствуйте, Nexus!
Вообще, функция mail() - это не гарантированная доставка почты, т.е. она может не дойти... как в Вашем случае. (Вы правы на счет того, что нужно в support)
Лучше использовать какой-нибудь класс для отправки письма через smtp с авторизацией. при такой отправке вероятность того, что письмо дойдет выше.
Классы:
http://www.alangor.com/products/smtp/manual.php
http://www.phpclasses.org/browse/package/2065.html
Таких классов много, можете поискать в интернете...
Удачи!
Ответ отправил: Яруллин Азат Рифкатович (статус: 8-ой класс)
Ответ отправлен: 24.08.2006, 00:16
Оценка за ответ: 5
Комментарий оценки:
спасибо за ответ. через mail было бы проще, но, наверное придется действительно через smtp

Отвечает: Cimus
Здравствуйте, Nexus!

Попробуйте отправлять письма через внешние сервера, такие как smtp.maul.ru,
для этого есть класс PHPmailer.
http://php.russofile.ru/ru/translate/mail/phpmailer/
Используя его, у меня вообще небыло проблем с почтой, да и сама отправка становиться значительно легче.
---------
Достичь можно любых высот !
Ответ отправил: Cimus (статус: 6-ой класс)
Ответ отправлен: 24.08.2006, 02:09
Оценка за ответ: 5
Комментарий оценки:
действительно неплохой класс, хотя если нужно отправить короткое письмо mail() был бы удобнее... если бы работал =


Вопрос № 53.082
Здравствуйте эксперты!
База данных MySQL содержит слова русского языка (~110000 записей)
почему при запросе
SELECT* FROM `dictionary` WHERE `word` ='гений' в результат попадает ещё одно слово "веник" ??

С чем это может быть связано?

Структура таблицы в приложении.

Приложение:

Отправлен: 24.08.2006, 03:44
Вопрос задал: Cimus (статус: 6-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Madproger
Здравствуйте, Cimus!
Потому что у тебя кодировка таблицы скорее всего latin1 а должна быть cp1251

Можешь попробовать сделать так
SELECT* FROM `dictionary` WHERE BINARY `word` ='гений';

Но лучше все таки создовай таблицы в нужной тебе кодировке
---------
И будет вам счАстиЕ!
Ответ отправил: Madproger (статус: 9-ый класс)
Ответ отправлен: 24.08.2006, 09:32
Оценка за ответ: 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.35 от 27.07.2006
Яндекс Rambler's Top100

В избранное