|
|
|
|
|
для: cheops
(09.04.2006 в 23:36)
| | Ок | |
|
|
|
|
|
|
|
для: АКУЛА
(09.04.2006 в 17:50)
| | реферером называют адрес страницы, с которой посетитель перешёл на текущую страницу. Получить его можно из элемента суперглобального массива $_SERVER['HTTP_REFERER'].
PS Такие вопросы лучше оформлять в виде отдельных тем на форуме. | |
|
|
|
|
|
|
|
для: Trianon
(16.02.2006 в 17:01)
| | А что такое рефферер ? | |
|
|
|
|
|
|
|
для: udaf
(16.02.2006 в 00:21)
| | А мне это решение очень понравилось. Тем, что автор решения не пытался "подправить" условия задачи. И хотя можно придумать ситуации, когда оно (решение) не прокатит, на 99% их придется выдумывать намеренно. Запрос по рефереру - очень сильный ход. Браво. | |
|
|
|
|
|
|
|
для: cheops
(16.02.2006 в 00:10)
| | вроде исправил
//script6_1.php
<?php
//$_REQUEST ен подходит так как там могуь быть куки
//получаем переменные из $_GET
//$req_vars=$_GET;
//получаем переменные из $_POST
$req_vars = $_POST;
//реферер
$ref = $_SERVER['HTTP_REFERER'];
//открываем рефферер
$ref_file = fopen($ref, "r");
//читаем рефферер
while(!feof($ref_file))
{
//читаем и удаляем пробелы и переносы строк
$file_string = trim(fgets($ref_file ));
$ref_in_one_srring .= $file_string;
}
fclose($ref_file);
//ищем форму в реферере
preg_match_all("|<form name=script6_1[^>]+>(.*)[^>]+m>|U", $ref_in_one_srring, $forms);
$form=$forms[0][0];
//ищем тэги инпут внутри формы
preg_match_all("/<input type=\S+ name=\S+[*>]/U", $form, $input);
//создаем массив для имен инпут элементов формы(поступивших из реферрера)
$form_elements = array();
//обработка массива инпут(так как он содержит много мусора)
foreach($input[0] as $value)
{
//так как существуют проблемы с сохранением невыбранных элементов формы то будем
//сохранять только чекбоксы и радио-кнопки и форму для ввода текста
if(preg_match("/radio_/i", $value)||preg_match("/check_1/i", $value))
{
$form_element=explode("name=", $value);
//удаляем конец тэга
$form_element=preg_replace("/>/", "", $form_element);
//добавляем имя элемента в массив имен элементов формы
array_push($form_elements, $form_element[1]);
}
}
foreach($req_vars as $req_var_name => $req_var_value)
{
echo($req_var_name);
}
//переделываем массив для функций array_search() и array_unshift() т.к в ходе тестирования обнаружилось
//что эти функции специфично работают с ассоциативными массивами
//элементы этого массива будут записаны в файл
$vars_to_write = array();
foreach($req_vars as $req_var_name => $req_var_value)
{
//меняем местами индекс и значение
$vars_to_write[$req_var_value] = $req_var_name;
}
foreach($form_elements as $var_name)
{
//если элемент нашелся в массиве из переданных перемных то выходим из цикла
if(array_search($var_name, $vars_to_write)) break;
//усли не нашелся то добавляем
else array_unshift($vars_to_write, $var_name);
}
//готовим строку для записи в файл
foreach($vars_to_write as $req_var_value => $req_var_name)
{
//пытаемя соблюдать синтаксис, с которым это делает
$string_to_write .= $req_var_name. "=". $req_var_value."&";
}
//удаляем файл
unlink("data.txt");
//открываем
$data_file=fopen("data.txt", "a");
//записываем
fwrite($data_file, $string_to_write);
//закрываем файл данных
fclose($data_file);
?>
|
| |
|
|
|
|
|
|
|
для: SoftTime
(15.02.2006 в 23:05)
| | Преклоняюсь перед вашей настойчивостью, языки, стили уходят и приходят - всё можно выучить и поднатореть в любой технологии, но способность не бояться и решать самые сложные задачи всегда будет отличать профессионала. Огромное спасибо за то, что вы приняли участие в решении этой задачи. Моя оценка оригинальности 4, читабельности 5. Скрипт при первом вызове выдаёт ошибки
Parse error: syntax error, unexpected '=' in d:\main\test1\script6_1.php on line 17
|
после их исправления всё работает, правда почему-то не восстанавливается значение радио-кнопки. Для сохранения значений удобнее было бы использовать сериализацию, а для передачи значений скрытые поля. | |
|
|
|
|
|
|
| Ответ 002 на задачу N 6.
С условиями задачи можно ознакомится по ссылке.
описание возможностей скрипта
может работать почти со всеми формами важно что-бы имя формы было script6_1.php желательно что-бы последний элемент формы содержал пробел скрипту не требуется что-бы форма была в отдельном файле
может работать с методими post и get
принцип работы
получает переданные переменные из get или пост и сует в массив
не переданные элементы получает из реферера(открывает файл и ищет в нем) и тоже сует в массив
манипулирует массивами
записывает в файл
<!--index.php форма-->
<!--udaf-->
<form name=script6_1 action=script6_1.php method=post>
<input type=radio name=radio_1> radio<br>
<input type=checkbox name=check_1>checkbox<br>
<input type=text name=text_1>text<br>
<textarea name=textarea_1> </textarea>textarea<br>
<input type=submit>
</form>
|
//script6_1.php
<?php
//$_REQUEST ен подходит так как там могуь быть куки
//получаем переменные из $_GET
//$req_vars=$_GET;
//получаем переменные из $_POST
$req_vars = $_POST;
//реферер
$ref = $_SERVER['HTTP_REFERER'];
//открываем рефферер
$ref_file = fopen($ref, "r");
//читаем рефферер
while(!feof($ref_file))
{
//читаем и удаляем пробелы и переносы строк
$file_string = trim(fgets($ref_file ));
$ref_in_one_srring. = $file_string;
}
fclose($ref_file);
//ищем форму в реферере
preg_match_all("|<form name=script6_1[^>]+>(.*)[^>]+m>|U", $ref_in_one_srring, $forms);
$form=$forms[0][0];
//ищем тэги инпут внутри формы
preg_match_all("/<input type=\S+ name=\S+[*>]/U", $form, $input);
//создаем массив для имен инпут элементов формы(поступивших из реферрера)
$form_elements = array();
//обработка массива инпут(так как он содержит много мусора)
foreach($input[0] as $value)
{
//так как существуют проблемы с сохранением невыбранных элементов формы то будем
//сохранять только чекбоксы и радио-кнопки и форму для ввода текста
if(preg_match("/radio_/i", $value)||preg_match("/check_1/i", $value))
{
$form_element=explode("name=", $value);
//удаляем конец тэга
$form_element=preg_replace("/>/", "", $form_element);
//добавляем имя элемента в массив имен элементов формы
array_push($form_elements, $form_element[1]);
}
}
foreach($req_vars as $req_var_name => $req_var_value)
{
echo($req_var_name);
}
//переделываем массив для функций array_search() и array_unshift() т.к в ходе тестирования обнаружилось
//что эти функции специфично работают с ассоциативными массивами
//элементы этого массива будут записаны в файл
$vars_to_write = array();
foreach($req_vars as $req_var_name => $req_var_value)
{
//меняем местами индекс и значение
$vars_to_write[$req_var_value] = $req_var_name;
}
foreach($form_elements as $var_name)
{
//если элемент нашелся в массиве из переданных перемных то выходим из цикла
if(array_search($var_name, $vars_to_write)) break;
//усли не нашелся то добавляем
else array_unshift($vars_to_write, $var_name);
}
//готовим строку для записи в файл
foreach($vars_to_write as $req_var_value => $req_var_name)
{
//пытаемя соблюдать синтаксис, с которым это делает
$string_to_write. = $req_var_name. "=". $req_var_value."&";
}
//удаляем файл
unlink("data.txt");
//открываем
$data_file=fopen("data.txt", "a");
//записываем
fwrite($data_file, $string_to_write);
//закрываем файл данных
fclose($data_file);
?>
|
//script2.php
<?php
if( file_exists("data.txt") && (filesize("data.txt") > 0))
{
//открываем файл для чтения
$data_file = fopen("data.txt", "r");
//читаем строку
$file_string = fgets($data_file );
//разбивка на переменные
$vars = explode("&", $file_string);
echo("<form name=script6_1 action=script6_1.php method=post>");
foreach($vars as $value)
{
//разбивка переменных на имя и значение по знаку равно
$var = explode("=", $value);
list($var_name, $var_value) = $var;
//вывод элемента формы в зависимости от имени переменной(поиск по регулярному выражению)
//радиокнопка
if(preg_match("/\Aradio_/i", $var_name))
{
echo("<input type=radio name=".$var_name);
//если выделена
if($var_value=="on")echo(" checked ");
echo(">radio<br>");
}
//чексбокс
else if(preg_match("/\Acheck_/i", $var_name))
{
echo("<input type=checkbox name=".$var_name);
//если выделена
if($var_value=="on")echo(" checked ");
echo(">checkbox<br>");
}
//текст
else if(preg_match("/\Atext_/i", $var_name))
{
echo("<input type=text name=".$var_name." value='".$var_value."'>text<br>");
}
//текстареа
else if (preg_match("/\Atextarea_/i", $var_name))
{
echo("<textarea name=".$var_name.">".$var_value."</textarea>textarea<br>");
}
}
echo("<input type=submit>");
echo("</form>");
//вывод формы
//закрываем файл
fclose($data_file);
}
//если файл не создан или пустой
else header("Location: index.php");
?>
|
http://www.softtime.ru/info/task.php?id_article=76 | |
|
|
|
|