2009-10-23 9 views
34

j'ajouté suivant quelques lignes sur le dessus de mon code PHP, mais il donne l'erreur:Erreur PHP: Nom de la fonction doit être une chaîne

Erreur fatale: Nom de la fonction doit être une chaîne en /home/reg.php sur la ligne 2

<?php 
if ($_COOKIE('CaptchaResponseValue') == "false") 
{ 
    header('location:index.php'); 
    return; 
} 
?> 

J'ai même essayé: $ _COOKIE ("CaptchaResponseValue"). Le cookie est défini avec succès et est disponible. Pourquoi donne-t-il une erreur quand j'utilise $ _COOKIE?

Répondre

93

Il devrait être $_COOKIE['name'], pas $_COOKIE('name')

$ _COOKIE est un tableau, pas une fonction.

5

Essayez les accolades carrées avec votre $_COOKIE, et non entre parenthèses. Comme ceci:

<?php 
if ($_COOKIE['CaptchaResponseValue'] == "false") 
{ 
    header('Location: index.php'); 
    return; 
} 
?> 

J'ai également corrigé votre appel d'en-tête de localisation un peu aussi.

2

Si vous voulez savoir si cookie est ... utiliser

if (isset($_COOKIE['cookie'])) 
+0

@anonymous Pourquoi le DV ? –

+1

En raison du fonctionnement du système de vote. Les gens remettent en question les réponses qu'ils trouvent plus pertinentes et plus utiles à la question. Et les gens votent contre les réponses qu'ils trouvent moins intéressantes. J'imagine que c'est pourquoi vous avez été abattu. –

+0

@Filip Ekberg C'est éclairant ... ça va être génial si ces âmes anonymes ont laissé un commentaire quant à pourquoi .... mais je suppose que ce n'est pas vraiment une pratique répandue :) –

17

Utiliser parenthèse dans un langage de programmation ou d'un langage de script signifie généralement qu'il est une fonction.

Cependant $_COOKIE en php n'est pas une fonction, c'est un Array. Pour accéder aux données dans les tableaux, vous utilisez des accolades carrées ('[' et ']') qui symbolisent l'index pour obtenir les données. Donc, en faisant $_COOKIE['test'] vous dites essentiellement: "Donnez-moi les données de l'indice" test

Maintenant, dans votre cas, vous avez deux possibilités: (1) soit vous voulez voir si c'est faux-- en regardant à l'intérieur du biscuit ou (2) voir si elle est même pas là.

Pour cela, vous utilisez la fonction isset qui vérifie essentiellement si la variable est définie ou non.

Exemple

if (isset($_COOKIE['test'])) 

Et si vous voulez vérifier si la valeur est fausse et il est défini, vous pouvez effectuer les opérations suivantes:

if (isset($_COOKIE['test']) && $_COOKIE['test'] == "false") 

Une chose que vous pouvez garder à l'esprit est que si le premier test échoue, il ne sera pas pris la peine de vérifier la déclaration suivante si elle est et (&&).

Et pour expliquer pourquoi vous obtenez réellement l'erreur "Fonction doit être une chaîne", regardez this page. Il s'agit de la création basique de fonctions en PHP, ce qu'il faut retenir c'est qu'une fonction en PHP ne peut contenir que certains types de caractères, où $ n'en fait pas partie. Depuis PHP $ représente une variable.

Une fonction peut ressembler à ceci: _myFunction _myFunction123 myFunction et dans de nombreux autres modèles, mais le mélange avec des caractères tels que $ et% ne fonctionnera pas.

1

En PHP.js, _COOKIE $ est une fonction ;-)

function $_COOKIE(name) { 
    var nameEQ = name + "="; 
    var ca = document.cookie.split(';'); 
    for(var i=0;i < ca.length;i++) { 
     var c = ca[i]; 
     while (c.charAt(0)==' ') c = c.substring(1,c.length); 
    if (c.indexOf(nameEQ) == 0) return decodeURIComponent(c.substring(nameEQ.length,c.length).replace(/\+/g, '%20')); 
    } 
    return null; 
} 

via http://phpjs.org/functions/setcookie:509

+0

Techniquement c'est le cas mais il convertit le contenu des cookies en un tableau donc à cet égard ce qu'on appelle n'est pas une fonction. –

2

Il sera $_COOKIE['CaptchaResponseValue'], pas $_COOKIE('CaptchaResponseValue')

-2
<?php 
    require_once '../config/config.php'; 
    require_once '../classes/class.College.php'; 
    $Response = array(); 
    $Parms = $_POST; 
    $Parms['Id'] = Id; 

     $Parms['function'] = 'DeleteCollege'; 
     switch ($Parms['function']) { 
     case 'InsertCollege': { 
      $Response = College::InsertCollege($Parms); 
      break; 
     } 
     case 'GetCollegeById': { 
      $Response = College::GetCollegeById($Parms['Id']); 
      break; 
     } 
     case 'GetAllCollege': { 
      $Response = College::GetAllCollege(); 
      break; 
     } 
     case 'UpdateCollege': { 
      $Response = College::UpdateCollege($Parms); 
      break; 
     } 
     case 'DeleteCollege': { 
      College::DeleteCollege($Parms['Id']); 
      $Response = array('status' => 'R'); 
      break; 
     } 
    } 
    echo json_encode($Response); 
?> 
+0

S'il vous plaît expliquer comment cela répond à la question d'origine? – DaveP

Questions connexes