Форум 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 вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 05.05.2006, 17:34   [включить плавающее окно]   #21
pl_Vah
Мужской Опытный
 
Аватар для pl_Vah
 
Регистрация: 25.05.2004
Адрес: Moscow
Цитата (Sclerosis) »
Еще в начале было про $_GET[] и $_POST[], можно еще использовать ф-ю import_request_variables - ИМХО это удобнее ( http://ua2.php.net/manual/en/functio...-variables.php )
смотреть http://ru.php.net/manual/en/reserved...iables.request ИМХО не нужно это.... нужно пользоваться нормальными, грамотными методами т.е. $_POST[] $_GET[] и т.д. и т.п.

Цитата (Jabberwocky) »
Цитата (Аветис) »
может, через include сделать?
Не спасает
Цитата (Oldwin) »
Полный код цепляния можно?
require 'http://'.$_SERVER['HTTP_HOST'].'/include/function';
Цитата (Oldwin) »
Функции лучше цеплять через require_once.
.php';
Спасибо, в курсе.
ага.... подцепи ещё функции с яндекса и используй их поисковые механизмы.....

include <имя файла НА СЕРВЕРЕ>
для особо не понимающих: include_once("c:\\site\\includes\\functions.php");

Цитата (Jabberwocky) »
Что? Вопрос ответа не имеет? А уменя еще один возник.
Вот есть файлы 1.php и 2.php . файл 2.php цепляется к 1.php (require или incliude - роли не играет).
И в том и в другом файле есть обращение к переменной REQUEST_URI Но эти обращения имеют разный результат. Почему?
смотри чуть выше про include().....
pl_Vah вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 06.05.2006, 13:05   [включить плавающее окно]   #22
Jabberwocky
Мужской Умудрённый
Автор темы
 
Аватар для Jabberwocky
 
Регистрация: 14.12.2003
Адрес: Москва
pl_Vah
Спасибо, попробую. Только как я написал require, так текст файла вставляется. То есть если там html-код, то он вполне нормально работает. Да и php-тоже, кроме указанных.
__________________
Никогда не существовало и не будет существовать никаких «прикладных наук», есть лишь приложения наук (весьма полезные!) © Л. Пастер
Jabberwocky вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 06.05.2006, 14:34   [включить плавающее окно]   #23
pl_Vah
Мужской Опытный
 
Аватар для pl_Vah
 
Регистрация: 25.05.2004
Адрес: Moscow
на пальзах показываю различия....
файл f1.php
<?
echo "f1.php: ".$_SERVER["REQUEST_URI"]."<br>\n";
include_once("f2.php");
include_once("http://<url путь к файлу>/f3.php");
include_once("http://<url путь к файлу>/f4.txt");
?>
файл f2.php
<?
echo "f2.php: ".$_SERVER["REQUEST_URI"]."<br>\n";
?>

файл f3.php
<?
echo "f3.php: ".$_SERVER["REQUEST_URI"]."<br>\n";
?>

файл f4.txt
<?
echo "f4.txt: ".$_SERVER["REQUEST_URI"]."<br>\n";
?>

попробуй.... создай..... положи в одну папку и зайди на страницу f1.php

Последний раз редактировалось pl_Vah; 06.05.2006 в 14:49.
pl_Vah вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 06.05.2006, 14:50   [включить плавающее окно]   #24
pl_Vah
Мужской Опытный
 
Аватар для pl_Vah
 
Регистрация: 25.05.2004
Адрес: Moscow
Результат такого шаманства на приложенной картинке.... Найдите отличия.....
Миниатюры
Нажмите на изображение для увеличения
Название: test_result.jpg
Просмотров: 148
Размер:	69.5 Кб
ID:	15707  
pl_Vah вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 06.05.2006, 16:13   [включить плавающее окно]   #25
Jabberwocky
Мужской Умудрённый
Автор темы
 
Аватар для Jabberwocky
 
Регистрация: 14.12.2003
Адрес: Москва
pl_Vah
Спасибо. Всё переделал нормально. Понятно как надо в будущем делать. Только непонятно, чем по своей сути отличается Почему работает с сылками "на компе" и н е работает с http ссылками.
__________________
Никогда не существовало и не будет существовать никаких «прикладных наук», есть лишь приложения наук (весьма полезные!) © Л. Пастер
Jabberwocky вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 06.05.2006, 16:31   [включить плавающее окно]   #26
pl_Vah
Мужской Опытный
 
Аватар для pl_Vah
 
Регистрация: 25.05.2004
Адрес: Moscow
потому что по http прежде чем контент вывести - http сервер сначало твой скрипт интерпритирует....
pl_Vah вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 06.05.2006, 17:28   [включить плавающее окно]   #27
Jabberwocky
Мужской Умудрённый
Автор темы
 
Аватар для Jabberwocky
 
Регистрация: 14.12.2003
Адрес: Москва
pl_Vah
Точно!
Спасибо, теперь дошло!
__________________
Никогда не существовало и не будет существовать никаких «прикладных наук», есть лишь приложения наук (весьма полезные!) © Л. Пастер
Jabberwocky вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 16.05.2006, 11:36   [включить плавающее окно]   #28
Jabberwocky
Мужской Умудрённый
Автор темы
 
Аватар для Jabberwocky
 
Регистрация: 14.12.2003
Адрес: Москва
Теперь ещё такой вопрос. Переменная REMOTE_ADDR содержит IP зашедшего на сайт. Эта переменная нормально оборабатывается. Но почему при этом переменная REMOTE_HOST пустая? Как сделать, чтобы там был адрес юзера?
__________________
Никогда не существовало и не будет существовать никаких «прикладных наук», есть лишь приложения наук (весьма полезные!) © Л. Пастер
Jabberwocky вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 17.05.2006, 09:17   [включить плавающее окно]   #29
Sanya
Мужской Опытный
 
Аватар для Sanya
 
Регистрация: 22.03.2003
Адрес: Апатиты
Цитата (Jabberwocky) »
Но почему при этом переменная REMOTE_HOST пустая? Как сделать, чтобы
Надо ковырять настройки веб-сервера, чтобы он отслеживал хосты клиентов. Но при этом производительность сильно снизится, так как при каждом коннекте сервер будет опрашивать DNS.
__________________
Лечить и судить умеют и могут все, а вот рассчитать несущую балку?
Sanya вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 11.08.2006, 23:18   [включить плавающее окно]   #30
Jabberwocky
Мужской Умудрённый
Автор темы
 
Аватар для Jabberwocky
 
Регистрация: 14.12.2003
Адрес: Москва
Граждане!!!
Вопрс про классы в PHP и графику.
Всё для того, чтобы своими руками сделать captcha.
Непонятность в упрощенном виде:
вот у меня один файлик делает какую-то картинку. А в другой файлик мы эту картинку вставляем. Так получается. Далее хочется сделать по-взрослому. Так что, в первом файлике определяю класс, который, как мне видится, должен создавать картинку. инклудим все во второй файлик. И там создаем объект класса. Тут загвоздка. Не понятно, как вставить всё это грамотно, чтоб картинка выдавалась.
это первый файлик
Код:
<?php
class sq
	{
		function getimg()
			{
				$img = ImageCreate(300,300);
				$color = ImageColorAllocate($img, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));
				ImageFilledRectangle($img,0,0,300,300,$color);
				Header("Content-Type: image/png");
				ImagePng($img);
				ImageDestroy($img);
			}
	}
?>
а это - второй
Код:
<?php
require "pic.php";
$squire=new sq;
?>
<HTML>
	<Body>
		<p>qwertйцуке
		<img src="<?php $squire->getimg()?>">
	</Body>
</html>
Я понимаю, что во втором какая-то ересь, но придумать ничего толкового не получается. Помогите!
__________________
Никогда не существовало и не будет существовать никаких «прикладных наук», есть лишь приложения наук (весьма полезные!) © Л. Пастер
Jabberwocky вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 21.08.2006, 10:35   [включить плавающее окно]   #31
Daven
Мужской Администратор
 
Аватар для Daven
 
Регистрация: 06.03.2006
Адрес: Москва
Ну, тут проблема вот в чем. $squire->getimg() выдает содержание png-файла в src тега img его ставить низя.

Поэтому тут первое решение: в классе сделать вывод в файл, например,

Код:
<?php
class sq
	{
		function getimg()
			{
				$img = ImageCreate(300,300);
				$color = ImageColorAllocate($img, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));
				ImageFilledRectangle($img,0,0,300,300,$color);
				Header("Content-Type: image/png");
				ImagePng($img, "temp.png");
				ImageDestroy($img);
			}
	}
?>
после чего в html уже писать

Код:
<?php
require "pic.php";
$squire =& new sq;
$sq->getimg();
?>
<HTML>
	<Body>
		<p>qwertйцуке
		<img src="temp.png">
	</Body>
</html>
Либо, что, вероятно, разумнее оставить pic.php как есть, сделать отдельный файлик, например image.php и в него написать:
Код:
require "pic.php";
$squire =& new sq;
$sq->getimg();
а хтмл вписывать:
Код:
<?php
require "pic.php";
$squire=new sq;
?>
<HTML>
	<Body>
		<p>qwertйцуке
		<img src="image.php">
	</Body>
</html>
Кстати, может, не в тему, но все же замечу. Jabberwocky, я конечно, не знаю, как ты обычно делаешь, но конкретный пример хтмлки и пхпшки показывает, что ты не следишь за тем, как пишешь код. В пхп - пофиг, но хтмл стоит соблюдать стандпрты и не забывать про doctype, если хочешь бдобиться человеческой поддержки css и культурного отображения во всех браузерах. Вот.

/* Подумал и добавил */
Либо вот тебе готовый код, чтобы не морочиться с классами, которые для такой пустяковой задачи нафиг не нужны:
Код:
<?
session_start();
header("Content-type: image/gif");
$im=imagecreatetruecolor("200","30");
imageantialias($im, true);

$black=imagecolorallocate($im,0,0,0);

// распределяем начальные оттенки
for($i=0;$i<15;$i++){
	$rand=rand(130,200);
	$c[]=imagecolorallocate($im,$rand,$rand,$rand);
}

// заполнение фона
for($i=0;$i<10000;$i++){
	imagesetpixel($im, rand(0,200), rand(0,30), $c[rand(0,14)]);
}

// генерация строки проверки
$k=rand(100000,999999);
if(!session_is_registered("key")) session_register("key");
$_SESSION['key']=$k;

$k5=substr(md5($k),1,10);

imagettftext($im,20,0,25,25,$black,"ft.ttf",$k5);

imagegif($im);
?>
Писал сам. В качестве ключа для авторизации - кусок md5 хеша рандомного числа. Пишется в сессионную переменную, соответственно. Тут, правда, нужна поддержка freetype-а в gd, если ты под *никсами работаешь. В папку со скриптом скиль любимый шрифт .ttf и назовие его ft.ttf, либо поправь в коде. Все. Вот тебе и вся капча.
__________________
[root@localhost]
Android 2.3.1 (Gingerbread) @ HTC Desire Z @ 1.3GHz

Последний раз редактировалось Daven; 21.08.2006 в 10:42.
Daven вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 21.08.2006, 11:00   [включить плавающее окно]   #32
Daven
Мужской Администратор
 
Аватар для Daven
 
Регистрация: 06.03.2006
Адрес: Москва
Короче, вот это получиццо
Миниатюры
Нажмите на изображение для увеличения
Название: gal2.jpg
Просмотров: 133
Размер:	81.2 Кб
ID:	17635  
__________________
[root@localhost]
Android 2.3.1 (Gingerbread) @ HTC Desire Z @ 1.3GHz
Daven вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 21.08.2006, 11:08   [включить плавающее окно]   #33
Jabberwocky
Мужской Умудрённый
Автор темы
 
Аватар для Jabberwocky
 
Регистрация: 14.12.2003
Адрес: Москва
Цитата (Daven) »
не знаю, как ты обычно делаешь, но конкретный пример хтмлки и пхпшки показывает, что ты не следишь за тем, как пишешь код. В пхп - пофиг, но хтмл стоит соблюдать стандпрты и не забывать про doctype, если хочешь бдобиться человеческой поддержки css и культурного отображения во всех браузерах. Вот
Вот тут можно поподробнее. что конкретно не так?
Кстати, твой код скорее всего не пойдет. На серваке старая версия gd.
В принципе, без классов у меня и так всё работает. Протсто экспериментировал.
__________________
Никогда не существовало и не будет существовать никаких «прикладных наук», есть лишь приложения наук (весьма полезные!) © Л. Пастер
Jabberwocky вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 21.08.2006, 11:10   [включить плавающее окно]   #34
Jabberwocky
Мужской Умудрённый
Автор темы
 
Аватар для Jabberwocky
 
Регистрация: 14.12.2003
Адрес: Москва
У меня вот так получилось
Миниатюры
Нажмите на изображение для увеличения
Название: 1.gif
Просмотров: 151
Размер:	13.4 Кб
ID:	17636  
__________________
Никогда не существовало и не будет существовать никаких «прикладных наук», есть лишь приложения наук (весьма полезные!) © Л. Пастер
Jabberwocky вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 03.09.2006, 18:12   [включить плавающее окно]   #35
Daven
Мужской Администратор
 
Аватар для Daven
 
Регистрация: 06.03.2006
Адрес: Москва
Цитата (Jabberwocky) »
Цитата (Daven) »
не знаю, как ты обычно делаешь, но конкретный пример хтмлки и пхпшки показывает, что ты не следишь за тем, как пишешь код. В пхп - пофиг, но хтмл стоит соблюдать стандпрты и не забывать про doctype, если хочешь бдобиться человеческой поддержки css и культурного отображения во всех браузерах. Вот
Вот тут можно поподробнее. что конкретно не так?
Кстати, твой код скорее всего не пойдет. На серваке старая версия gd.
В принципе, без классов у меня и так всё работает. Протсто экспериментировал.
Ну, как я упомянул, это касается только данного тобой примера. конкретно не там вот что:

<Body>

Ты уж пиши либо <body>, либо <BODY>, в зависимости от стандарта: XHTML у тебя, или же HTML обычный. Почитать про стандарты можно во-первых на http://w3.org , на Webmascon-e ( http://webmacon.com ) или на ALA ( http://alistapart.com ). Ну и, конечно, еще много где, но я отдаю предпочтение ALA.
__________________
[root@localhost]
Android 2.3.1 (Gingerbread) @ HTC Desire Z @ 1.3GHz
Daven вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 04.09.2006, 23:14   [включить плавающее окно]   #36
Jabberwocky
Мужской Умудрённый
Автор темы
 
Аватар для Jabberwocky
 
Регистрация: 14.12.2003
Адрес: Москва
Daven
Какая разница? Регистр символа всё равно не учитывается.
И что читать? Ты бы прямые ссылки давал. А то поди-туда-не-знаю-куда.
__________________
Никогда не существовало и не будет существовать никаких «прикладных наук», есть лишь приложения наук (весьма полезные!) © Л. Пастер

Последний раз редактировалось Jabberwocky; 04.09.2006 в 23:17.
Jabberwocky вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 05.09.2006, 18:37   [включить плавающее окно]   #37
Daven
Мужской Администратор
 
Аватар для Daven
 
Регистрация: 06.03.2006
Адрес: Москва
Jabberwocky
Да то что регистр не учитывается, это да. Но я тебе говорю про такую вещь, как стандарты. В принципе, их не обязательно соблюдать. Я просто долгое время сидел на верстке сайтов и собаку на ентом съел. Про doctype и то как он или его отсуствие влияет на взаимодейтвие browser<->*html<->css очень долго... Но если хочешь прямую ссылку, то лучше, наверное вот: http://www.webmascon.com/topics/tools/09a.asp

Пожалуй, к результатам соблюдения стандартов можно отнести правильное "восприятие" сайта поисковиками.
__________________
[root@localhost]
Android 2.3.1 (Gingerbread) @ HTC Desire Z @ 1.3GHz
Daven вне форума  
Конфигурация ПК
Ответить с цитированием
Ответ Создать новую тему

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

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

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

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


Текущее время: 21:32. Часовой пояс 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