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

Форум PHP

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

 

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

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

тема: Как упростить конструкцию
 
 автор: serjinio   (13.07.2008 в 02:56)   письмо автору
 
 


<?php 
if ((isset($_POST['t'])&& $_POST['t'] !="")
&& (isset(
$_POST['d'])&& $_POST['d'] !="")                         
&& (isset(
$_POST['s'])&& $_POST['s'] !="")
&& (isset(
$_POST['c'])&& $_POST['c'] !="")
&& (isset(
$_POST['date'])&& $_POST['date'] !=""))
{
////////////////////
}
?>

Здесь я проверяю наличие переменных и чтобы они были не пустые...
Это из серии проверки полей формы....

Както можно уменьшить код....

   
 
 автор: sms-send   (13.07.2008 в 03:40)   письмо автору
 
   для: serjinio   (13.07.2008 в 02:56)
 

<?php

if(isset($_POST['t'], $_POST['d'], $_POST['s'], $_POST['c'], $_POST['date']) and !in_array(''$_POST))
{
////////////////////
}


Конечно in_array здесь замахивается на все значения массива $_POST, но можно ограничить перечислив нужные значения через конструкцию array().

Или объявить такую функцию:

<?php

function isnotempty($keys, &$array)
{
    foreach(
$keys as $key)
    {
        if(!isset(
$array[$key]) or $array[$key] == '')
            return 
false;
    }
    return 
true;
}

if(
isnotempty(array('t''d''s''c''date'), $_POST))
{
////////////////////
}




Или такую:

<?php

function isnotempty(&$array)
{
    foreach(
array_slice(func_get_args(), 1) as $key)
    {
        if(!isset(
$array[$key]) or $array[$key] == '')
            return 
false;
    }
    return 
true;
}


if(
isnotempty($_POST't''d''s''c''date'))
{
////////////////////
}

   
 
 автор: serjinio   (13.07.2008 в 04:10)   письмо автору
 
   для: sms-send   (13.07.2008 в 03:40)
 

Спасибо, сейчас просплюсь и перепишу по новой,а то уже утро........:)

   
 
 автор: serjinio   (13.07.2008 в 11:44)   письмо автору
 
   для: sms-send   (13.07.2008 в 03:40)
 

Все нормально заработало..и намного меньше кода...как я сразу не сообразил насчет массива..да вредно работать до утра...еще раз спасибо за помощь...

   
 
 автор: Drago   (13.07.2008 в 05:44)   письмо автору
 
   для: serjinio   (13.07.2008 в 02:56)
 


<?
if ($_POST['t'] && $_POST['d'] && $_POST['s'] && $_POST['c'] && $_POST['date']) 

//////////////////// 
}
?>

   
 
 автор: Trianon   (13.07.2008 в 10:21)   письмо автору
 
   для: Drago   (13.07.2008 в 05:44)
 

нельзя.
Нотайсы косяком полезут.

   
 
 автор: Drago   (13.07.2008 в 12:31)   письмо автору
 
   для: Trianon   (13.07.2008 в 10:21)
 

>нельзя.
>Нотайсы косяком полезут.

Ну и что? Кто-то обращает на них внимание?

Строчка в .htaccess решает эту проблему.
php_value error_reporting 7

   
 
 автор: Trianon   (13.07.2008 в 12:35)   письмо автору
 
   для: Drago   (13.07.2008 в 12:31)
 

Автор ветви обращает.
Точнее, автор кода в первом посте.

   
 
 автор: Drago   (13.07.2008 в 12:45)   письмо автору
 
   для: Trianon   (13.07.2008 в 12:35)
 

Кстати говоря, все зависит от логики приложения.
Например, при следующем подходе, нотайсов не будет:

<?php
error_reporting
(2024);

if (
$_POST)
    {
    if (
$_POST['v1'] and $_POST['v2'] and $_POST['v3']) echo "cool";
    else echo 
"no cool";
    }

echo 
"<form method=post>
    1 <input type=text name=v1><br>
    2 <input type=text name=v2><br>
    2 <input type=text name=v3><br>
    <input type=submit name=send value=go><br></form>"
;
?>

   
 
 автор: sms-send   (13.07.2008 в 12:57)   письмо автору
 
   для: Drago   (13.07.2008 в 12:45)
 

И куда же они денутся?

   
 
 автор: Drago   (13.07.2008 в 13:01)   письмо автору
 
   для: sms-send   (13.07.2008 в 12:57)
 

никуда, потому что для их вывода не будет повода.

   
 
 автор: sms-send   (13.07.2008 в 13:05)   письмо автору
 
   для: Drago   (13.07.2008 в 13:01)
 

Повод будет, если в массиве $_POST будет хотя бы один элемент.

Вообще мне такие измывательства над языком не нравятся =/
Зачем string или array неявно приводить к boolean, если есть операторы предназначенные для явного сравнения конкретных величин..

   
 
 автор: Drago   (13.07.2008 в 13:13)   письмо автору
 
   для: sms-send   (13.07.2008 в 13:05)
 

Если сам язык это позволяет, то зачем ухудшать читаемость и засорять код использованием лишних функций?

>Вообще мне такие измывательства над языком не нравятся =/
на вкус ИЛИ цвет, все фломастеры разные.

   
 
 автор: sms-send   (13.07.2008 в 13:20)   письмо автору
 
   для: Drago   (13.07.2008 в 13:13)
 

Ну лишними я бы их не назвал, а вот читаемость кода как раз портится от приведения string => boolean, например, строка "0" будет приведена к false, хотя это вполне рабочее значение для строки, а в коде эта логика не просматривается.

   
 
 автор: Drago   (13.07.2008 в 13:35)   письмо автору
 
   для: sms-send   (13.07.2008 в 13:20)
 

>а вот читаемость кода как раз портится от приведения string => boolean, например, строка "0" будет приведена к false, хотя это вполне рабочее значение для строки, а в коде эта логика не просматривается.

Это, как раз, портиться не читаемость, а уже логика скрипта.
И если она, логика, предполагает ввод в поле формы одного символа "0" (нуль), то и обрабатывать это поле должна соответственно. А именно, использовать строгое сравнение "===" переменной со строкой "0".

Поскольку, нестрогое сравнение, empty() и даже in_array(), приравняют нуль к false. И опять таки, нарушат логику.

   
 
 автор: sms-send   (13.07.2008 в 13:47)   письмо автору
 
   для: Drago   (13.07.2008 в 13:35)
 

in_array() имеет 3ий параметр strict.

>И если она, логика, предполагает ввод в поле формы

У меня логика всегда предполагает ввод чего угодно, в том числе пустой строки и соответствующую реакцию. Конечно, это уже дело привычки и стиля, зато работает безотказно и логично.

   
 
 автор: Drago   (13.07.2008 в 14:03)   письмо автору
 
   для: sms-send   (13.07.2008 в 13:47)
 

>in_array() имеет 3ий параметр strict.

Так почему вы его не использовали в своем первом посте?
Ведь:

<?
$a 
= array(120);
if (!
in_array(''$a))
?>

вернет false

>У меня логика всегда предполагает ввод чего угодно, в том числе пустой строки и соответствующую реакцию. Конечно, это уже дело привычки и стиля, зато работает безотказно и логично.

Я вам верю, но вы все же, так, для себя, потестируйте свои скрипты на ввод одного единственного символа нуль.

   
 
 автор: sms-send   (13.07.2008 в 14:12)   письмо автору
 
   для: Drago   (13.07.2008 в 14:03)
 

-

   
 
 автор: sms-send   (13.07.2008 в 14:12)   письмо автору
 
   для: Drago   (13.07.2008 в 14:03)
 

>Так почему вы его не использовали в своем первом посте?

Первый вариант был заведомо ошибочным, ниже я об этом написал. А в общем да, это недочёт.

>Я вам верю, но вы все же, так, для себя, потестируйте свои скрипты на ввод одного единственного символа нуль.

Это к чему?:)

   
 
 автор: Trianon   (13.07.2008 в 13:50)   письмо автору
 
   для: Drago   (13.07.2008 в 12:45)
 

Вопрос о логике Вы плавно перевели в плоскость вопроса о стиле.
Объективности ради я в полемику вопросов стиля вступать зарекся очень давно.
Субъективно (подчеркиваю, это мое личное мнение, и я его никому не навязываю) мне такой подход (сокрытие диагностики на участке кода, превышающем фрагмент одной строки) омерзителен.

   
 
 автор: serjinio   (13.07.2008 в 11:18)   письмо автору
 
   для: Drago   (13.07.2008 в 05:44)
 

так использовать нельзя потому что при внесении в БД получишь пустые поля в таблице...
в принципе можно сделать используя уничтожение переменной если ее значение не определено


<?php 
$date 
$_POST['date']; 
if (
$date == '')
{
unset(
$date);
}
?>

А затем можно и сравнивать

<?php 
if (isset($t) && isset($d) && isset($s) && isset($date) && isset($c))

// если заполнены все поля (нет пустых) то заносим значения в БД... 
}
?>
 

   
 
 автор: BinLaden   (13.07.2008 в 11:44)   письмо автору
 
   для: serjinio   (13.07.2008 в 11:18)
 

> так использовать нельзя потому что при внесении в БД получишь пустые поля в таблице...

Недостаток кода Drago только в том, что эти переменные могут быть не определены и полезут ошибки. А пустые строки такой код не пропустит.

> isset($t) && isset($d) && isset($s) && isset($date) && isset($c)
isset($t, $d, $s, $date, $c)

   
Rambler's Top100
вверх

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