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

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

  Все выпуски  

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


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

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

Выпуск № 642
от 22.04.2007, 17:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 434, Экспертов: 74
В номере:Вопросов: 6, Ответов: 22


Вопрос № 82854: Здраствуйте уважаемые эксперты! Такая задача: есть строка ($s="|1||23||67|...") и есть таблица с потем number в котором может содержаться одно из данных чисел, мне требуется выбрать из таблицы только записи у которых numbe...
Вопрос № 82860: Имеется гостевая книга на php НО нет проверки для спам ботов!!! Тоесть чтобы нужно было ввести код защитный!!! Как реализовать это!?...
Вопрос № 82894: Здравтсвуйте, уважаемые эксперты! Мне нужно сделать, чтобы определенное число из поля БД MySQL уменьшалось каждые 4 дня на определенное кол-во процентов. Скажите, пожалуйста, как это реализовать? ведь, если к скрипту не обращаться, то он не выполняет...
Вопрос № 82947: Кто-нибудь наблюдал как поисковые системы обрабатывают сессии? По идее SID подшивается к адресу страницы. Если пользователь захочит перейти на сайт не получит ли он SID от поискового робора? И не получится ли куча пользователей с одним SID....
Вопрос № 82952: Здравствуйте. Прошу помощи. Первая часть кода (см. приложение) работает как надо, а вот вторая (при $action==5) выдаёт ошибку: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in z:home estodrom.ruwwwadmin...
Вопрос № 82972: Всем привет!!! В приложении код ответа на мой вопрос о том, как испрользовать переменные на следующую страницу. Но он не работает, переменная не определена. Врядли это ошибка эксперта, подскажите, что делать, чтоб было правильно через $_SERVER. И...

Вопрос № 82.854
Здраствуйте уважаемые эксперты!

Такая задача:

есть строка ($s="|1||23||67|...") и есть таблица с потем number в котором может содержаться одно из данных чисел, мне требуется выбрать из таблицы только записи у которых number содержиться в данной строке. Пробовал запрос на выбор делать так: WHERE $s LIKE `%|`.number.`|%`, но похоже у меня проблемы с синтаксисом. подскажите верный запрос.
Отправлен: 16.04.2007, 21:03
Вопрос задал: J D (статус: 6-ой класс)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Илья "DraK" Андреевич
Здравствуйте, J D!
MySQL работает только с текствыми запросами, тобишь передать массив ему нельзя.
правильный вариант в приложение

Приложение:

Ответ отправил: Илья "DraK" Андреевич (статус: Заблокирован)
Ответ отправлен: 16.04.2007, 21:14

Отвечает: HookEst
Здравствуйте, J D!
Если представить строку как список значений разделеных запятыми,
то можно использовать оператор: expr IN (value,...).
Может работать быстрее чем LIKE.

например:

<?php
$s="|1||23||67||110|";

$set=str_replace('|','',str_replace('||',',',$s));
//теперь $set=="1,23,67,110"

$query="SELECT * FROM `tbl` WHERE `number` IN($set)";
//SELECT * FROM `tbl` WHERE `number` IN(1,23,67,110)
//...
//...
?>
Успехов.
Ответ отправил: HookEst (статус: Студент)
Ответ отправлен: 17.04.2007, 04:51

Отвечает: PVS
Здравствуйте, J D!
Предполагаю что база в MySQL, если нет - ищите аналог функции concat:

$qry="select * from my_table where '".$s."' like concat('%|',number,'|%')";
Ответ отправил: PVS (статус: Специалист)
Ответ отправлен: 17.04.2007, 09:31

Отвечает: Fitcher
Здравствуйте, J D!
Вот запрос который вам нужен "SELECT `id` FROM `film` WHERE `id` IN (".$st.")"
но перед его употребление нужно произвести форматирование строки $st.
($st - это ваша строка с номерами.)Форматирование выглядит так :

$st="|1||23||67|";
$st=substr($st,1,strlen($st)-2);
$a=array();
$a=explode('||', $st);
$st='';
foreach($a as $v){ if ($v!=0) {$st.=$v.",";}}
$st=substr($st,0,strlen($st)-2);
Потом вставляем в запрос. Удачи...

Приложение:

---------
Будущее - это нечто, к чему каждый приближается со скоростью шестьдесят минут в час, желает он того или нет.

Ответ отправил: Fitcher (статус: 4-ый класс)
Ответ отправлен: 17.04.2007, 18:52

Отвечает: Шахгусейнов Азиз
Здравствуйте, J D!

проблемы есть......попробуйте как-нить по-другому сделать.....поменяйте структуру......
ну а если ничего не помогает то
Вам надо строку $s заменить в строке все || на запятые.......потомсделать запрос WHERE <asdf> IN ($s);

---------
Среди людей есть такие, которые говорят: "Мы уверовали в Бога и в Последний день". Однако они суть неверующие.
Ответ отправил: Шахгусейнов Азиз (статус: 4-ый класс)
Ответ отправлен: 18.04.2007, 10:20


Вопрос № 82.860
Имеется гостевая книга на php НО нет проверки для спам ботов!!! Тоесть чтобы нужно было ввести код защитный!!! Как реализовать это!?
Отправлен: 16.04.2007, 22:17
Вопрос задал: Макс Куликов (статус: 3-ий класс)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: chiefff
Здравствуйте, Макс Куликов!

Есть одно простое решение, правда не на ПХП, а JS, но работает - проверено:

language="JavaScript" type="text/javascript">
document.write("<in"+"p"+"ut typ"+"e="h"+"idden"+""
n"+"ame"+"="an"+"tis"+"p"+"am" val"+"ue="1">");
</script>

Имя переменной, естественно, лучше заменить.
Ответ отправил: chiefff (статус: 1-ый класс)
Ответ отправлен: 16.04.2007, 22:38
Оценка за ответ: 5
Комментарий оценки:
Спасибо тоже не плохой вариант!

Отвечает: MYPABEU
Здравствуйте, Макс Куликов!
Воспользуйтесь таким средством, как CAPTCHA.
Почитать про это можно тут: http://www.captcha.ru
Работа каптчи происходит следующим образом:
1) создается сценарий, в нем начинается сессия и потом уже выводиться хтмл-код
2) создается файл, который тоже создает сессию и генерирует картинку, внося в сессию результат картинки
3) после подтверждения ввода с формы мы проверяем введенные данные с данными, записанными в переменную сессии, и, еси все верно проводим дальнейшие действия...

Я приведу пример простейшей каптчи:

Приложение:

Ответ отправил: MYPABEU (статус: 1-ый класс)
Ответ отправлен: 17.04.2007, 00:18
Оценка за ответ: 5
Комментарий оценки:
Спасибо за совет. Буду читать!!! Слышал правда о капче очень много, но на деле не шарю ваще))) сэнкс пошел разбираться!

Отвечает: Angel7
Здравствуйте, Макс Куликов!

Вот мой скрипт защиты от спамеров: http://svoysite.ifolder.ru/1091631. Снабжен комментами, так что если Вы хотя бы средне разбираетесь в пхп - должны встроить его в свою гостевую!

Удачи!
---------
Краткость приятна, когда она сочетается с ясностью!
Ответ отправила: Angel7 (статус: Практикант)
Ответ отправлен: 17.04.2007, 09:00
Оценка за ответ: 5
Комментарий оценки:
Спасибо. Буду разбираться!!!

Отвечает: Шахгусейнов Азиз
Здравствуйте, Макс Куликов!
эта штуке называется Captcha.......создаете с помощью РНР картинку с надписью....с любой автоматически генерируемой надписью............пишете ее в сессию......делаете поле проверки.............а в том месте где надо посылать данные проверяете равны ли эти данные........
---------
Среди людей есть такие, которые говорят: "Мы уверовали в Бога и в Последний день". Однако они суть неверующие.
Ответ отправил: Шахгусейнов Азиз (статус: 4-ый класс)
Ответ отправлен: 18.04.2007, 10:23
Оценка за ответ: 5
Комментарий оценки:
Спасибо за ответ, я уже понял!

Отвечает: Fitcher
Здравствуйте, Макс Куликов!
Вот здесь есть анти спам и описание к нему:
http://www.infonew.ru/bottrap.php
---------
Будущее - это нечто, к чему каждый приближается со скоростью шестьдесят минут в час, желает он того или нет.
Ответ отправил: Fitcher (статус: 4-ый класс)
Ответ отправлен: 19.04.2007, 07:16
Оценка за ответ: 1
Комментарий оценки:
Я прошу подсказать насчет защитного кода, а вы мне суёте антиспам, который будет учитывать ботов на сайте!!! Эта штука у меня стоит, и описание там не точное!!! И править скрипт надо чтоб работал!!!


Вопрос № 82.894
Здравтсвуйте, уважаемые эксперты! Мне нужно сделать, чтобы определенное число из поля БД MySQL уменьшалось каждые 4 дня на определенное кол-во процентов. Скажите, пожалуйста, как это реализовать? ведь, если к скрипту не обращаться, то он не выполняется на сервере. А нужно, чтобы он выполнялся с нужной периодичностью, независимо от обращений. Заранее благодарен!
Отправлен: 17.04.2007, 06:36
Вопрос задал: Андрющенко Вячеслав Васильевич (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Yadovit
Здравствуйте, Вячеслав!
Вам нужно воспользоватся планировщиком задач. К примеру используйте KRONCron.
Ответ отправил: Yadovit (статус: 5-ый класс)
Ответ отправлен: 17.04.2007, 07:24
Оценка за ответ: 3

Отвечает: PVS
Здравствуйте, Андрющенко Вячеслав Васильевич!
cron стоит использовать только в тех случаях, когда надо сделать что-то , что действительно зависит от определённого момента времени (например очистка диска от кешированых файлов). В Вашем же случае намного проще вычислить сколько раз ДОЛЖНО бы было произойти уменьшений значения, на сколько дожно было уменьшится это поле и уменьшить его за одним разом на нужное значение.
Ответ отправил: PVS (статус: Специалист)
Ответ отправлен: 17.04.2007, 10:05
Оценка за ответ: 5
Комментарий оценки:
согласен. Это действительно более подходящий вариант.


Вопрос № 82.947
Кто-нибудь наблюдал как поисковые системы обрабатывают сессии?

По идее SID подшивается к адресу страницы. Если пользователь захочит перейти на сайт не получит ли он SID от поискового робора? И не получится ли куча пользователей с одним SID.
Отправлен: 17.04.2007, 13:31
Вопрос задал: NiGHT (статус: Практикант)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Boompro
Здравствуйте, NiGHT!

Это не возможно для каждого человека свой SID к тому же уже давно он к адресу(если имеется URL) не подшивается.
Ответ отправил: Boompro (статус: 3-ий класс)
Ответ отправлен: 17.04.2007, 13:43

Отвечает: chiefff
Здравствуйте, NiGHT!

Вообще, сессии создают кучу проблем при индексации, например, Яндексом. Это приводит к появлению в базе поисковика множества дублей страниц (с разными SID в конце адреса). Поэтому от SID лучше избавляться. Или обходиться вообще без сессий, или закрывать такие страницы от индексации.
Ответ отправил: chiefff (статус: 1-ый класс)
Ответ отправлен: 17.04.2007, 15:46

Отвечает: Fitcher
Здравствуйте, NiGHT!
SID на машине у пользователя. Если пользователь захочит перейти на сайт от поискового робора то он получит уникальный SID.И не получится ли куча пользователей с одним SID.
---------
Будущее - это нечто, к чему каждый приближается со скоростью шестьдесят минут в час, желает он того или нет.
Ответ отправил: Fitcher (статус: 4-ый класс)
Ответ отправлен: 19.04.2007, 06:35


Вопрос № 82.952
Здравствуйте. Прошу помощи.
Первая часть кода (см. приложение) работает как надо, а вот вторая (при $action==5) выдаёт ошибку:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in z:home estodrom.ruwwwadminka.php on line 93
Строка 93: if (mysql_num_rows($r)==0) {$r=mysql_query("INSERT INTO Groups (ID, Group) VALUES ('', $AddG)");}

Не пойму в чём дело, ведь код по сути один и тот же.
В чём может быть проблема?

Приложение:

Отправлен: 17.04.2007, 13:49
Вопрос задал: Raden (статус: 1-ый класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Boompro
Здравствуйте, Raden!
попробуй так
SELECT * FROM `Groups` where `Group`=`$AddG`

Т.е. замени кавычки прямые на боковые.
Ответ отправил: Boompro (статус: 3-ий класс)
Ответ отправлен: 17.04.2007, 14:11
Оценка за ответ: 5
Комментарий оценки:
Спасибо, всё работает.

Отвечает: HookEst
Здравствуйте, Raden!
Group - это зарезервированное слово в MySQL(и не только)
если используете его в запросе как имя поля, заключайте в "`"(обратные кавычки):

if(isset($AddG))
{
$r=mysql_query("SELECT * FROM `Groups` where `Group`='$AddG'");
if (mysql_num_rows($r)==0) {$r=mysql_query("INSERT INTO `Groups` (`ID`, `Group`) VALUES ('','$AddG')");}
}
}

вообще-то желательно так обрамлять все имена таблиц и полей.

Успехов
Ответ отправил: HookEst (статус: Студент)
Ответ отправлен: 17.04.2007, 14:13
Оценка за ответ: 5
Комментарий оценки:
Спасибо за разъяснение на счёт Group. Всё понял, постараюсь исправиться :)

Отвечает: Fitcher
Здравствуйте, Raden!
В запросе вы неправильно используете переменную $AddG.
Вот как должны выглядеть ваши запросы:
"INSERT INTO Groups (ID, Group) VALUES ('', '".$AddG."')"
"SELECT * FROM Groups where Group='".$AddG."'"
Удачи...

Приложение:

---------
Будущее - это нечто, к чему каждый приближается со скоростью шестьдесят минут в час, желает он того или нет.

Ответ отправил: Fitcher (статус: 4-ый класс)
Ответ отправлен: 17.04.2007, 16:54
Оценка за ответ: 3
Комментарий оценки:
Переменную использовал правильно, хотя ваши комментарии и верны, но в данном случае проблема заключалась не в этом. Однако спасибо за попытку.


Вопрос № 82.972
Всем привет!!!
В приложении код ответа на мой вопрос о том, как испрользовать переменные на следующую страницу. Но он не работает, переменная не определена. Врядли это ошибка эксперта, подскажите, что делать, чтоб было правильно через $_SERVER. Или как передать переменную через командную строку я использую кнопку с методом ПОСТ без сессий

Приложение:

Отправлен: 17.04.2007, 16:15
Вопрос задал: BigHard (статус: 9-ый класс)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: PVS
Здравствуйте, BigHard!
$_SERVER - обычный массив, просто его создаёт сам интерпретатор php. Больше ничем он не отличается и никакого специфического поведения при записи в него не происходит, тоесть Ваша переменная просто потеряется.
Ответ отправил: PVS (статус: Специалист)
Ответ отправлен: 17.04.2007, 16:25
Оценка за ответ: 3
Комментарий оценки:
Хоть бы какой-то способ решения проблемы подсказал (:

Отвечает: Zolton007
Здравствуйте, BigHard!
Хм. Вероятно тогда я не правильно понял вопрос. Или что-то в настройках php не так. Вот пример работы с сессиями:
------ index.php -----
<?
session_name("test");//имя сессии
@session_start();/*стартуем сессию. Это необходимо делать в каждом скрипте,
где надо использовать переменные сессии*/

$_SESSION["value"] = '1000000$'; //создаем переменную сессии
echo $_SESSION["value"];//проверяем ;)
?>

------ two.php -------
<?
session_name("test");
@session_start();

echo $_SESSION["value"];//проверям во втором скрипте ;)
?>

Это самый простой пример. По приведенным выше ссылкам имеется полная информация.
---------
Если твоя программа выполняет мистические действия, - значит ты сделал что-то невероятно тупое!
Ответ отправил: Zolton007 (статус: 10-ый класс)
Ответ отправлен: 17.04.2007, 21:00
Оценка за ответ: 5
Комментарий оценки:
Я разобрался с передачей параметров через командную строку, а сессии-мне кажется они тормозят. И кстати, без знака @ выходит куча ошибок,хотя сессия работает, написать не могу, но может так в минифорум напишете, что там может быть

Отвечает: MYPABEU
Здравствуйте, BigHard!
Этот человек не эксперт.
Переменные передавать из скрипта в скрипт можно только сессией или куками.

Приложение:

Ответ отправил: MYPABEU (статус: 1-ый класс)
Ответ отправлен: 17.04.2007, 21:32
Оценка за ответ: 5

Отвечает: Fitcher
Здравствуйте, BigHard!
Все правильно где присваиваешь переменную $_SERVER["value"] там все видит а на другой странице не видит для этого и создавали сессий. Используй кнопку с методом GET для передачи переменной через командную строку.
---------
Будущее - это нечто, к чему каждый приближается со скоростью шестьдесят минут в час, желает он того или нет.
Ответ отправил: Fitcher (статус: 4-ый класс)
Ответ отправлен: 19.04.2007, 06:48
Оценка за ответ: 3


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

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

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

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

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

В избранное