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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.09.2013, 13:46   #1
amator_roma
Пользователь
 
Аватар для amator_roma
 
Регистрация: 12.11.2010
Сообщений: 71
По умолчанию Переменная empty

Есть объявленная переменная, через
Код:
include "cl.class.php";
эту переменная должна использоватся в
Код:
public static function validate{}
Проверяю эту переменную на empty она пуста! Вопрос почему?
amator_roma вне форума Ответить с цитированием
Старый 03.09.2013, 19:41   #2
TranceSmile
Смайлик :)
Форумчанин
 
Аватар для TranceSmile
 
Регистрация: 12.12.2010
Сообщений: 445
По умолчанию

cl.class.php в студию
Самый перспективный framework Yii (c)
TranceSmile вне форума Ответить с цитированием
Старый 04.09.2013, 11:58   #3
amator_roma
Пользователь
 
Аватар для amator_roma
 
Регистрация: 12.11.2010
Сообщений: 71
По умолчанию

cl.class.php, строка 66 -
PHP код:
$data['id_category']= $LineId
PHP код:
<?php
class Comment
{
    private 
$data = array();
    public function 
__construct($row)
    {
        
/*
        /    Конструктор
        */
        
        
$this->data $row;
    }
    
    public function 
markup()
    {
        
/*
        /    Данный метод выводит разметку XHTML для комментария
        */
        
        // Устанавливаем псевдоним, чтобы не писать каждый раз $this->data:
        
$d = &$this->data;
        
        
$link_open '';
        
$link_close '';
        
        if(
$d['url']){
            
            
// Если был введн URL при добавлении комментария,
            // определяем открывающий и закрывающий теги ссылки
            
            
$link_open '<a href="'.$d['url'].'">';
            
$link_close =  '</a>';
        }
        
        
// Преобразуем время в формат UNIX:
        
$d['dt'] = strtotime($d['dt']);
        
        
// Нужно для установки изображения по умолчанию:
        
$url '/images/default_avatar.gif';
        
        return 
'
        
            <div class="comment">
                
                
                <div class="name">'
.$link_open.$d['name'].$link_close.'</div>
                <div class="date" title="Added at '
.date('H:i \o\n d M Y',$d['dt']).'">'.date('d M Y',$d['dt']).'</div>
                <p>'
.$d['body'].'</p>
            </div>
        '
;
    }
    
    public static function 
validate(&$arr)
    {
        
/*
        /    Данный метод используется для проверки данных отправляемых через AJAX.
        /
        /    Он возвращает true/false в зависимости от правильности данных, и наполняет
        /    массив $arr, который преается как параметр либо данными либо сообщением об ошибке.
        */
        
        
$errors = array();
        
$data    = array();
        
        
        
$data['id_category']= $LineId;
        
        if(!(
$data['email'] = filter_input(INPUT_POST,'email',FILTER_VALIDATE_EMAIL)))
        {
            
$errors['email'] = 'Введіть е-mail.';
        }
        if(!(
$data['url'] = filter_input(INPUT_POST,'url',FILTER_VALIDATE_URL)))
        {
            
// Если в поле URL был введн неправильный URL,
            // действуем так, как будто URL не был введен:
            
            
$url '';
        }
        
        
// Используем фильтр с возвратной функцией:
        
        
if(!($data['body'] = filter_input(INPUT_POST,'body',FILTER_CALLBACK,array('options'=>'Comment::validate_text'))))
        {
            
$errors['body'] = 'Введіть текст повідомлення.';
        }
        
        if(!(
$data['name'] = filter_input(INPUT_POST,'name',FILTER_CALLBACK,array('options'=>'Comment::validate_text'))))
        {
            
$errors['name'] = 'Введіть, Ваш нік.';
        }
        
        if(!empty(
$errors)){
            
            
// Если есть ошибки, копируем массив $errors в $arr:
            
            
$arr $errors;
            return 
false;
        }
        
        
// Если данные введены правильно, подчищаем данные и копируем их в $arr:
        
        
foreach($data as $k=>$v){
            
$arr[$k] = mysql_real_escape_string($v);
        }
        
        
// email дожен быть в нижнем регистре:
        
        
$arr['email'] = strtolower(trim($arr['email']));
        
        return 
true;
        
    }

    private static function 
validate_text($str)
    {
        
/*
        /    Данный метод используется как FILTER_CALLBACK
        */
        
        
if(mb_strlen($str,'utf8')<1)
            return 
false;
        
        
// Кодируем все специальные символы html (<, >, ", & .. etc) и преобразуем
        // символ новой строки в тег <br>:
        
        
$str nl2br(htmlspecialchars($str));
        
        
// Удаляем все оставщиеся символы новой строки
        
$str str_replace(array(chr(10),chr(13)),'',$str);
        
        return 
$str;
    }

}

?>
Строка 3 - подключение cl.class.php, а ниже в SQL запросе используется переменная $LineId - здесь отображается, а в cl.class.php нет.
PHP код:
<?php

// Сообщение об ошибке:
error_reporting(E_ALL^E_NOTICE);
include 
"connect.php";
include 
"cl.class.php";


/*
/    Выбираем все комментарии и наполняем массив $comments объектами
*/

$comments = array();
$strSQL ='SELECT * FROM comments WHERE comments.id_category='.$LineId.' ORDER BY id ASC';
echo 
$strSQL;
$result mysql_query($strSQL); 
while(
$row mysql_fetch_assoc($result))
{
    
$comments[] = new Comment($row);
}

?>
<br><br>
<div id="main">

<?php

/*
/    Вывод комментариев один за другим:
*/

foreach($comments as $c){
    echo 
$c->markup();
}

?>

<div id="addCommentContainer">
    <p>Додати коментар</p>
    <form id="addCommentForm" method="post" action="">
        <div>
            <label for="name">Ім'я</label>
            <input type="text" name="name" id="name" />
            
            <label for="email">Email</label>
            <input type="text" name="email" id="email" />

            <label for="body">Коментар</label>
            <textarea name="body" id="body" cols="20" rows="5"></textarea>
            
            <input type="submit" id="submit" value="Відправити" />
        </div>
    </form>
</div>

</div>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="script.js"></script>
amator_roma вне форума Ответить с цитированием
Старый 04.09.2013, 12:08   #4
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

а не наоборот?

Код:
$LineId = $data['id_category'];
ADSoft вне форума Ответить с цитированием
Старый 04.09.2013, 12:32   #5
amator_roma
Пользователь
 
Аватар для amator_roma
 
Регистрация: 12.11.2010
Сообщений: 71
По умолчанию

нет там правильно!

Последний раз редактировалось amator_roma; 04.09.2013 в 12:44.
amator_roma вне форума Ответить с цитированием
Старый 04.09.2013, 13:16   #6
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Ну так а с чего бы переменной $LineId быть доступной в validate() – откуда этот метод может знать о ней?
Она не передана в качестве аргумента, она не объявлена глобальной – потому для validate() этой переменной не существует (область видимости).
Передавай её в качестве аргумента при обращении к методу – Comment::validate($LineId, $arr);
Andkorol вне форума Ответить с цитированием
Старый 04.09.2013, 18:29   #7
amator_roma
Пользователь
 
Аватар для amator_roma
 
Регистрация: 12.11.2010
Сообщений: 71
По умолчанию

Цитата:
Передавай её в качестве аргумента при обращении к методу – Comment::validate($LineId, $arr);
Не получается $LineId - пуста до передачи в функцию(((
PHP код:
require 'comment.php'
- здесь $LineId=18
PHP код:
include "comment.class.php"
- здесь empty
Почему?, в validate делаю
Код:
global $LineId;
и все равно ни хр.на.

Последний раз редактировалось amator_roma; 04.09.2013 в 18:56.
amator_roma вне форума Ответить с цитированием
Старый 06.09.2013, 17:28   #8
TranceSmile
Смайлик :)
Форумчанин
 
Аватар для TranceSmile
 
Регистрация: 12.12.2010
Сообщений: 445
По умолчанию

Вообще-то такие вещи говорят о неправильном алгоритме. И вообще глобальные переменные это не безопасно.
Самый перспективный framework Yii (c)
TranceSmile вне форума Ответить с цитированием
Старый 11.09.2013, 23:38   #9
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию

Я смотрел, смотрел, и ни где не увидел чтобы этой переменной где нибудь что нибудь присваивалось.
dr.Chas вне форума Ответить с цитированием
Старый 12.09.2013, 00:42   #10
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Больше глобальных переменных, больше ада! Ещё, ещё! Жги!

Где объявление переменной $LineId? Где вызов функции validate()? Почему люди должны включать экстрасенсорные способности, чтоб угадать как у вас там всё устроено?

На такие вопросы в стиле "почему переменная пуста" можно давать простой ответ "она не объявлена". Всё. Простейшая попытка найти где эта переменная объявляется и проследить как она попадает в функцию validate() моментально даст ответ на вопрос почему она пустая.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
empty sql statement Dozent БД в Delphi 2 19.02.2013 10:25
[PHP] Функция empty() Qerti Помощь студентам 0 06.10.2011 21:35
ignore empty cells Olya1985 Microsoft Office Excel 17 03.01.2011 18:36
Вопрос по функциям trim и empty Svetix PHP 4 01.06.2009 23:48
условие если значение = empty zetrix Microsoft Office Excel 0 30.10.2006 18:58