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

  Все выпуски  

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


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

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

Выпуск № 322
от 25.04.2006, 19:35

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


Вопрос № 40778: Эдравствуйте, эксперты! Не могли бы подсказать функцию(именно функцию) которая сравнивает две строки и просто возвращает true если они полностью совпадают, или false если нет...
Вопрос № 40799: Здравствуйте. Не могли бы вы мне подсказать, как сделать так, чтобы один человек мог заходить на определённую страницу, допустим, один раз в день? Спасибо!...
Вопрос № 40815: Установил на компе Apache2.0 пакет Php 4.4.2 изучаю ! Вопрос такой -> надо передать данные из html в php Создал форму, все как надо по всем законам и правилам, а данные в php не идут ! В чем проблема ? может я что-то не так делаю ? ...
Вопрос № 40820: Надо перебросить данные с html формы в php ! Все делаю по правилам но не получается !!! Установил Apache2.0 и пакет PHP 4.2.2 !!...
Вопрос № 40822: Господа, у меня к вам такой вопрос. Это конечно не чистый PHP, но всё же. Мне необходимо определить, включен ли Javascript у пользователя. На PHP это нереально. А мне нужно, что бы если включён - выводилась одна кнопка, а если нет - другая. Может кто...
Вопрос № 40850: Уважаемые эксперты, у меня такой вопрос: мне необходимо при нажатии на кнопку открыть в новом окне браузера html- файл, путь и имя файла нходятся в переменной $v_f. (К примеру, $v_f='h:13.html';) Как я делаю - см. в приложении. Так вот, у меня выдае...
Вопрос № 40878: Здравствуйте, ув. эксперты. Возможно не сюда, но.... Программирую, но в PHP не особо силен. SuSE Linux 10.0. Иже с ним Apahe 2.0 Handler, MySQl 4.1.13, PHP 4.4.0. Настройки по умолчанию. Ставлю обычную нюку 7.7. Не хочет работать. И ...

Вопрос № 40.778
Эдравствуйте, эксперты!
Не могли бы подсказать функцию(именно функцию) которая сравнивает две строки и просто возвращает true если они полностью совпадают, или false если нет
Отправлен: 19.04.2006, 21:54
Вопрос задал: Tossha (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Doctor013
Здравствуйте, Tossha!
Вот Вам функция:
function compare_str($str1,$str2){
if ($str1==$str2) return true;
else return false;
}
---------
Большинство ответов на вопросы в рассылках находиться через Яндекс за 1 мин.
Ответ отправил: Doctor013 (статус: Студент)
Ответ отправлен: 19.04.2006, 22:03
Оценка за ответ: 5

Отвечает: Samum
Здравствуйте, Tossha!

function mystrcmp($str1, $str2){
return $str1===$str2;
}

Пойдет?
---------
Если бы программистам за их ошибки отрывали части тела, то в конце концов им пришлось бы использовать голову!
Ответ отправил: Samum (статус: Специалист)
Ответ отправлен: 19.04.2006, 22:07

Отвечает: XMF
Здравствуйте, Tossha!
--
Хм...

function strcmp2($str1, $str2)
{
return $str1==$str2;
}
Ответ отправил: XMF (статус: 6-ой класс)
Ответ отправлен: 19.04.2006, 22:43
Оценка за ответ: 5

Отвечает: Андрей_26rus
Здравствуйте, Tossha!
существует такая функция strcmp(str1, str2)
Возвращает:
отрицательное число, если str1 меньше, чем str2
положительное число, если str1 больше, чем str2
0 если строки равны

Регистр учитывается
---------
- = Tertium non datur = -
Ответ отправил: Андрей_26rus (статус: 3-ий класс)
Ответ отправлен: 20.04.2006, 08:21

Отвечает: Константин
Здравствуйте, Tossha!
Это не C/C++, здесь можно просто сравнением
if ($string1 == $string2)
{
//действия если true
}

А можно не тратить время, ожидая ответов, а зайти на php.net и посмотреть.
Это как раз отуда:
--------------------------------------
strcmp
(PHP 3, PHP 4 , PHP 5)

strcmp -- Сравнение строк, безопасное для данных в двоичной форме
Описание
int strcmp ( string str1, string str2)
Возвращает положительное число если str1 меньше, чем str2; отрицательное число если str1 больше, чем str2, и 0 если строки равны.

Эта функция учитывает регистр символов

См. также описание функций ereg(), strcasecmp(), substr(), stristr(), strncasecmp(), strncmp() и strstr().
---------------------------------------------
strcasecmp
(PHP 3>= 3.0.2, PHP 4 , PHP 5)

strcasecmp -- Сравнение строк без учета регистра, безопасное для данных в двоичной форме
Описание
int strcasecmp ( string str1, string str2)
Возвращает положительное число если str1 меньше, чем str2; отрицательное число если str1 больше, чем str2, и 0 если строки равны.

Пример 1. Пример использования strcasecmp()

<?php
$var1 = "Hello";
$var2 = "hello";
if (strcasecmp($var1, $var2) == 0) {
echo '$var1 равно $var2 при сравнении без учета регистра';
}
?>
----------------------------------------------------
Ответ отправил: Константин (статус: 3-ий класс)
Ответ отправлен: 20.04.2006, 13:16


Вопрос № 40.799
Здравствуйте.
Не могли бы вы мне подсказать, как сделать так, чтобы один человек мог заходить на определённую страницу, допустим, один раз в день?
Спасибо!
Отправлен: 20.04.2006, 03:02
Вопрос задал: Tossha (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Straight
Здравствуйте, Tossha!
При заходе на страницу в первый раз пишите посетителю в куки какой-нибудь флаг, означающий, что он тут уже был. Время жизни куки поставьте да завтрашнего дня.
(Смотрите документацию к функции setcookie).

При посещении проверяйте - если эта кука установлена, то не пущать.
Ответ отправил: Straight (статус: Студент)
Ответ отправлен: 20.04.2006, 10:14

Отвечает: Устинов Сергей Евгеньевич
Здравствуйте, Tossha!

Если это страница только для зарегистрированных пользователей, то сохранять (например в базу данных) дату последнего посещения. При каждом открытии данной страницы проверять, если дата не сегодняшняя, то пустить, и изменить дату последнего сообщения, иначе вывести страницу ошибки, или перенаправить на другую.

Если же на страницу любой пользователь должен заходить не более одного раза, то можно (по совету предыдущего эксперта) сохранять ему в cookies данные и ставить время жизни cookies один день, но только есть проблема - cookies могут быть отключены.

Можно записать ip-адрес пользователя в базу и записать дату его посещения, но также не без проблем - у пользователь может поменять ip.
Также с того-же ip-адреса могут выходить разные люди.
---------
Ответы на все вопросы - на сайте www.ya.ru :)
Ответ отправил: Устинов Сергей Евгеньевич (статус: 4-ый класс)
Ответ отправлен: 20.04.2006, 13:11

Отвечает: Константин
Здравствуйте, Tossha!
Для начала, надо определить, как мы будем отмечать пользователя, который уже зашел. Можно двумя способами:
- cookie
- запоминать IP
Первый не работает, если у юзера отключены куки.
Второй работает с ошибками, если народ выходит в сеть через прокси и IP у всех будет одинаковый.

Cookie ставится так:
(из мануала по PHP)
------
setcookie
(PHP 3, PHP 4 , PHP 5)

setcookie -- Send a cookie
Description
bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, int secure]]]]])
----------------------
Установка cookie:
<?php
$value = 'something from somewhere';

setcookie("TestCookie", $value);
setcookie("TestCookie", $value, time()+3600); /* expire in 1 hour */
setcookie("TestCookie", $value, time()+3600, "/~rasmus/", ".example.com", 1);
?>
-----------------------
считываение cookie:
<?php
// Print an individual cookie
echo $_COOKIE["TestCookie"];
echo $HTTP_COOKIE_VARS["TestCookie"];

// Another way to debug/test is to view all cookies
print_r($_COOKIE);
?>

т.е. на страничке ты проверяешь:
if ($_COOKIE['visited'] != 1)
{
//показываем страницу
//и устанавливаем cookie
setcookie('visited', 1, time()+3600*24);
}
-------------------------------------------
-------------------------------------------
С помощью IP.
Узнать можно с помощью $_SERVER['REMOTE_ADDR']
Как только узнали, записываем в файл либо в БД.
При загрузке страницы соответственно делаем либо запрос к БД либо обращение к файлу.
К файлу можно так:
$file = file_get_contents('filename', 'r+');
if (stristr($file, $_SERVER['REMOTE_ADDR']))
{
//показываем страницу и дописываем в файл IP посетителя
}
Имя файла можно формировать как сегодняшнюю дату. Для этого смотри функцию date()
Ответ отправил: Константин (статус: 3-ий класс)
Ответ отправлен: 20.04.2006, 13:26
Оценка за ответ: 5


Вопрос № 40.815
Установил на компе Apache2.0 пакет Php 4.4.2 изучаю ! Вопрос такой -> надо передать данные из html в php Создал форму, все как надо по всем законам и правилам, а данные в php не идут ! В чем проблема ? может я что-то не так делаю ?
Отправлен: 20.04.2006, 09:41
Вопрос задал: Жилкин Сергей Анатольевич (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей
Здравствуйте, Жилкин Сергей Анатольевич!
Проверьте тип передачи данных из формы - он должен быть либо POST, либо GET; или вы неправильно пытаетесь прочитать данные в PHP. А вообще, тут телепатов нет и без кода самой формы разговор неуместен.
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI: Всё для программиста.
ICQ: 286837644
----
Ответ отправлен: 20.04.2006, 09:46

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

Я могу сделать предположение. Возможно, Вы дейстивительно сделали форму по правилам и написали относительно правильный скрипт. Только данные, приходящие постом, Вы берете не из массива $_POST, а прямо из глобальных переменных. Раз Вы настраивали все самостоятельно, то могу предположить, что php.ini Вы взяли на основе php.ini-recommended (раз рекомендуют - значит так и надо). А в нем по умолчанию есть настройка "register_globals Off", которая как раз и запрещает автоматическое преобразование POST и GET данных в глобальные переменные. Результат - скрипт не получает данных.

Если мое предположение верно, то либо поставьте "register_globals on", либо берите данные из массива $_POST. Второе - лучше, ибо взломоустойчивее.

Ответ отправил: Straight (статус: Студент)
Ответ отправлен: 20.04.2006, 09:54

Отвечает: Андрей_26rus
Здравствуйте, Жилкин Сергей Анатольевич!
преверьте
1) в форме в action='указать файл обработчик формы.php'
2) в зависимости от метода передачи POST или GET
используйте массивы $_POST или $_GET соответственно

например в файле form.html (будем использовать метод POST, с методом GET аналогично)
форма имеет вид

<form action="obrabotka.php" method="post">
<input type="text" name="slovo" maxlength=30>
<input type="Radio" name="tip" value="1" checked>1
<input type="Radio" name="tip" value="2">2
</form>

тогда в файле обработчике (в данном случае obrabotka.php) пишем

Приложение:

---------
- = Tertium non datur = -

Ответ отправил: Андрей_26rus (статус: 3-ий класс)
Ответ отправлен: 20.04.2006, 10:13
Оценка за ответ: 5
Комментарий оценки:
Спасибо !!! Приятно получить совет профи !! Все работает !


Вопрос № 40.820
Надо перебросить данные с html формы в php ! Все делаю по правилам но не получается !!! Установил Apache2.0 и пакет PHP 4.2.2 !!

Приложение:

Отправлен: 20.04.2006, 10:03
Вопрос задал: Жилкин Сергей Анатольевич (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей
Здравствуйте, Жилкин Сергей Анатольевич!
Как это? <input type="text" name="name"> - а потом <? print $nam; ?> Имя поля ввода и имя выводимой переменной не совпадают - вот вам и ошибка.
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI: Всё для программиста.
ICQ: 286837644
----
Ответ отправлен: 20.04.2006, 10:08
Оценка за ответ: 5
Комментарий оценки:
Да !! Моя ошибка !! Но я исправился !! track_vars = On register_globals = Off и все заработало !!! Спасибо !!
P.S: только у меня через $HTTP_POST_VARS[] сработало, а иначе ошибка !!! Ещё раз спасибо !!

Отвечает: Straight
Здравствуйте, Жилкин Сергей Анатольевич!
Вы передаете name, а принимаете nam. Разумеется ничего не получится. Вместо $nam напишите $_POST['name']
Ответ отправил: Straight (статус: Студент)
Ответ отправлен: 20.04.2006, 10:17

Отвечает: Андрей_26rus
Здравствуйте, Жилкин Сергей Анатольевич!
согласно html в php файле будем иметь:

<html>
<Head><title>Test PAGE2</title></Head>
<body>
<? print $_POST['name']; ?>
</body>
</html>
---------
- = Tertium non datur = -
Ответ отправил: Андрей_26rus (статус: 3-ий класс)
Ответ отправлен: 20.04.2006, 10:23
Оценка за ответ: 5
Комментарий оценки:
Все работает как надо ! Спасибо !


Вопрос № 40.822
Господа, у меня к вам такой вопрос. Это конечно не чистый PHP, но всё же. Мне необходимо определить, включен ли Javascript у пользователя. На PHP это нереально. А мне нужно, что бы если включён - выводилась одна кнопка, а если нет - другая. Может кто подскажет как такое можно реализовать?
Отправлен: 20.04.2006, 10:31
Вопрос задал: Драк Георгий (статус: 2-ой класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Straight
Здравствуйте, Драк Георгий!
А почему бы и не реализовать это на самом JavaScript?

Приложение:

Ответ отправил: Straight (статус: Студент)
Ответ отправлен: 20.04.2006, 10:39

Отвечает: Ерёмин Андрей
Здравствуйте, Драк Георгий!
Конечно, PHP здесь не при чём. Здесь и нужно использовать JavaScript, который обманет сам себя. По умолчанию сделайте видимой кнопку, для которой JS выключен (button1), а button2 сделайте скрытой (style=""visibility:hidden")." Затем сразу после кода второй кнопки напишите примерно такой JS-код:
document.getElementById("button2").style=""visibility:" ';'";
document.getElementById("button1").style=""visibility:" hidden";
В названии свойства visibility мог ошибиться, но по-моему оно звучит именно так... Всё, теперь алгоритм обманет сам себя. Если JS выключен, то код, естественно, не выполнится, и останется только button1, а если он включён, то всё поменяется :-)
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI: Всё для программиста.
ICQ: 286837644
----
Ответ отправлен: 20.04.2006, 16:11
Оценка за ответ: 5
Комментарий оценки:
Да спасибо. Это вариант. Единственный минус - это придётся делать для каждого элемента... Жаль бразуер не посылает в запросе эту инфу. Всё было-бы проще.


Вопрос № 40.850
Уважаемые эксперты, у меня такой вопрос: мне необходимо при нажатии на кнопку открыть в новом окне браузера html-файл, путь и имя файла нходятся в переменной $v_f. (К примеру, $v_f='h:13.html';) Как я делаю - см. в приложении. Так вот, у меня выдается ошибка, типа "h не является зарегистрированным протоколом". Т. е. логический диск воспринимает как протокол. Как или через функцию PHP открыть html-файл или через яву, может добавить что-то к переменной, чтоб url определялся нормально?!

Приложение:

Отправлен: 20.04.2006, 13:52
Вопрос задал: Bullet-Proof (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Straight
Здравствуйте, Bullet-Proof!
Разумеется. В ссылке нужно указывать протокол.
$v_f='file:///h:/1/3.html';
Ответ отправил: Straight (статус: Студент)
Ответ отправлен: 20.04.2006, 14:00

Отвечает: Андрей_26rus
Здравствуйте, Bullet-Proof!

путь нужно указывать или http://.... или относительно корневого каталога DocumentRoot:
например http:\mydomen.ru13.html
или 13.html
---------
- = Tertium non datur = -
Ответ отправил: Андрей_26rus (статус: 3-ий класс)
Ответ отправлен: 20.04.2006, 14:23


Вопрос № 40.878
Здравствуйте, ув. эксперты.
Возможно не сюда, но.... Программирую, но в PHP не особо силен.
SuSE Linux 10.0. Иже с ним Apahe 2.0 Handler, MySQl 4.1.13, PHP 4.4.0. Настройки по умолчанию.

Ставлю обычную нюку 7.7. Не хочет работать. И ошибок никаких не пишет. Апач доступ дает, т.к. в логах это видно (см. приложение). Мускул может быть и не дает, наверняка не знаю. Но в логах чисто. Методом расставления контрольных точек по ходу работы скрипта вычислил, что не отрабатывает строка в файле db/db.php

$db = new sql_db($dbhost, $dbuname, $dbpass, $dbname, false);

Он там немного выше определяет тип базы данных, и потом инкладит соотв. файл. Так вот, когда я в файле mysql.php стал ставить контрольные точки, выяснил, что он даже не входит туда. В итоге, он не может создать объект базы данных. Данные базы все корректные, перепроверил несколько раз. Да он бы и ошибку дал, если что. Права и пользователей тоже перепроверил. На файлы - 0666, на папки 0777.

Пробовал даже права 0777 на все применить, а к базе достучаться под рутом, файрвол рубил - те же яйца, только в профиль.

Подскажите, куда копать, а то уже всю голову обломал. Два дня убил на нее (нюку). На ASP Linux 9.0 стала без проблем.

Спасибо.

Приложение:

Отправлен: 20.04.2006, 18:07
Вопрос задал: Грибенников Александр Сергеевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Madproger
Здравствуйте, Грибенников Александр Сергеевич!

Попробуйте в файле config.php поставить $display_errors = false;

Если ошибки в коде или в поиске подключаемого файла - он там вам напишет
---------
И будет вам счАстиЕ!
Ответ отправил: Madproger (статус: 3-ий класс)
Ответ отправлен: 20.04.2006, 21:12


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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.30 от 09.04.2006
Яндекс Rambler's Top100

В избранное