2017-01-06 5 views
0

J'ai écrit le code de données d'insertion simple mais chaque utilisation !empty($author) il me donne cette erreur Fatal error: Call to a member function Create() on boolean mais je supprime vérifier !empty($author) alors alors c'est le travail bien. Je ne comprends vraiment pas c'est donner cette erreur et ce que cela signifie.Erreur fatale: Appel à une fonction membre Fonction() sur booléen

Voici mon code Commentaire classe

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; 

    } 
} 

Voici mon code de formulaire de soumission

// 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

Vérifiez si $ _POST ['name'] 'a une chaîne vide. Que soumettez-vous en tant que «nom»? – vbrmnd

+0

Je soumets un nom d'auteur. 'texte d'entrée' si laissé vide, il devrait être écrit par défaut' Anonymous', mais ce n'est pas le cas. il insère un champ vide dedans –

Répondre

0

Je pense qu'une relation (DatabaseObject) de fonction statique publique Make appelle la méthode " Créer "sur le résultat de la méthode" Make ". Vous renvoyez FALSE si la condition échoue. Ensuite, DatabaseObject appelle la méthode Create sur FALSE - avec l'erreur! Cela vaudra mieux, si vous lancez une exception au lieu de retourner FALSE ou un objet vide, si la méthode Create doit être appelée.

+0

En fait mon pote insère des données parfaitement dans la base de données avant mais quand j'utilise vérifier le nom comme '! empty ($ author)' il commence à donner cette erreur même si ça ne va pas à autre champ donc il est encore la lecture d'autre condition à l'intérieur. –

+0

Alors s'il vous plaît dites-moi le résultat de var_dump (! Vide ($ photograph_id) &&! Vide ($ auteur) &&! Vide ($ body)); – Lukas

+0

'[id] => [auteur] => Hamza [commentaire] => Je l'aime [créé] => 06/01/2017 12:34:27 [photograph_id] => 26' –

0

Votre problème est votre signature de la méthode,

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

L'argument par défaut va fonctionner comme ça. Si vous envoyez string(0) "", le paramètre $author va prendre la valeur de chaîne vide et non 'Anonymous'

Vous avez peu d'options,

Soit changer l'ordre de vos arguments et faire $author comme dernier argument ot la rendre facultative si aucun nom de l'auteur soumis ou vous pouvez substituer nom de l'auteur vide avec 'Anonymous' en le prenant comme constante de classe quelque part dans la définition de la classe.

En outre, ce question pourrait aider.