Форум 3DNews
Вернуться   Форум 3DNews > Программирование > Web-программирование

Ответ Создать новую тему
Опции темы Опции просмотра
Непрочитано 02.01.2006, 19:27   [включить плавающее окно]   #1
Jabberwocky
Мужской Умудрённый
Автор темы
 
Аватар для Jabberwocky
 
Регистрация: 14.12.2003
Адрес: Москва
помогите с Php

Ничего не могу понять. Для простоты набросал простой скриптик.

<?
echo "<html><body>";
echo '<form action="http://localhost/qwe.php" method="GET">';
echo "<input type=text name=val><br>";
echo '<input type=submit value="Go">';
echo "</form><br><br><br>";
if (isset($val))
echo "Переменная val имеет значение $val";
else
echo "Переменная не существует";
echo "</body></html>";
?>

Дык, вот. Не зависимо от того, что вбито в текстовое поле, переменная val всегда не существует. Почему. Можно и в командной строке передавать значение переменной сценарию, но всё равно это значение в программу не попадает. Почему так? Может что не так с настройкой PHP у меня? работаю под виндой. Стоит Apache 1.3.33 и php 5.0.5
__________________
Никогда не существовало и не будет существовать никаких «прикладных наук», есть лишь приложения наук (весьма полезные!) © Л. Пастер
Jabberwocky вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 02.01.2006, 20:24   [включить плавающее окно]   #2
pl_Vah
Мужской Опытный
 
Аватар для pl_Vah
 
Регистрация: 25.05.2004
Адрес: Moscow
потому что нефиг читать тупые доки где все пишут с включенной опцией register_globals........ есть суперглобали $HTTP_GET_VARS[] $HTTP_POST_VARS[] и ссылки на них короткие $_GET[] и $_POST[]
pl_Vah вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 02.01.2006, 23:05   [включить плавающее окно]   #3
Prezident
Мужской Умудрённый
 
Аватар для Prezident
 
Регистрация: 29.10.2003
Адрес: Томск

Цитата (pl_Vah) »
register_globals........ есть
Ага, знаю таких громотеев сам в начале изучения столкнулся с данной проблемой...
__________________
Россия победит!
Prezident вне форума  
Ответить с цитированием
Непрочитано 02.01.2006, 23:41   [включить плавающее окно]   #4
nstorm
Мужской Общительный
 
Регистрация: 13.02.2003
Адрес: Rostov-on-Don
<?
echo "<html><body>";
echo '<form action="http://localhost/qwe.php" method="GET">';
echo "<input type=text name=val><br>";
echo '<input type=submit value="Go">';
echo "</form><br><br><br>";
if (isset($_GET['val']))
echo "Переменная val имеет значение $_GET[val]";
else
echo "Переменная не существует";
echo "</body></html>";
?>
nstorm вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 03.01.2006, 11:07   [включить плавающее окно]   #5
Jabberwocky
Мужской Умудрённый
Автор темы
 
Аватар для Jabberwocky
 
Регистрация: 14.12.2003
Адрес: Москва
nstorm
Если так, то работает. Только не понимаю, почему.
Что вообще означает $_GET[]?
Из того, что сообщил pl_Vah могу предположить, что проблема с настройкой глобальных переменных, но всё равно ничего не понимаю. В книге про это молчок, а интернет в данный момент скорее отсутствует. Могу только на пару минут залезать, чтобы скачать почту ну и на форум успеть глянуть.
Почему здесь
Цитата
if (isset($_GET['val']))
кавычки есть, а здесь
Цитата
значение $_GET[val]
нету?

Jabberwocky добавил :

ага. Вот про это понял.
Цитата
register_globals
но что такое cуперглобаль?
__________________
Никогда не существовало и не будет существовать никаких «прикладных наук», есть лишь приложения наук (весьма полезные!) © Л. Пастер
Jabberwocky вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 03.01.2006, 14:25   [включить плавающее окно]   #6
Prezident
Мужской Умудрённый
 
Аватар для Prezident
 
Регистрация: 29.10.2003
Адрес: Томск
Цитата (Jabberwocky) »
register_globals
Это подключение глобальных переменных, не рекомендуется использовать, т.к. это не совсем безопасно.

Цитата (Jabberwocky) »
Что вообще означает $_GET[]?
Ну видел на сайтах адрес типа http://www.www.ru/index.php?fun=12

Это означает, переменная $_GET["fun"] будет равна 12.
GET и POST это метод передачи данных. Если ты передаешь через адресную строчку то это GET, в другом случае это POST... ну естественно даные передавать лучше используя метод POST, но все же GET тоже очень распростанен, допустим страницу в гостевой передаются через GET, как через POST сделать я даже не знаю
__________________
Россия победит!
Prezident вне форума  
Ответить с цитированием
Непрочитано 04.01.2006, 18:14   [включить плавающее окно]   #7
nstorm
Мужской Общительный
 
Регистрация: 13.02.2003
Адрес: Rostov-on-Don
echo '<form action="http://localhost/qwe.php" method="GET">';

method="GET" это значит что брайзер будет передовать по методу GET, через адресную строку, т.е. результатом отправки формы будет http://localhost/qwe.php?val=то_что_написано_в_поле

POST передает через HTTP запрос, адрес будет просто http://localhost/qwe.php, значение переменной val будет передано в заголовке HTTP.

Соотв. в зависимости от метода используется свой массив переменных пхп - $_GET[] и $_POST[]
можешь сделать print_r($_GET) и убедится что это массив, содержазщий твою переменную переданную браузером.

про register_globals забудь, включать его крайне небезопасно, и писать код, расчитанный на включенный register_globals чистой воды идиотизм. Поэтому и книжку/cайт (или где ты там этот пример взял) советую сменить, писал его явно сам новичок в PHP. Однако если бы register_globals былобы включено, тогда http переменная val, помимо $_GET[] прописалась бы и как $val. Что будет очень приятно хакеру, когда он будет ломать твой сайт если до этого дойдет дело.

PS: Насчет $_GET['val'] и $_GET[val] - когда используешь переменную как операнд или аргумент функции нужны кавычки, когда используюешь как подстановку внутри текста (т.е. в " ") тогда ' ' ставить ненужно.
Например:
if ($_GET['val'] == "secretpass") {
$_GET['val'] = nl2br($_GET['val']);
$output = "Вы ввели " . $_GET['val'];
}

но

if (strcmp("$_GET[val]", "secretpass") == 0) {
$_GET['val'] = nl2br("$_GET[val]");
$output = "Вы ввели $_GET[val]";
}

Последний раз редактировалось nstorm; 04.01.2006 в 18:25.
nstorm вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 05.01.2006, 15:12   [включить плавающее окно]   #8
pl_Vah
Мужской Опытный
 
Аватар для pl_Vah
 
Регистрация: 25.05.2004
Адрес: Moscow
nstorm
все что ты написал можно было сказать 2-мя линками
http://www.php.net/manual/ru/languag...predefined.php
http://www.php.net/manual/ru/languag...ors.string.php

Есть оператор конкатенации строк (слияние) - "." и не надо код засорять строками типа $iam="I am $_GET[entername]" более правильно $iam="I am ".$_GET["entername"]
pl_Vah вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 07.01.2006, 08:38   [включить плавающее окно]   #9
Jabberwocky
Мужской Умудрённый
Автор темы
 
Аватар для Jabberwocky
 
Регистрация: 14.12.2003
Адрес: Москва
pl_Vah nstorm
Спасибо. Весьма ценные замечания
__________________
Никогда не существовало и не будет существовать никаких «прикладных наук», есть лишь приложения наук (весьма полезные!) © Л. Пастер
Jabberwocky вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 03.04.2006, 18:00   [включить плавающее окно]   #10
Jabberwocky
Мужской Умудрённый
Автор темы
 
Аватар для Jabberwocky
 
Регистрация: 14.12.2003
Адрес: Москва
Продолжаю донимать тупыми вопросами
Почему в таком скриптике
Код:
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])||!isset($_SERVER['PHP_AUTH_PW']))
	{
		Header("WWW-Authenticate: Basic realm=\"private zone\"");
		Header("HTTP/1.0 401 Unauthorized");
		echo "переменные не существуют";
		phpinfo(32);
		exit;
	} 
?>
переменные всегда несуществуют. то есть дальше на проверку паролей дело не идет. Переменные $_SERVER['PHP_AUTH_USER'] и $_SERVER['PHP_AUTH_PW'] просто не передаются. Сколько логин с паролем не вводи - всегда пустые.
Нашел в поиске, что если включен safe_mode, то так и должно быть, но у меня в php.ini стоит safe_mode= Off.
при всем при том, на другой конфе apache+php работает. Где я что мог не так ляпнуть?
__________________
Никогда не существовало и не будет существовать никаких «прикладных наук», есть лишь приложения наук (весьма полезные!) © Л. Пастер
Jabberwocky вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 04.04.2006, 09:12   [включить плавающее окно]   #11
pl_Vah
Мужской Опытный
 
Аватар для pl_Vah
 
Регистрация: 25.05.2004
Адрес: Moscow
function authenticate() {
header('WWW-Authenticate: Basic realm="Administrative area login"');
header('HTTP/1.0 401 Unauthorized');
echo "'эммм....\n";
exit;
}
$login=false;
if(!$login){
if (!$_SERVER['PHP_AUTH_USER']==='user' || !$_SERVER['PHP_AUTH_PW']==='passwd'){
authenticate();
}
$login=true;
unset($_SERVER['PHP_AUTH_USER'],$_SERVER['PHP_AUTH_PW']);
}
pl_Vah вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 04.04.2006, 12:47   [включить плавающее окно]   #12
Jabberwocky
Мужской Умудрённый
Автор темы
 
Аватар для Jabberwocky
 
Регистрация: 14.12.2003
Адрес: Москва
pl_Vah
Не работает. Даже не выводит окна для аутентификации. Полагаю из за того, что переменные
$_SERVER['PHP_AUTH_USER'] и $_SERVER['PHP_AUTH_PW'] просто не существуют в природе

Jabberwocky добавил :

Переустановка php спасла положение. Теперь всё как часы
__________________
Никогда не существовало и не будет существовать никаких «прикладных наук», есть лишь приложения наук (весьма полезные!) © Л. Пастер
Jabberwocky вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 04.04.2006, 17:53   [включить плавающее окно]   #13
Jabberwocky
Мужской Умудрённый
Автор темы
 
Аватар для Jabberwocky
 
Регистрация: 14.12.2003
Адрес: Москва
Спасите, помогите.
Не доходит, как сделать так, чтоб при нажатии на ссылку (или кнопку) сначала удалялись переменные $_SERVER['PHP_AUTH_USER'] и $_SERVER['PHP_AUTH_PW'], а потом загрузить другую страницу.
Вообще как с помощью php переходить со страницы на страницу. Я только с помощью заголовков знаю как, но это не подходит.
__________________
Никогда не существовало и не будет существовать никаких «прикладных наук», есть лишь приложения наук (весьма полезные!) © Л. Пастер
Jabberwocky вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 05.04.2006, 01:42   [включить плавающее окно]   #14
pl_Vah
Мужской Опытный
 
Аватар для pl_Vah
 
Регистрация: 25.05.2004
Адрес: Moscow
function redirect($url, $proto='http://', $port=''){
$server_protocol =$proto;
$server_name = trim($_SERVER['HTTP_HOST']);
$server_port =$port;
$url = preg_replace('#^\/?(.*?)\/?$#', '/\1', trim($url));

// Redirect via an HTML form for PITA webservers
if (@preg_match('/Microsoft|WebSTAR|Xitami/', getenv('SERVER_SOFTWARE')))
{
header('Refresh: 0; URL=' . $server_protocol . $server_name . $server_port . $url);
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><meta http-equiv="refresh" content="0; url=' . $server_protocol . $server_name . $server_port . $script_name . $url . '"><title>Redirect</title></head><body><div align="center">If your browser does not support meta redirection please click <a href="' . $server_protocol . $server_name . $server_port . $url . '">HERE</a> to be redirected</div></body></html>';
exit;
}

header('Location: ' . $server_protocol . $server_name . $server_port . $url);
exit;
}

unset($_SERVER['PHP_AUTH_USER']);
unset($_SERVER['PHP_AUTH_PW']);

redirect('/page.php');

pl_Vah добавил :

Кусок кода с авторизацией не тестил...... ща оттестил..... вот рабочий код:
if(!$login){
if ($_SERVER['PHP_AUTH_USER']!=='user' || $_SERVER['PHP_AUTH_PW']!=='passwd'){
authenticate();
}
$login=true;
unset($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']);
}
pl_Vah вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 28.04.2006, 16:21   [включить плавающее окно]   #15
Jabberwocky
Мужской Умудрённый
Автор темы
 
Аватар для Jabberwocky
 
Регистрация: 14.12.2003
Адрес: Москва
Не понимаю в чем дело...
Написал функцию. Если размещаю её текст в том файле, где она применяется, то все нормально работает. А если выншу в одельный файл, который потом к нужному цепляю с помощью require, то вылезает строка, про еизвестную функцию. Выходит, так нельзя делать, а как надо, чтоб по 10 раз одно и то же не писать?
__________________
Никогда не существовало и не будет существовать никаких «прикладных наук», есть лишь приложения наук (весьма полезные!) © Л. Пастер
Jabberwocky вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 29.04.2006, 03:19   [включить плавающее окно]   #16
Аветис
Мужской Умудрённый
 
Аватар для Аветис
 
Регистрация: 21.04.2005
Адрес: Донецк
может, через include сделать?
__________________
Не может не Киев, не Минск, ни Москва
В футболе с «Шахтером» сравниться.
Шахтер Суперклуб - Золотые слова.
Ты можешь «Шахтером» гордиться.
Аветис вне форума  
Ответить с цитированием
Непрочитано 30.04.2006, 11:29   [включить плавающее окно]   #17
Oldwin
Начинающий
 
Регистрация: 10.11.2004
Цитата
который потом к нужному цепляю с помощью require
Полный код цепляния можно? Или хотя б путь к цеплянию. И код цепляемого файла. Он должен быть так же обрамлен в <?php ?>

З.ы. Функции лучше цеплять через require_once. Это аналог обычного require, однако если данная функция уже была загружена, то пхп ее не загружает повторно. Иначе просто рано или поздно может вылезти ошибка из-за попытки перезагрузить функцию что в пхп недопустимо.
Oldwin вне форума  
Ответить с цитированием
Непрочитано 30.04.2006, 20:31   [включить плавающее окно]   #18
Sclerosis
Мужской Продвинутый
 
Аватар для Sclerosis
 
Регистрация: 16.02.2004
Еще в начале было про $_GET[] и $_POST[], можно еще использовать ф-ю import_request_variables - ИМХО это удобнее ( http://ua2.php.net/manual/en/functio...-variables.php )
__________________
Как бы стремительно индустрия не развивалась, а компы тормозить будут всегда !!!
Sclerosis вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 30.04.2006, 21:14   [включить плавающее окно]   #19
Jabberwocky
Мужской Умудрённый
Автор темы
 
Аватар для Jabberwocky
 
Регистрация: 14.12.2003
Адрес: Москва
Цитата (Аветис) »
может, через include сделать?
Не спасает
Цитата (Oldwin) »
Полный код цепляния можно?
require 'http://'.$_SERVER['HTTP_HOST'].'/include/function';
Цитата (Oldwin) »
Функции лучше цеплять через require_once.
.php';
Спасибо, в курсе.
__________________
Никогда не существовало и не будет существовать никаких «прикладных наук», есть лишь приложения наук (весьма полезные!) © Л. Пастер
Jabberwocky вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 05.05.2006, 16:55   [включить плавающее окно]   #20
Jabberwocky
Мужской Умудрённый
Автор темы
 
Аватар для Jabberwocky
 
Регистрация: 14.12.2003
Адрес: Москва
Что? Вопрос ответа не имеет? А уменя еще один возник.
Вот есть файлы 1.php и 2.php . файл 2.php цепляется к 1.php (require или incliude - роли не играет).
И в том и в другом файле есть обращение к переменной REQUEST_URI Но эти обращения имеют разный результат. Почему?
__________________
Никогда не существовало и не будет существовать никаких «прикладных наук», есть лишь приложения наук (весьма полезные!) © Л. Пастер
Jabberwocky вне форума  
Конфигурация ПК
Ответить с цитированием
Ответ Создать новую тему

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 21:44. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 2000-2017 3DNews. All Rights Reserved.
Администрация 3DNews требует соблюдения на форуме правил и законов РФ
Серверы размещены в Hostkey