Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2009, 18:50   #1
Linel
Форумчанин
 
Аватар для Linel
 
Регистрация: 21.02.2009
Сообщений: 372
По умолчанию Обработка данных полученных из формы

Предположим, есть форма, состоящая из checkbox'ов. Допустим, это какой либо опрос (ваши увлечения, ваши любимые конфеты и т.д.).

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

В моём примере я узнаю любимые цвета пользователя, и вывожу их на экран преобразуя значения массива. Тоесть, если пользователь отметил, что ему нравиться красный цвет (red), то я вывожу надпись красный.

Вот моя форма: (72.php)

Код HTML:
<form action="72.1.php" method="POST">
   Какие из перечисленных цветов вам нравятся?
   <br>
   <br>
   <input type="checkbox" name="color[]" value="red"> Красный
   <br>
   <input type="checkbox" name="color[]" value="orange"> Оранжевый
   <br>
   <input type="checkbox" name="color[]" value="yellow"> Жёлтый
   <br>
   <input type="checkbox" name="color[]" value="green"> Зелёный
   <br>
   <input type="checkbox" name="color[]" value="lblue"> Голубой
   <br>
   <input type="checkbox" name="color[]" value="blue"> Синий
   <br>
   <input type="checkbox" name="color[]" value="purple"> Феолетовый
   <br>
   <br>
   <input type="reset" value="Oчистить">
   <input type="submit" value="Отправить">
</form>
Способ обработки полученных данных номер 1 (72.1.php):

PHP код:
<?php

// Создаю массив из любимых цветов
$colors = @$_POST['color'];

// Ключами того массива являются значения массива $colors
$rainbow['red'] = 'Красный';
$rainbow['orange'] = 'Оранжевый';
$rainbow['yellow'] = 'Жёлтый';
$rainbow['green'] = 'Зелёный';
$rainbow['lblue'] = 'Голубой';
$rainbow['blue'] = 'Синий';
$rainbow['purple'] = 'Феолетовый';

// Вывожу на экран любимые цвета
if (empty($colors))
   print 
'Вам не нравится ни один из цветов :(';
else
{
   print 
'Вам нравятся слудеющие цвета:<br><br>';
   for (
$i=0$i<count($colors); $i++)
   {
      
// Получаю ключ для массива $rainbow
      
$key $colors[$i];
      
// Вывожу значения массива $rainbow для каждого ключа
      
print '- '.$rainbow[$key].'<br>';
   }
}

?>
Тут я использую 2 массива. 1-ый: то что я получил от ползователя. 2-ой: то что пользователь должен видеть.



И способ 2 (72.2.php):

PHP код:
<?php

// Снова создаю массив из любимых цветов
$colors = @$_POST['color'];

if (empty(
$colors))
   print 
'Вам не нравится ни один из цветов :(';
else
{
   print 
'Вам нравятся следующие цвета:<br><br>';
   for (
$i=0$i<count($colors); $i++)
   {
      
$fcolor $colors[$i];
      switch (
$fcolor)
      {
         case 
'red':
            
$color_rus 'Красный';
            break;
         case 
'orange':
            
$color_rus 'Оранжевый';
            break;
         case 
'yellow':
            
$color_rus 'Жёлтый';
            break;
         case 
'green':
            
$color_rus 'Зелёный';
            break;
         case 
'lblue':
            
$color_rus 'Голубой';
            break;
         case 
'blue':
            
$color_rus 'Синий';
            break;
         case 
'purple':
            
$color_rus 'Феолетовый';
            break;
      }
      print 
'- '.$color_rus.'<br>';
   }
}

?>

Ну а тут я использую "переключатель" Switch.

Какой способ более действенен и корректен? Или это делается как то по-другому?
No name. Just Linel.
Linel вне форума Ответить с цитированием
Старый 21.04.2009, 19:40   #2
wall66
Участник клуба
 
Аватар для wall66
 
Регистрация: 04.10.2008
Сообщений: 1,485
По умолчанию

Посмотрите функцию foreach (array as $key => $value), она облегчит любую часть вашего алгоритма
свободен...
wall66 вне форума Ответить с цитированием
Старый 21.04.2009, 21:42   #3
Linel
Форумчанин
 
Аватар для Linel
 
Регистрация: 21.02.2009
Сообщений: 372
По умолчанию

Цитата:
Посмотрите функцию foreach (array as $key => $value), она облегчит любую часть вашего алгоритма
Да, я с ней знаком. Но для перебора массива, я просто цикл использую. С помощью этой функции ничего глобально нового не произойдёт.
No name. Just Linel.
Linel вне форума Ответить с цитированием
Старый 22.04.2009, 09:13   #4
wall66
Участник клуба
 
Аватар для wall66
 
Регистрация: 04.10.2008
Сообщений: 1,485
По умолчанию

лично я бы сделал так
Код HTML:
<form action="72.1.php" method="POST">
   Какие из перечисленных цветов вам нравятся?
   <br>
   <br><input type="checkbox" name="red"> Красный
   <br><input type="checkbox" name="orange"> Оранжевый
   <br><input type="checkbox" name="yellow"> Жёлтый
   <br><input type="checkbox" name="green"> Зелёный
   <br><input type="checkbox" name="lblue"> Голубой
   <br><input type="checkbox" name="blue"> Синий
   <br><input type="checkbox" name="purple"> Феолетовый
   <br>
   <br><input type="reset" value="Oчистить"><input type="submit" value="Отправить">
</form>
PHP код:
<?php
$rainbow
=array(
'red'=>'Красный',
'orange'=>'Оранжевый',
'yellow'=>'Жёлтый',
'green'=>'Зелёный',
'lblue'=>'Голубой',
'blue'=>'Синий',
'purple'=>'Феолетовый'
);

$output='';

foreach(
$_POST as $key=>$value)
{
    if(isset(
$rainbow[$key]) and $value=='on')
    {
        
$output.='- '.$rainbow[$key].'<br>';
    }
}

if(
$output)
{
    
$output='Вам нравятся слудеющие цвета:<br><br>'.$output;
}
else
{
    
$output='Вам не нравится ни один из цветов :(';
}

echo 
$output;
?>
менее загруженный код получается
свободен...
wall66 вне форума Ответить с цитированием
Старый 23.04.2009, 14:38   #5
wyvern
Форумчанин
 
Аватар для wyvern
 
Регистрация: 24.03.2009
Сообщений: 215
По умолчанию

foreach работает заведомо медленнее цикла for.

Upd:
Ан нет, как оказалось, я не прав. В пхп фор - самый медленный цикл

foreach еще и проверяет на существование элемент массива. То есть если элемент массива не задан ( !isset($mas[$i]) ), то форыч его не затронет... мне кажется, для чекбоксов это лучший вариант
wyvern@localhost:~$ sudo emerge --unmerge world

Последний раз редактировалось wyvern; 23.04.2009 в 14:52.
wyvern вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка данных Deni55 Microsoft Office Excel 0 20.04.2009 12:41
Обработка данных из формы Damhurz PHP 5 14.04.2009 15:39
Обработка массивов данных ALEX_АНДр Помощь студентам 6 06.04.2009 18:59
Обработка данных Myagkiy Microsoft Office Excel 2 01.04.2009 10:26
Диаграмма на основе полученных табличных данных Dark_Maks Общие вопросы .NET 0 07.05.2008 03:25