|
|
|
| Ответ 001 на задачу N 6.
С условиями задачи можно ознакомится по ссылке.
<?php
# Скрипт script6_1.php к задаче 6
# проверка метода
if ( $_SERVER['REQUEST_METHOD'] == "POST" ) {
$array = $_POST;
} elseif ( $_SERVER['REQUEST_METHOD'] == "GET" ) {
$array = $_GET;
}
foreach ($array as $var => $val ) {
# возможные радиобатоны
if ( substr($var, 0, 10) == "r_possible" ) {
preg_match("/r_possible([0-9]{1,3})_([0-9a-z-_]{1,})/i", $var, $m);
# заносим все возможные радиобатоны в массив
$r_poss[$m[2]][$m[1]] = $val;
continue;
# проверка text
} elseif ( substr($var, 0, 5) == "text_" ) {
preg_match("/text_([a-z0-9-_]{1,})/i", $var, $m);
$text[$m[1]] = $val;
continue;
# проверка textarea
} elseif ( substr($var, 0, 9) == "textarea_" ) {
preg_match("/textarea_([a-z0-9-_]{1,})/i", $var, $m);
$tarea[$m[1]] = $val;
continue;
# проверка чекбоксов
} elseif ( substr($var, 0, 6) == "check_" ) {
preg_match("/check_([a-z0-9-_]{1,})/i", $var, $m);
$check[$m[1]] = $val;
continue;
# проверка радиобатонов
} elseif ( substr($var, 0, 6) == "radio_" ) {
preg_match("/radio_([a-z0-9-_]{1,})/i", $var, $m);
$radio[$m[1]] = $val;
}
}
# подготовка данных для записи в файл
$text = serialize($text);
$tarea = serialize($tarea);
$check = serialize($check);
$radio = serialize($radio);
$r_poss = serialize($r_poss);
$result = $text."\n".$tarea."\n".$check."\n".$radio."\n".$r_poss;
# запись в файл
$file = fopen("data.txt", "wt");
fwrite($file, $result);
fclose($file);
header("Location: script6_2.php");
?>
|
<?php
# Скрипт script6_2.php к задаче 6
if ( file_exists("data.txt") ) {
# форма
$out = "<form action=\"script6_1.php\" method=\"post\">\n";
# читаем файл
$file = file("data.txt");
# подготавливаем данные к обработке
$text = unserialize($file[0]);
$tarea = unserialize($file[1]);
$check = unserialize($file[2]);
$radio = unserialize($file[3]);
$r_poss = unserialize($file[4]);
# обработка text
foreach ( $text as $var => $val ) {
$out .= "<input type=\"text\" name=\"text_".$var."\" value=\"".$val."\" /><br />\n";
}
# обработка textarea
foreach ( $tarea as $var => $val ) {
$out .= "<textarea name=\"textarea_".$var."\">".$val."</textarea><br />\n";
}
# обработка чекбоксов
foreach ( $check as $var => $val ) {
if ( $val == "off" ) {
$out .= "<input type=\"hidden\" name=\"check_".$var."\" value=\"off\" />\n";
$out .= "<input type=\"checkbox\" name=\"check_".$var."\" />\n";
} elseif ( $val == "on" ) {
$out .= "<input type=\"hidden\" name=\"check_".$var."\" value=\"off\" />\n";
$out .= "<input type=\"checkbox\" name=\"check_".$var."\" checked=\"true\" />\n";
}
}
$out .= "<br />";
# записанное значение выбранного радиобатона
foreach ( $radio as $var => $val ) {
$out .= "<input type=\"hidden\" name=\"".$var."\" value=\"".$val."\" />\n";
}
# вывод всех секций с радиокнопками
# секции
foreach ( $r_poss as $var => $val ) {
# сами кнопки
foreach ( $val as $var2 => $val2 ) {
if ( !empty($radio[$var]) && $val2 == $radio[$var] ) {
$checked = " checked=\"true\"";
} else {
$checked = "";
}
$out .= "<input type=\"hidden\" name=\"r_possible".$var2."_".$var."\" value=\"".$val2."\" />";
$out .= "<input type=\"radio\" name=\"radio_".$var."\" value=\"".$val2."\"".$checked." />\n";
}
$out .= "<br />";
}
$out .= "<input type=\"submit\" />\n</form>";
echo($out);
}
?>
|
<!-- примерная, случайно заполненная форма для задачи 6 -->
<form action="script6_1.php" method="post">
<!-- два текста -->
<input type="text" name="text_1" /><br />
<input type="text" name="text_2s" /><br />
<!-- один textarea -->
<textarea name="textarea_ff2"></textarea><br />
<!-- 4 чекбокса, дублируются hidden-параметром -->
<!-- по умолчанию выключены -->
<input type="hidden" name="check_12" value="off" />
<input type="checkbox" name="check_12" />
<input type="hidden" name="check_11" value="off" />
<input type="checkbox" name="check_11" />
<input type="hidden" name="check_13" value="off" />
<input type="checkbox" name="check_13" />
<input type="hidden" name="check_14" value="off" />
<input type="checkbox" name="check_14" />
<br />
<!-- 10 радиобатонов, 4 в одной секции, 6 в другой -->
<!-- все батоны, а так же выбранное значение дублируются -->
<input type="hidden" name="r_possible1_dd" value="1" />
<input type="radio" name="radio_dd" value="1" />
<input type="hidden" name="r_possible2_dd" value="3" />
<input type="radio" name="radio_dd" value="3" />
<input type="hidden" name="r_possible3_dd" value="5" />
<input type="radio" name="radio_dd" value="5" />
<input type="hidden" name="r_possible4_dd" value="7" />
<input type="radio" name="radio_dd" value="7" />
<br />
<input type="hidden" name="r_possible1_d2" value="sd" />
<input type="radio" name="radio_d2" value="sd" />
<input type="hidden" name="r_possible2_d2" value="fg" />
<input type="radio" name="radio_d2" value="fg" />
<input type="hidden" name="r_possible3_d2" value="mn" />
<input type="radio" name="radio_d2" value="mn" />
<input type="hidden" name="r_possible4_d2" value="ed" />
<input type="radio" name="radio_d2" value="ed" />
<input type="hidden" name="r_possible5_d2" value="23" />
<input type="radio" name="radio_d2" value="23" />
<input type="hidden" name="r_possible6_d2" value="dd" />
<input type="radio" name="radio_d2" value="dd" />
<br />
<input type="submit">
</form>
|
http://www.softtime.ru/info/task.php?id_article=76 | |
|
|
|
|
|
|
|
для: SoftTime
(14.02.2006 в 13:56)
| | Преклоняюсь перед вашей настойчивостью, языки, стили уходят и приходят - всё можно выучить и поднатореть в любой технологии, но способность не бояться и решать самые сложные задачи всегда будет отличать профессионала. Огромное спасибо за то, что вы приняли участие в решении этой задачи. Моя оценка решение в 5 баллов как по оригинальности, так и по читабельности. Тонкость здесь по сути заключалась в использовании скрытых переменных и сериализацию, что успешно демонстрирует скрипт. | |
|
|
|
|
|
|
|
для: cheops
(16.02.2006 в 00:04)
| | Такой вопросик.
А можно поподробнее закоментировать строки:
preg_match("/text_([a-z0-9-_]{1,})/i", $var, $m);
$text[$m[1]] = $val;
continue;
Не совсем понятно как вызаносите в массив данные.
Заранее спасибо | |
|
|
|
|
|
|
|
для: АКУЛА
(09.04.2006 в 19:53)
| | Здесь находится соответствие при помощи регулярного выражения, результат помещается в массив $m, соответсвие всему регулярному выражению помещается в $m[0], то что соответствует круглым скобкам в $m[1]. | |
|
|
|
|
|
|
|
для: cheops
(09.04.2006 в 23:39)
| | Да. С функцией прег-матч уже познакомился. и вижу что она у автора ответа заносит данные в массив $m. Тут легко.
А вот эту запись $text[$m[1]] = $val; всё равно не просёк | |
|
|
|