2017-01-06 4 views
0

Я написал простой код данных вставки, но всякий раз, когда я использую !empty($author), он дает мне эту ошибку Fatal error: Call to a member function Create() on boolean, но я удаляю чек на !empty($author), так что это хорошо работает. Я действительно не понимаю, что это дает эту ошибку и что это значит.Неустранимая ошибка: вызов функции-члена Функция() на boolean

Вот мой код Комментарий Класс

class Comment extends DatabaseObject{ 
    // Attributes 
    protected static $TableName = 'comment'; 
    protected static $DBFields = array('id','author','comment','created','photograph_id'); 
    public $id; 
    public $author; 
    public $comment; 
    public $created; 
    public $photograph_id; 

    // Create Comment 
    public static function Make($photograph_id,$author='Anonymous',$body=''){ 
     if(!empty($photograph_id) && !empty($author) && !empty($body)){ 
      $Comment = new Comment(); 
      $Comment->author = $author; 
      $Comment->comment = $body; 
      $Comment->photograph_id = (int)$photograph_id; 
      $Comment->created = date("Y-m-d H:i:s",time()); 
      return $Comment; 
     }else{ 
      return FALSE; 
     } 

    } 
    // Find Comment Related Picture 
    public static function CommentOfPicture($photograph_id){ 
     global $db; 
     $Comment = static::FindByQuery("SELECT * FROM ".static::$TableName." WHERE `photograph_id`='".$db->EscapeValue($photograph_id)."' ORDER BY created ASC"); 
     return $Comment; 

    } 
} 

Вот мой код формы представления

// Comment Submit 
    if(isset($_POST['submit'])){ 
     $Name = trim($_POST['name']); 
     $Body = trim($_POST['comment']); 
     if(!empty($Body) || !empty($Name)){ 
      $Comment = Comment::Make($Photo->id,$Name,$Body); 
      if($Comment->Create()){ 
       $Session->MSG("Success: Comment is submit, awaiting for approval"); 
       RedirectTo("photo.php?id={$Photo->id}"); 
      }else{ 
       $Session->MSG("Danger: Something is Wrong"); 
       RedirectTo("photo.php?id={$Photo->id}"); 
      }   
     }else{ 
      $Session->MSG("Danger: Comment is empty"); 
      RedirectTo("photo.php?id={$Photo->id}"); 
     } 
    } 
+0

Проверьте, есть ли '$ _POST ['name']' пустая строка. Что вы представляете как «имя»? – vbrmnd

+0

Я отправляю имя автора. 'input text', если оставить его пустым, поэтому он должен писать по умолчанию' Anonymous', но это не так. он вставляет пустое поле в него –

ответ

0

Я думаю, что отношение (DatabaseObject) из общественной статической функции Make вызывает метод " Создать "по результату метода" Сделать ". Вы возвращаетесь FALSE, если условие терпит неудачу. Затем DatabaseObject вызывает метод Create on FALSE - с ошибкой! Будет лучше, если вы выкинете исключение вместо возврата FALSE или пустого объекта, если нужно вызвать метод Create.

+0

На самом деле приятель вставляет данные в базу данных до этого, но когда я использую проверку для имени типа '! empty ($ author)', он начинает давать эту ошибку, даже если не будет другого условия. Я заполняю все поэтому он все еще читает в нем остальное условие. –

+0

Тогда, пожалуйста, скажите мне результат var_dump (! Empty ($ photograph_id) &&! Empty ($ author) &&! Empty ($ body)); – Lukas

+0

'[ID] => [автор] => Хамза [комментарий] => Я люблю его [создал] => 2017-01-06 12:34:27 [photograph_id] => 26' –

0

Ваша проблема заключается в ваш метод подписи,

public static function Make($photograph_id,$author='Anonymous',$body='') 

по умолчанию Аргумент будет работать, как это. Если вы отправляете string(0) "", параметр $author будет принимать пустое значение строки, а не 'Anonymous'

У вас есть несколько вариантов,

Либо изменить порядок ваших аргументов и сделать $author в качестве последнего аргумента ВЗ сделать необязательным, если нет авторское имя, или вы можете заменить пустое имя автора 'Anonymous', взяв его как константу класса где-нибудь в определении класса.

Кроме того, этот question может помочь.