Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ответ 001 на задачу N 6
 
 автор: SoftTime   (14.02.2006 в 13:56)   письмо автору
 
 

Ответ 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($var010) == "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($var05) == "text_" ) {
    
preg_match("/text_([a-z0-9-_]{1,})/i"$var$m);
    
$text[$m[1]] = $val;
    continue;
  
# проверка textarea
  
} elseif ( substr($var09) == "textarea_" ) {
    
preg_match("/textarea_([a-z0-9-_]{1,})/i"$var$m);
    
$tarea[$m[1]] = $val;
    continue;
  
# проверка чекбоксов
  
} elseif ( substr($var06) == "check_" ) {
    
preg_match("/check_([a-z0-9-_]{1,})/i"$var$m);
    
$check[$m[1]] = $val;
    continue;
  
# проверка радиобатонов
  
} elseif ( substr($var06) == "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

   
 
 автор: cheops   (16.02.2006 в 00:04)   письмо автору
 
   для: SoftTime   (14.02.2006 в 13:56)
 

Преклоняюсь перед вашей настойчивостью, языки, стили уходят и приходят - всё можно выучить и поднатореть в любой технологии, но способность не бояться и решать самые сложные задачи всегда будет отличать профессионала. Огромное спасибо за то, что вы приняли участие в решении этой задачи. Моя оценка решение в 5 баллов как по оригинальности, так и по читабельности. Тонкость здесь по сути заключалась в использовании скрытых переменных и сериализацию, что успешно демонстрирует скрипт.

   
 
 автор: АКУЛА   (09.04.2006 в 19:53)   письмо автору
 
   для: cheops   (16.02.2006 в 00:04)
 

Такой вопросик.
А можно поподробнее закоментировать строки:

preg_match("/text_([a-z0-9-_]{1,})/i", $var, $m);
$text[$m[1]] = $val;
continue;


Не совсем понятно как вызаносите в массив данные.

Заранее спасибо

   
 
 автор: cheops   (09.04.2006 в 23:39)   письмо автору
 
   для: АКУЛА   (09.04.2006 в 19:53)
 

Здесь находится соответствие при помощи регулярного выражения, результат помещается в массив $m, соответсвие всему регулярному выражению помещается в $m[0], то что соответствует круглым скобкам в $m[1].

   
 
 автор: АКУЛА   (11.04.2006 в 23:16)   письмо автору
 
   для: cheops   (09.04.2006 в 23:39)
 

Да. С функцией прег-матч уже познакомился. и вижу что она у автора ответа заносит данные в массив $m. Тут легко.
А вот эту запись $text[$m[1]] = $val; всё равно не просёк

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования