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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Как вывести несколько сообщений о незаполненности поля?

Сообщения:  [1-10]    [11-20]  [21-23] 

 
 автор: Trianon   (25.02.2011 в 23:20)   письмо автору
 
   для: cheops   (25.02.2011 в 22:36)
 

Все бы ничего, но ограничивать себя бейсик-подмножеством языка лишь потому, что он продуман неидеально, а рядом предполагается недалекий коллега, это ... своего рода мазохизм чтоли...

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

  Ответить  
 
 автор: sim5   (25.02.2011 в 22:49)   письмо автору
 
   для: cheops   (25.02.2011 в 22:36)
 

Так я не о языке, а о разделах. )

  Ответить  
 
 автор: cheops   (25.02.2011 в 22:36)   письмо автору
 
   для: sim5   (25.02.2011 в 18:41)
 

>Львиная доля типов данных в специфике веб, это строки и массивы, и я приверженец того, что
>разделы мануала работы с этими типами данных должны быть священными. )
Не претензии ради, а ворчанья для: PHP очень далек от идеала и еще более далек от чего-то святого, сами же видите, что язык на коленке сделан, интерфейсы не продуманы. Собственно половина проблем из-за того, что он провоцирует небрежный код. В качестве священных писаний лучше использовать какие-нибудь другие языки, например, C++ или если нужно поближе к PHP - Python.

  Ответить  
 
 автор: alexander95   (25.02.2011 в 19:24)   письмо автору
 
   для: TrEK   (24.02.2011 в 12:24)
 

Почему бы не использовать QuickForm?

  Ответить  
 
 автор: sim5   (25.02.2011 в 18:41)   письмо автору
 
   для: cheops   (25.02.2011 в 10:47)
 

Ну нет так сильно и в глаз то зачем? :))
Написано много лишь потому, чтобы "разъснить" почему это взято. И в данном случае вообще ничего не создается, лишь массив пустых значений, а не 'to'=>'значение', и для всех остальных то же самое, что во втором случае вообще появляется только при выводе. Ну а вызов функций, так они оптимизированы, думаю. Это благо что мал размер данных, и еще можно столько "дров" заготавливать, но если большой, то какой смысл.
Львиная доля типов данных в специфике веб, это строки и массивы, и я приверженец того, что разделы мануала работы с этими типами данных должны быть священными. )

  Ответить  
 
 автор: cheops   (25.02.2011 в 10:47)   письмо автору
 
   для: sim5   (25.02.2011 в 03:12)
 

>А теперь можете запустить в меня кирпичом, если это действительно так сложно.
Ловите кирпич :))). Массив $error, если нет ошибок даже не возникает, у вас же по меньшей мере 4 вызова функций, две из которых не самые широкоиспользуемые. Описание логики потребовала около 30 строк комментариев - код хитрый. Никогда бы так делать не стал, чтобы потом не тратить время на разбор, пусть лучше будет массив, который видно откуда появляется и обходится циклом, который известен программисту любого уровня.

>а бесполезном расходовании ресурсов, как то создание дополнительного массива со
>значениями
Вы его тоже создаете, только более неочевидным способом.

  Ответить  
 
 автор: sim5   (25.02.2011 в 03:12)   письмо автору
 
   для: TrEK   (24.02.2011 в 16:02)
 

То есть все таки "страшно" да? :)
Знаете что плохо в таком подходе? Не в цикле как таковом, а бесполезном расходовании ресурсов, как то создание дополнительного массива со значениями и затрачиваемого времени для его обхода, и чем больше массивы, тем большее расходование русурсов впустую.
А выполнить надо всего то ничего, и менее бескровно. Смотрите как все "шутя" можно сделать стандартными средствами РНР (я пишу точно по тем словам, которые вас видимо испугали;-)):
<?
//пусть это массив входной
$in = array('to'=>'текст  ''from'=>'текст''name'=>' ''subj'=>'   ''from_to'=>'  текст  ''message'=>' ');

//перед использованием данных уберем ненужные пробелы,
//используя для этого функцию trim(), вкупе с функцией array_map(),
//а так как данные могут быть и корректными, и мы сможем их использовать,
//то сделаем эту операцию отдельной, присвоив ее результат входному массиву:
$in array_map('trim'$in); //очистка, начальник очистки Шариков :) 
//проверьте результат с различными комбинациями значений входного массива,
//с помощью var_dump($in), дабы убедиться, 
//что удаляются не только пробелы по краям значений,
//но что самое важное для нас, это то, 
//что "пустые" значения, в мысле состоящие только из пробелов,
//превращаются именно в "пустые", и во вех! элементах массива,
//что важно и как раз нужно для последующей операции

//операция проверки, основана на получении только пустых значений из входного массива,
//с последующим сравнением количества его элементов, с количеством элементов входного
//потенциальные "пустые" значения мы уже ранее превратили в пустые,
//а теперь получим их, если они есть, сранив входной массив
//с массивом пустых значений, то есть вот с таким: array('')
$two array_intersect($in, array('')); //получаем пустые элементы из входного массива
//проверьте, выведя этот массив с помощью print_r($two),
//что в случае наличия пустых элементов во входном массиве,
//массив $two будет содержать эти элементы, 
//и что важно, под теми же ключами, что и во входном массиве,
//что как раз и требуется для вывода результатов

//Последний этап - проверка и вывод результатов:
//если полученный массив пуст, значит пустых значений нет 
if(!$two) echo 'Все заполнено';
//иначе, если число элементов входного и полученного массива совпадают, то все пусто
elseif(count($two)==count($in)) echo 'Все пусто';
//иначе выводим ключи только пустых значений,
//получив их  как массив из массива, и объеденив этот массив в необходимую, для вывода сообщения, строку
else echo 'Пусто в ' implode('<br>Пусто в 'array_keys($two));
А теперь можете запустить в меня кирпичом, если это действительно так сложно.

Знания ваши будут пополняться в процессе работы, но и привычки тоже укореняются в процессе ее, и их зачастую "выковырять" гораздо сложнее, чем получить новые знания. Посему лучше не привыкать к нежелательному сразу, в самом начале.

  Ответить  
 
 автор: Trianon   (24.02.2011 в 17:29)   письмо автору
 
   для: TrEK   (24.02.2011 в 16:02)
 

нет, необязательно, хотя и можно.
Можно также обойтись вообще без цикла, и даже без if - написав echo implode('', $error);

Просто Вы написали ну а если массив состоит из $to , $from, $name, $message, $sub

Я могу представить это так, что отдельных переменных $to , $from, $name, $message, $sub нет, а вместо них есть массив $fields с ключами to, from, name, message, sub .
И тогда foreach вполне осмысленен:
<?

  $keys 
= array('to''from''name''message''sub');
  foreach(
$keys as $key)  $fields[$key] = @$_GET[$key];

  
$error = array();
  foreach(
$fields as $key => $value)   if(empty($value)) $error[] = "пусто в $key<br>";

  echo 
implode(''$error);

  Ответить  
 
 автор: cheops   (24.02.2011 в 17:04)   письмо автору
 
   для: TrEK   (24.02.2011 в 16:02)
 

В таком варианте не обязательно.

  Ответить  
 
 автор: TrEK   (24.02.2011 в 16:02)   письмо автору
 
   для: Trianon   (24.02.2011 в 15:37)
 

Хотя я сделал так :
<?php
  $error 
= array();
  if(empty(
$to)) $error[] = "пусто в to<br>";
  if(empty(
$from)) $error[] = "пусто в from<br>";
  if(empty(
$name)) $error[] = "пусто в name<br>";
  if(empty(
$subj)) $error[] = "пусто в subj<br>";
  if(empty(
$from_to)) $error[] = "пусто в from_to<br>";
  if(empty(
$message)) $error[] = "пусто в message<br>";
  
// Если есть ошибки - выводим
  
if(!empty($error))
  {
    for(
$i 0$i count($error); $i++) echo $error[$i];
  } 
?>

И все работает, все равно надо заменить for( на foreach( ?

  Ответить  

Сообщения:  [1-10]    [11-20]  [21-23] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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