Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка на пустое значение, запарка с empty(); 
V
    Опции темы
Sentox
Дата 30.8.2009, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 27.1.2009
Где: Зимбабве

Репутация: 7
Всего: 7



Помогите пожалуйста, я что то не совсем понимаю:
Код

/**
     * Prepare target method
     * @param Request $request
     * @return str
     */
    private function prepareQuery(Request $request)
    {
        $query = "SELECT users.fid, users.femail 
                  FROM `users`,`lastactive` 
                  WHERE users.fid=lastactive.fid ";

        if (!empty($request->from_anual) && !empty($request->to_anual)) {
            $query .= "AND (users.fincoming BETWEEN " . (int)$request->from_anual . " AND " . (int)$request->to_anual . ")";
            var_dump($query);
        }

        var_dump($request->from_age, $request->to_age);die; // Проверка на пустоту. При заполненой форме показывает значения !!!

        if (!empty($request->from_age) && !empty($request->to_age)) {
            // Здесь код не выполняется при любых условиях. 
            $query .= "AND (users.fage BETWEEN " . (int)$request->from_age . " AND " . (int)$request->to_age . ")";
        }

        $query .= "AND users.endvacation<now()
                   AND users.accstatus='active'
                   AND users.status='member'";

        if ($request->gender !== 'ALL') {
            $query .= "AND users.fgender LIKE '" . $request->gender . "' ";
        }

        if (is_array($request->interests) && !in_array('NOT', $request->interests)){
            $query .=" AND (";
            $query .= implode(' ' . $request->language_bool . ' ', $request->interests);
            $query .= ")";
        }

        if (is_array($request->language) && !in_array('NOT', $request->language)){
            $query .=" AND (";
            $query .= implode(' ' . $request->language_bool . ' ', $request->language);
            $query .= ")";
        }

        if (is_array($request->countries) && !in_array('NOT', $request->countries)){
            $query .=" AND (";
            $query .= implode(' AND ', $request->countries);
            $query .= ")";
        }

        if (is_array($request->states) && !in_array('NOT', $request->states)){
            $query .=" AND (";
            $query .= implode(' AND ', $request->states);
            $query .= ")";
        }

        if (is_array($request->cityes) && !in_array('NOT', $request->cityes)){
            $query .=" AND (";
            $query .= implode(' AND ', $request->cityes);
            $query .= ")";
        }

            $fr="From: $adminemail";
            $tem="Запрос";

            if(@mail('***', $tem, $query, $fr)) {
                die("Отправлено!");
            }

        return $query;
    }    
 

Обьект Request обрабатывает глобальный массив $_REQUEST и заносит соответственно в своё частное свойство, ну а затем уже достаём из него поля формы.
Так вот вопрос:
при передаче из формы допустим полей 'from_age' и 'to_age' соответсвенно $request->from_age и $request->to_age функция empty(); определяет как пустое значение даже если оно передано, то есть заполнено.
Хотя var_dump($request->from_age, $request->to_age); выводит их значения, они существуют и заполнены!

Что то я совсем не могу понять ...

Это сообщение отредактировал(а) Sentox - 30.8.2009, 13:22
PM MAIL   Вверх
bars80080
Дата 30.8.2009, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



эти var_dump($request->from_age, $request->to_age); за пределами класса вызываются?
а         if (!empty($request->from_anual) && !empty($request->to_anual)) { внутри класса записаны?

но ведь внутри класса обращаться к своим методам надо через $this:  


if (!empty($this->from_anual) && !empty($this->to_anual)) {
PM MAIL WWW   Вверх
Ипатьев
Дата 30.8.2009, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Почему нельзя привести тестовый код, который иллюстрирует только саму проблему, и ничего больше?

Это сообщение отредактировал(а) Ипатьев - 30.8.2009, 13:43
PM MAIL   Вверх
Sentox
Дата 30.8.2009, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 27.1.2009
Где: Зимбабве

Репутация: 7
Всего: 7



Цитата(bars80080 @ 30.8.2009,  13:40)
эти var_dump($request->from_age, $request->to_age); за пределами класса вызываются?
а         if (!empty($request->from_anual) && !empty($request->to_anual)) { внутри класса записаны?

но ведь внутри класса обращаться к своим методам надо через $this:  


if (!empty($this->from_anual) && !empty($this->to_anual)) {

Помните методы __set и __get это как раз объект Request
Код

<?php
/**
 * This class processing request
 *
 * @author Sentox
 * @package defaultPackage
 */

class Request
{

/**
 * Request array
 * @var array
 */
    private $arRequest;

    public function  __construct($ajax = true)
    {
        $this->request();
    }

    public function keyExists($key)
    {
        if (array_key_exists($key, $this->arRequest)) {
            return true;
        }
    }

    public function  __get($name)
    {
        if (!isset($this->arRequest[$name]))
        {
            return false;
        }

        return $this->arRequest[$name];
    }

    private function request($ajax = true)
    {
        if ($ajax) {

            foreach ($_REQUEST as $key => $value) {

                if (is_array($value)) {
                    foreach ($value as $k => $v) {
                        $this->arRequest[$key][$k] = htmlspecialchars(iconv('UTF-8', 'windows-1251', $v));
                    }
                    continue ;
                }

                if ($key == 'message') {
                    $this->arRequest[$key] = iconv('UTF-8', 'windows-1251', $value);
                    continue;
                }
                $this->arRequest[$key] = htmlspecialchars(iconv('UTF-8', 'windows-1251', $value));
            }
        }

        foreach ($_REQUEST as $key => $value) {

            if (is_array($value)) {
                foreach ($value as $k => $v) {
                    $this->arRequest[$key][$k] = htmlspecialchars($v);
                }
                continue ;
            }

            if ($key == 'message') {
                $this->arRequest[$key] = $value;
                continue;
            }
            $this->arRequest[$key] = htmlspecialchars($value);
        }
    }
}
?>
 

я его передаю в метод  
private function prepareQuery(Request $request)
{
    // Логика
}

Добавлено @ 15:03
Цитата(Ипатьев @ 30.8.2009,  13:43)
Почему нельзя привести тестовый код, который иллюстрирует только саму проблему, и ничего больше?

Извините я просто думал может поможет весь код, как обычно всегда не хватает чего то.
Тестовый:
var_dump(empty($variable)); // Даже если есть значение выводит true соответсвенно несрабатыывает условие.
var_dump(($variable != '')); // Работает нормально, то есть если пусто значит true если есть значение false

Это сообщение отредактировал(а) Sentox - 30.8.2009, 15:04
PM MAIL   Вверх
Ипатьев
Дата 30.8.2009, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



у меня текстовый код 
Цитата(Sentox @  30.8.2009,  14:56 Найти цитируемый пост)
var_dump(empty($variable)); // Даже если есть значение выводит true соответсвенно несрабатыывает условие.
var_dump(($variable != '')); // Работает нормально, то есть если пусто значит true если есть значение false

выводит
Цитата

bool(true)
Notice:  Undefined variable: variable in D:\SERVER\HTDOCS\000.php on line 3
bool(false)

по-моему, все правильно
PM MAIL   Вверх
Sentox
Дата 30.8.2009, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 27.1.2009
Где: Зимбабве

Репутация: 7
Всего: 7



Да но в классе вот такая беда:
 var_dump($request->from_age, $request->to_age); // Значения допустим из формы 12 и 90
 var_dump(empty($request->from_age), empty($request->to_age)); // true, true - Пустые

Добавлено через 8 минут и 44 секунды
Может это быть из за хостера, так как появляются, время от времени, проблемы с работой встроенных функций serialize(); и unserialize(); - они попросту не работают.
Может и эта функция сбоит?
PM MAIL   Вверх
IZ@TOP
Дата 30.8.2009, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Sentox, внимательно читайте мануалы и коменты в них. http://ru.php.net/empty - первый же комментарий отвечает на Ваш вопрос: используйте магический метод __isset.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Sentox
Дата 30.8.2009, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 27.1.2009
Где: Зимбабве

Репутация: 7
Всего: 7



Спасибо!!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0965 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.