|
|
|
|
|
для: cheops
(25.02.2011 в 22:36)
| | Все бы ничего, но ограничивать себя бейсик-подмножеством языка лишь потому, что он продуман неидеально, а рядом предполагается недалекий коллега, это ... своего рода мазохизм чтоли...
Понятно, что грань тонкая. И что под влиянием озарения можно из неочевидных инструментов языка такое кружево понавертеть, что сам через месяц-другой не поймешь. И нужно себя в этом направлении окорачивать иногда почти физически. Но ведь и в аскетизме меру знать надо... | |
|
|
|
|
|
|
|
для: cheops
(25.02.2011 в 22:36)
| | Так я не о языке, а о разделах. ) | |
|
|
|
|
|
|
|
для: sim5
(25.02.2011 в 18:41)
| | >Львиная доля типов данных в специфике веб, это строки и массивы, и я приверженец того, что
>разделы мануала работы с этими типами данных должны быть священными. )
Не претензии ради, а ворчанья для: PHP очень далек от идеала и еще более далек от чего-то святого, сами же видите, что язык на коленке сделан, интерфейсы не продуманы. Собственно половина проблем из-за того, что он провоцирует небрежный код. В качестве священных писаний лучше использовать какие-нибудь другие языки, например, C++ или если нужно поближе к PHP - Python. | |
|
|
|
|
|
|
|
для: TrEK
(24.02.2011 в 12:24)
| | Почему бы не использовать QuickForm? | |
|
|
|
|
|
|
|
для: cheops
(25.02.2011 в 10:47)
| | Ну нет так сильно и в глаз то зачем? :))
Написано много лишь потому, чтобы "разъснить" почему это взято. И в данном случае вообще ничего не создается, лишь массив пустых значений, а не 'to'=>'значение', и для всех остальных то же самое, что во втором случае вообще появляется только при выводе. Ну а вызов функций, так они оптимизированы, думаю. Это благо что мал размер данных, и еще можно столько "дров" заготавливать, но если большой, то какой смысл.
Львиная доля типов данных в специфике веб, это строки и массивы, и я приверженец того, что разделы мануала работы с этими типами данных должны быть священными. ) | |
|
|
|
|
|
|
|
для: sim5
(25.02.2011 в 03:12)
| | >А теперь можете запустить в меня кирпичом, если это действительно так сложно.
Ловите кирпич :))). Массив $error, если нет ошибок даже не возникает, у вас же по меньшей мере 4 вызова функций, две из которых не самые широкоиспользуемые. Описание логики потребовала около 30 строк комментариев - код хитрый. Никогда бы так делать не стал, чтобы потом не тратить время на разбор, пусть лучше будет массив, который видно откуда появляется и обходится циклом, который известен программисту любого уровня.
>а бесполезном расходовании ресурсов, как то создание дополнительного массива со
>значениями
Вы его тоже создаете, только более неочевидным способом. | |
|
|
|
|
|
|
|
для: 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));
| А теперь можете запустить в меня кирпичом, если это действительно так сложно.
Знания ваши будут пополняться в процессе работы, но и привычки тоже укореняются в процессе ее, и их зачастую "выковырять" гораздо сложнее, чем получить новые знания. Посему лучше не привыкать к нежелательному сразу, в самом начале. | |
|
|
|
|
|
|
|
для: 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);
|
| |
|
|
|
|
|
|
|
для: 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( ? | |
|
|
| |
|