Forum Webscript.Ru

Программирование => PHP => Тема начата: vladimir2004 от 08 Апреля 2004, 12:27:18

Название: передача параметра в php скрипт
Отправлено: vladimir2004 от 08 Апреля 2004, 12:27:18
У меня стоит php4 и IIS 5. Есть к примеру файл index.php, а в нем к примеру такой текст:

echo "$param
";
?>

Из адресной строки бровзера я вызываю скрипт таким образом: index.php?param=1 или index.php?param=4 или index.php?param=test
и в ответ выводится ВСЕГДА пустая строка, параметры не передаются, в чем грабли? Настройки php или IIS или еще где? Помогите плизззззз.
Название: передача параметра в php скрипт
Отправлено: ThE0ReTiC от 08 Апреля 2004, 12:29:30
vladimir2004
register_globals=Off
Название: передача параметра в php скрипт
Отправлено: vladimir2004 от 08 Апреля 2004, 12:37:52
так в php.ini и стоит:

; You should do your best to write your scripts so that they do not require
; register_globals to be on;  Using form variables as globals can easily lead
; to possible security problems, if the code is not very well thought of.
register_globals = Off

какие будут еще предложения?
Название: передача параметра в php скрипт
Отправлено: AliMamed от 08 Апреля 2004, 12:47:41
vladimir2004, теоретик именно это и имел в виду

http://faq.phpclub.ru/register_globals
Название: передача параметра в php скрипт
Отправлено: Меняздесьдавнонет от 08 Апреля 2004, 13:01:15
AliMamed , ты, кстати, согласен с куском про причины и безопасность?
Название: передача параметра в php скрипт
Отправлено: AliMamed от 08 Апреля 2004, 13:15:56
Этим?
Цитировать
Разработчики PHP настоятельно рекомендуют выключать register_globals (такой режим даже введен по умолчанию во всех новых версиях) и пользоваться данными, полученными от пользователя, только обращаясь к соответствуюим массивам.
Это сделано потому, что при register_globals = on легко взломать небрежно написаный скрипт.
К примеру, функция авторизации выставляет переменную $admin=1, а если авторизации не было, то не делает ничего. В таком скрипте при register_globals=on очень легко стать админом, просто обратившись к нему script.php?admin=1
Огоромное количество сайтов было взломано таким образом.

конечно
Название: передача параметра в php скрипт
Отправлено: vladimir2004 от 08 Апреля 2004, 13:21:38
Спасибо, все заработало,  а теперь еще такой вопрос:

Есто index.htm и index.php, в index.htm есть форма


 




как передать в index.php в переменную param2 значение поля text (с именем n) по нажатию кнопки? если action="index.php?param2=n", то передается n, а не значения этогого бокса.
Название: передача параметра в php скрипт
Отправлено: Меняздесьдавнонет от 08 Апреля 2004, 13:23:27
не, ниже.
про то, что это нужно не само по себе, что сам регистер глобалс - пофигу, он или офф.
а нужен он исключительно, как побудительный мотив к тому, что надо обязательно объявлять каждую переменную перед использованием.

Довольно непривычное утверждение, но я пришел именно к этому выводу
Название: передача параметра в php скрипт
Отправлено: Меняздесьдавнонет от 08 Апреля 2004, 13:28:05
vladimir2004

param2" size="20">




И НИКАКИХ извращений.
Проще надо быть.
Название: передача параметра в php скрипт
Отправлено: AliMamed от 08 Апреля 2004, 13:40:21
я согласен с тем что в подавляющем большинстве случаев переменные надо заявлять. да более того, я после того разговора специально полазил по своим файликам и обнаружил, что у меня это видимо автоматически происходит на подсознательном уровне=) но с тем что в РНР нужно заявлять все переменные я не готов согласиться, ибо разные ситуации бывают.
естественно ничего плохого не будет от заявления переменных, которые из вне подставить невозможно. но это ж не влияет на безопасность.

вот если ты имеешь в виду
Цитировать
Именно объявление ВСЕХ переменных, используемых в скрипте и являетс гарантией от взлома.
вот этот кусок. то если честно меня такие обобщения мягко говоря смущают. не люблю я глобальные обобщения. =)
Название: передача параметра в php скрипт
Отправлено: ThE0ReTiC от 08 Апреля 2004, 16:19:33
Цитировать
AliMamed:
видимо автоматически происходит на подсознательном уровне

Это у тебя из ИБМовской разновидности Васика +)
Название: передача параметра в php скрипт
Отправлено: AliMamed от 08 Апреля 2004, 20:12:09
Цитировать
ThE0ReTiC:
Это у тебя из ИБМовской разновидности Васика +)

может быть=)
Название: передача параметра в php скрипт
Отправлено: vladimir2004 от 09 Апреля 2004, 15:22:25
Все заработало, спасибо.

Есть теперь такой вопрос:
есть переменная $num, она получает знаение поля из MySQL таблицы, но там идет текст, а потом пробелы (поле типа char). Вопрос: как удалить из значения переменной пробелы в конце после текста???
Название: передача параметра в php скрипт
Отправлено: Mog. от 09 Апреля 2004, 15:26:43
$num=rtrim($num);
Название: передача параметра в php скрипт
Отправлено: vladimir2004 от 09 Апреля 2004, 15:50:51
$name - передается из формы на html странице

кусок скрипта на php:

echo "name to search -$name-

";
$all=mysql_query("select count(*) from phones");
$i=0;
do
{
$result = mysql_query("SELECT name FROM phones");
$num = mysql_result($result, $i);
echo "Pro4tenaya-$num-, Peredanaya-$name-

";
$num=trim($num);
$name=trim($name);
if (ereg($name,$num));
{
идет вывод записи
}
$i=$i+1;
}
while ($i<$all);
выводит прочтенную и переданную одинаковые (хотя это не факт, т.к. в html не видно пробелов), и все равно ни раза не заходит в цикл, ели переменные равны, хотя вводится на 100% существующее имя в базе. В чем грабли?
Название: передача параметра в php скрипт
Отправлено: ThE0ReTiC от 09 Апреля 2004, 15:56:06
матерь божья
быстро читать доки
сделать
"SELECT name FROM phones WHERE name LIKE \'%".$name."%\'"
и выбрать все что нужно одним запросом никак совсем?
Название: передача параметра в php скрипт
Отправлено: vladimir2004 от 09 Апреля 2004, 15:57:14
привел скрипт с ошибкой:
if (ereg($name,$num)) НЕТ ДВОЕТОЧИЯ
{
идет вывод записи
}


и в цикл не заходит
Название: передача параметра в php скрипт
Отправлено: ThE0ReTiC от 09 Апреля 2004, 15:57:36
Цитировать
vladimir2004:
ereg

eregi
Название: передача параметра в php скрипт
Отправлено: ThE0ReTiC от 09 Апреля 2004, 15:59:10
Цитировать
vladimir2004:
$all=mysql_query("select count(*) from phones");

ты вообще в курсе что возвращает mysql_query ?
а если я напишу
$all = mysql_query("SELECT 1+1");
она мне по-твоему 2 вернет?
Название: передача параметра в php скрипт
Отправлено: vladimir2004 от 09 Апреля 2004, 17:00:23
$all=mysql_query("select count(*) from phones");
Вохзвращает количество ВСЕХ записей в таблице
Название: передача параметра в php скрипт
Отправлено: ThE0ReTiC от 09 Апреля 2004, 17:10:41
Цитировать
vladimir2004:
Вохзвращает количество ВСЕХ записей в таблице

да ну
[p]mysql_query[/p]
разработчики PHP конечно не правы
Название: передача параметра в php скрипт
Отправлено: Макс от 09 Апреля 2004, 17:13:12
vladimir2004
запрос
select count(*) from phones
возвращает кол-во записей в таблице, НО не функция mysql_query().

Функция возвращает "ресурс" (resource - не знаю как корректно перевести его на русский) на результат запроса. С помощью этого resource можно узнать, что вернул запрос.
Для этого нужно использовать функции, типа mysql_fetch_*()
Название: передача параметра в php скрипт
Отправлено: ThE0ReTiC от 09 Апреля 2004, 17:17:36
Макс
там вообще не нужен этот запрос!
там вообще все выбирается ОДНИМ запросом а не этим диковато-придурковатым дерганьем базы в цикле с последующим использования строковых функций.
написан полный бред
Название: передача параметра в php скрипт
Отправлено: Макс от 09 Апреля 2004, 17:26:50
ThE0ReTiC
я ему пытался объяснить разницу между тем, что возврщает запрос и что возвращает функция, выполняющая этот запрос. Так как он эту разницу не понимает.
А насчет его кода - ничего страшного, я видел и хуже :)
Название: передача параметра в php скрипт
Отправлено: vladimir2004 от 09 Апреля 2004, 17:27:33
хороше, ЗНАТОКИ, привидите пожалуйста тогда пример кода, который ищет в базе (поля phone(int), name(varchar), surname(varchar), wplase(varchar)) все записи, где поле name (имя) равно переменной $name и вывоид их на экра, буду очень признателен, я ведь не асс п ПХП еще:(
Название: передача параметра в php скрипт
Отправлено: ThE0ReTiC от 09 Апреля 2004, 17:31:26

"SELECT * FROM phones WHERE name= \'".$name."\'"

с просьбами по изготовлению скриптов - в отдельный форум
Название: передача параметра в php скрипт
Отправлено: ThE0ReTiC от 09 Апреля 2004, 17:32:50
vladimir2004
[p]mysql_fetch_array[/p]
[p]mysql_fetch_assoc[/p]
[p]while[/p]
[p]print[/p]
Название: передача параметра в php скрипт
Отправлено: hanslinger от 09 Апреля 2004, 17:35:50
A print зачем сюда? :)
Название: передача параметра в php скрипт
Отправлено: ThE0ReTiC от 09 Апреля 2004, 17:37:52
hanslinger
Цитировать
vladimir2004:
вывоид их на экра

тока не надо говорить что использовать лучше - есть 150 способов вывести инфу. Это как раз не принципиальный момент
Название: передача параметра в php скрипт
Отправлено: vladimir2004 от 09 Апреля 2004, 18:11:53
Господа, тут ГРАБЛИ в чем-то другом. Вот код:

$result = mysql_query("SELECT phone, surname FROM phones WHERE name=$name");
                         
while ($row = mysql_fetch_array($result, MYSQL_NUM))
{
       echo "YES
";
       printf ("Phone: %s  Surname: %s", $row[0], $row[1]);
   }

   mysql_free_result($result);
};

Он не работает, в смысле не делает выборку WHERE name=$name, если просто пишу:

$result = mysql_query("SELECT phone, surname FROM phones");
                         
while ($row = mysql_fetch_array($result, MYSQL_NUM))
{
       echo "YES
";
       printf ("Phone: %s  Surname: %s", $row[0], $row[1]);
   }

   mysql_free_result($result);
};

все пашет, но как только добавляю WHERE name=$name, все, стоп машина, хотя имя, вводимое в html странице в базе существует. Что вы скажите на это?
Название: передача параметра в php скрипт
Отправлено: vladimir2004 от 09 Апреля 2004, 18:14:08
Вы развели полемику по поводу ОПТИМИЗАЦИИ кода, хотя проблемма как была в сравнении пременных так и осталась:(
Название: передача параметра в php скрипт
Отправлено: ThE0ReTiC от 09 Апреля 2004, 18:14:36

$result = mysql_query("SELECT phone, surname FROM phones WHERE name=$name") or die(mysql_error());
Название: передача параметра в php скрипт
Отправлено: ThE0ReTiC от 09 Апреля 2004, 18:16:03
vladimir2004
а ты уверен, что $name <> "" ?
а ты  в курсе, что name=$name ищет точное соответствие?
Название: передача параметра в php скрипт
Отправлено: vladimir2004 от 09 Апреля 2004, 18:29:32
Уверен:
echo "name to search -$name-

";
result = mysql_query("SELECT phone, surname FROM phones WHERE name LIKE \'%".$name."%\'") or die(mysql_error());
while ($row = mysql_fetch_array($result, MYSQL_NUM))
{
       printf ("Phone: %s  Surname: %s", $row[0], $row[1]);
   }

   mysql_free_result($result);
};

Выводит:
name to search -Игорь-
И ВСЕЕЕЕ.

А это код в INDEX.HTML:


 


Название: передача параметра в php скрипт
Отправлено: vladimir2004 от 09 Апреля 2004, 18:30:42
Неужели НИКТО не в состоянии определить ГДЕ ГРАБЛИ?????
Название: передача параметра в php скрипт
Отправлено: vladimir2004 от 09 Апреля 2004, 18:32:44
а если написать так:
$result = mysql_query("SELECT phone, surname FROM phones WHERE name=$name") or die(mysql_error());

то выдает:
name to search -Игорь-

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near \'Игорь\' at line 1

Это что такое?
Название: передача параметра в php скрипт
Отправлено: ThE0ReTiC от 09 Апреля 2004, 18:43:20
Цитировать
vladimir2004:
name=$name


name=\'$name\'
Название: передача параметра в php скрипт
Отправлено: vladimir2004 от 09 Апреля 2004, 18:47:57
Да пробовал, в этом случае выводи просто:

name to search -Игорь-
Название: передача параметра в php скрипт
Отправлено: Макс от 09 Апреля 2004, 19:08:53
vladimir2004
1. причин может быть много (нужно сидеть и отлаживать)
2. правильно писать name=\'$name\';
3. Проверь, работает ли поиск, если искать по английским словам.
Если работает, то читай здесь (http://tony2001.phpclub.net/faq/mysql.charset.html)
Название: передача параметра в php скрипт
Отправлено: hanslinger от 09 Апреля 2004, 19:19:06
Читай МАН по MySQL и РНР. Читай сообщения об ошибках. Внимательно и вдумчиво. Это все лечит.
Название: передача параметра в php скрипт
Отправлено: vladimir2004 от 09 Апреля 2004, 19:29:19
АГА, по английски ищет, будем читать http://tony2001.phpclub.net/faq/mysql.charset.html
Название: передача параметра в php скрипт
Отправлено: vladimir2004 от 09 Апреля 2004, 20:01:54
Нк вроди поменяк кодировку MySQL на cp1251, по английски ищет, но по русски все еще нет. Такой момент, в php скрипте перед поиском вывожу значение переданной переменно:
echo "name to search -$name-

";
$name=trim($name);
$result = mysql_query("SELECT phone, surname FROM phones WHERE name=\'$name\'") or die(mysql_error());
дык оно теперь когра пишу по русски, выводит знаки вопросов, хотя и в html и в php прописанно:
Название: передача параметра в php скрипт
Отправлено: sas171 от 16 Августа 2004, 21:25:12
Как сделать при register_globals off переход по ссылке с присваеваниваем значения переменной?

Напрмер: у меня есть SQL запрос "SELECT ... FROM ... LIMIT $begin, $limit."

и при помощи ссылки "back" мне надо присвоить переменной $begin значение 10.
( -- не работает.)
Название: передача параметра в php скрипт
Отправлено: Меняздесьдавнонет от 16 Августа 2004, 22:09:48
раота при register_globals off описана в факе http://phpfaq.ru/globals
вместо переменной $begin тебе надо обращаться к соответствующему элементу массива.