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

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

  Все выпуски  

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


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

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

Выпуск № 689
от 17.06.2007, 20:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 428, Экспертов: 61
В номере:Вопросов: 5, Ответов: 13


Вопрос № 91015: Здравствуйте! Сразу извенюсь за дублирование вопроса в двух рассылках, но вопрос настолько специфический что не знаю куда правильнее его запихнуть, толи в sql то ли в php!!! Вот решил я себе облегчить жизнь и написать(на php) класс для работы...
Вопрос № 91029: Уважаемые господа! Имеем: PHP 5.2.3 MySQL 4.1.18 Проблема: При вставке посредством PHP в поле типа "TEXT" базы данных сообщения на кириллице, происходит перекодировка этого сообщения (в что-то вроде: "Ïðè...
Вопрос № 91054: Здраствуйте уважаемые эксперты. Подскажите в чмё суть: В классе обьяляю методы __autoload() (см. прил). Затем в конструкторе вызывается статистическое свойство другого класса (см. 2) - интерпретор начинает ругаться: "Fatal error: Class 'sys...
Вопрос № 91069: Доброго дня эксперты! Методом тыка по примеру( т.к. рнр не знаю) сделал форму отправки на емейл через сайт. Все работает данные доходят, но после того как нажимаеш на сайте оправить открывается страница не та которую указал в рнр коде(index.shtml) а ...
Вопрос № 91099: Ребята не могу понять почему не работает вот это... // "Склеивание" блоков. // Если тело блока начинается с [name], то оно не просто // записывается в массив блоков, а "пристыковывается" к значению, // уже там...

Вопрос № 91.015
Здравствуйте!
Сразу извенюсь за дублирование вопроса в двух рассылках, но вопрос настолько специфический что не знаю куда правильнее его запихнуть, толи в sql то ли в php!!!
Вот решил я себе облегчить жизнь и написать(на php) класс для работы с БД MySQL!
Почему? Да потому что:
1) постоянно работаю с MySQL
2) никуда переходить не собираюсь
3) специфические "заказы" делаю учитывая их специфику - их мало (практически нет)
4) PEAR класс для работы с БД меня функционально полностью устраивает, но скорость его работы оставляет желать лучшего, да и его совместимость с другими БД мне совершенно не нужна!
Так вот собственно к чему я веду:
В PEAR есть такая возможность(код во вложении): объявляешь(наследуешь) класс, задаешь полям их значения и выполняешь метод update(), после чего нужная строка в БД обновляется, а сам я такого не могу реализовать, нужна помощь...
Может есть спецефический подход на уровне классов к этому делу???

Приложение:

Отправлен: 11.06.2007, 23:59
Вопрос задал: Nooki (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Sea
Здравствуйте, Nooki!
Есть разные варианты решения.
Можно через рефлексию (Reflection), но проще будет так:
get_class_vars(get_class($this))
Этим вы получите массив "переменных" класса, который думаю уже не составит труда применить по назначению.
Единственное конечно возможно будет необходимо его отфильтровывать, но это уже касается конкретной реализации.
Ответ отправил: Sea (статус: 3-ий класс)
Ответ отправлен: 12.06.2007, 10:55


Вопрос № 91.029
Уважаемые господа!
Имеем:
PHP 5.2.3
MySQL 4.1.18
Проблема: При вставке посредством PHP в поле типа "TEXT" базы данных сообщения на кириллице, происходит перекодировка этого сообщения (в что-то вроде: "Ïðèâåò!". Кодировка базы - cp1251_bin.
Как правильно написать код, чтоб в базу приходило нормальное сообщение в кириллице.

Прилагожения:
Класс и метод для передачи сообщения в базу (1)
Форма для ввода данных пользователем (2)
Код обработки формы (3)

Благодарю за внимание.

Приложение:

Отправлен: 12.06.2007, 08:15
Вопрос задал: Rockedross (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: PVS
Здравствуйте, Rockedross!
после подключения к базе выполните
mysql_query("SET NAMES cp1251_bin");
Ответ отправил: PVS (статус: Специалист)
Ответ отправлен: 12.06.2007, 09:56

Отвечает: Sea
Здравствуйте, Rockedross!
Столько раз звучали подобные вопросы, что уже просто нет сил отвечать на них. Если вы поищете в архиве этой рассылки, то несомненно найдете массы утветов.
Но дам вам один конкретный совет:
Добейтесь того, что бы у вас кодировка, используемая для вывода HTML страниц, соответствовала кодировке базы данных. Тогда и не будет возникать подобных проблем.
Ну а лучше используйте UTF8 кодировку, это поможет и в будущем при переходе на php6.
Ответ отправил: Sea (статус: 3-ий класс)
Ответ отправлен: 12.06.2007, 10:55

Отвечает: Alex S.R.
Здравствуйте, Rockedross!

Скорее всго, проблема в том, что Вы соединяетесь с СУБД под учетной записью пользователя root. Создайте специальную учетную запись пользователя (назначив любые права, какие хотите), и соединяйтесь через нее.
Ответ отправил: Alex S.R. (статус: 1-ый класс)
Ответ отправлен: 12.06.2007, 14:42


Вопрос № 91.054
Здраствуйте уважаемые эксперты. Подскажите в чмё суть:
В классе обьяляю методы __autoload() (см. прил). Затем в конструкторе вызывается статистическое свойство другого класса (см. 2) - интерпретор начинает ругаться: "Fatal error: Class 'system' not found in ..." . Не знаю в чём причина. Все классы находятся в одной директории с расширением *.inc .Проверял регистр обьявления класса, файла и вызова... но.... облом

Приложение:

Отправлен: 12.06.2007, 11:42
Вопрос задал: Khalafov Rashad (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

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

А где лежит файл в из которого дергается класс (в который он инклудится и тп.)? Я конечно не уверен, но может быть у тебя сам скрипт, например, лежит в корне, а классы в папке, например, classes. Тогда ошибка и должна вылетать - нужно прописать include_path, пример в приложении.

Ну или может быть у тебя php младше 5го?...

Приложение:

Ответ отправил: Nexus (статус: 8-ой класс)
Ответ отправлен: 12.06.2007, 12:04

Отвечает: Шпилевский Евгений Васильевич
Здравствуйте, Khalafov Rashad!
Скорее всего, подгрузка inc файла происходит локально.... Если есть возможность, попробуйте вынести подгрузку вне функции..
Ответ отправил: Шпилевский Евгений Васильевич (статус: 1-ый класс)
Ответ отправлен: 12.06.2007, 12:24

Отвечает: Sea
Здравствуйте, Khalafov Rashad!
Эту функцию поместите вне класса.
function __autoload($load_class)
{
include_once ($load_class."inc");
}
и надо не ==, а =
class main
{
function __construct($var_title = SYSTEM::DEFAULT_TITLE)
{
кусок кода
}
}
Ответ отправил: Sea (статус: 3-ий класс)
Ответ отправлен: 12.06.2007, 13:31


Вопрос № 91.069
Доброго дня эксперты! Методом тыка по примеру( т.к. рнр не знаю) сделал форму отправки на емейл через сайт. Все работает данные доходят, но после того как нажимаеш на сайте оправить открывается страница не та которую указал в рнр коде(index.shtml) а страница с формой которая должна придти мне на емейл. Во вложении код, может кто подскажет где ошибка?
Спасибо?

Приложение:

Отправлен: 12.06.2007, 13:27
Вопрос задал: Loed (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Селев Валерий
Здравствуйте, Loed!

Для перенаправления пользователя на другую страницу замените

print " language='Javascript'>
<!--function reload() {location = "$backurl"}; setTimeout('reload()', 2000);
//--></script>
$allmsg <BR><BR>"

на

header ("Location: $backurl");

Это и проще, и будет работать даже если в браузере отключен джаваскрипт.
Ответ отправил: Селев Валерий (статус: 5-ый класс)
Ответ отправлен: 12.06.2007, 13:33
Оценка за ответ: 5
Комментарий оценки:
Предложенный вариант сработал

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

Так ты же сам его и выводишь: "...script>$allmsg <BR>...", в конце сразу после ф-ции reload...

И кстати, переадресацию проще сделать мета-тэгом, где вместо 1 - количество секунд перед переадресацией.
<meta http-equiv='Refresh' CONTENT='1; URL=".$backurl."'>

или, если тебе не нужно выводить сообщение типа "Ваше письмо отправлено", то перенаправлять через header('location: '.$backurl);
Ответ отправил: Nexus (статус: 8-ой класс)
Ответ отправлен: 12.06.2007, 13:38
Оценка за ответ: 5
Комментарий оценки:
Все заработало как надо

Отвечает: PVS
Здравствуйте, Loed!
Здесь Вы её и выводите (переменная $allmsg):

print " language='Javascript'>
< !--function reload() {location = "$backurl"}; setTimeout('reload()', 2000);
//-- >
$allmsg < BR >< BR >";

а вместо location =
вроде должно быть document.location =

Отредактировано: вставленные для примера теги были обработаны системой как теги, а не как текст. В теги вставлены пробелы.
---------
=Alexey G. Gladenyuk= (*Мастер-Эксперт)
Ответ отправил: PVS (статус: Специалист)
Ответ отправлен: 12.06.2007, 13:40

Отвечает: Sea
Здравствуйте, Loed!
Замените
print " language='Javascript'>
<!--function reload() {location = "$backurl"}; setTimeout('reload()', 2000);
//--></script>";

на

print '<META HTTP-EQUIV="Refresh" CONTENT="2000; URL=$backurl">';

это должно сработать, даже если Javascript будет отключен.

ну а ошибки вроде(могу ошибаться) в том, что надо location.href и "reload":
print ' language="Javascript">
function reload() {location.href = "'.$backurl.'"}; setTimeout("reload", 2000);
</script>
$allmsg <BR><BR>';
exit;

Ответ отправил: Sea (статус: 3-ий класс)
Ответ отправлен: 12.06.2007, 13:55

Отвечает: Lain
Здравствуйте, Loed!
Если у пользователя в ie безопасность стоит по максимуму то редиректы по средством яваскрипт и мета-тэгов работать не будут
Поэтому лучше header ("Location: $backurl");
А вообще имхо проще всего убрать все print'ы а после пхп скрипта (после ?>) добавить содержимое той страницы которую хотим отобразить.
Ответ отправил: Lain (статус: 2-ой класс)
Ответ отправлен: 12.06.2007, 15:03


Вопрос № 91.099
Ребята не могу понять почему не работает вот это...

// "Склеивание" блоков.
// Если тело блока начинается с [name], то оно не просто
// записывается в массив блоков, а "пристыковывается" к значению,
// уже там находящемуся, причем в качестве символа-соединителя
// выступает тело блока с именем name. Если строка name не задана
// (то есть указаны []), используется блок с именем DefaultGlue,
// а если этого блока нет, то соединитель по умолчанию — " | ".
function _FBlkGlue($name,&$cont,$url)
{ global $BLOCK;
if(ereg("^\\[([^]])*]",$cont,$P)) {
$c=substr($cont,strlen($P[0])); // тело блока после [name]
$n=$P[1]; // имя соединителя
// Есть с чем "склеивать"?
if(!empty($BLOCK[$name])) {
$glue=@$BLOCK[$n];
if(!Isset($glue)) $glue=@$BLOCK[BlkDefGlue];
if(!Isset($glue)) $glue=DefGlue;
$cont=$BLOCK[$name].$glue.$c;
}
// "Склеивать" нечего — просто присваиваем.
else $cont=$c;
}
}
_______________________________________________________

Видимо дело в этом (ereg("^\\[([^]])*]",$cont,$P))
понять что делает ereg в данном случае я не смог даже прочитав про него в мануале. Но я знаю что он должен делать: это искать в тексте такой блок [name], а вернее сказать искать вот эти скобки [] и смотреть указано ли между ними какоето значение но как это зделать я немогу никак понять.

извените это наверное нубский вопрос но всёравно спасибо!!!
Отправлен: 12.06.2007, 16:32
Вопрос задал: Trout (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Sea
Здравствуйте, Trout!
Не буду касаться не реализации, не самого кода, хотя они достаточно кривые. А поясню только ereg: ^\\[([^]])*]
^ - означает, что искомая комбинация должна находиться в начале слова
- спец. символ, который заставляет следующий за ним символ воспринимиться как есть и тогда \\ будет интерпритировано в \
[^]] - обозначает любой символ, кроме ]
* - обозначает количественную характеристику - 0 или более раз
Таким образом у вас ищутся не просто скобки, а \[name].
Но есть некоторые ошибки, приведу на мой взгляд более правильный вариант. А если \ не надо вам, то удалите \\(4 штуки, а не 5) из паттерна:
^\\[([^]]*)]
Основная ошибка в неправильной установке (): знак * должен попадать внутрь скобок.
Больше ничего сказать не могу, т.к. угадывать вид данных, которые будут обрабатываться просто нет желания.
Ответ отправил: Sea (статус: 3-ий класс)
Ответ отправлен: 13.06.2007, 11:09
Оценка за ответ: 4
Комментарий оценки:
спасибки


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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.52 от 02.05.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное