2009-10-23 14 views
34

ho aggiunto dopo poche righe sulla parte superiore del mio codice PHP, ma che sta dando errore:PHP Errore: Nome della funzione deve essere una stringa

Fatal error: Nome della funzione deve essere una stringa in /home/reg.php sulla linea 2

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

ho anche provato: $ _COOKIE ("CaptchaResponseValue"). Il cookie è impostato correttamente ed è disponibile. Perché sta dando errore quando sto usando $ _COOKIE?

risposta

93

Va $_COOKIE['name'], non $_COOKIE('name')

$ _COOKIE è un array, non una funzione.

5

Provare le parentesi quadre con $_COOKIE, non con parentesi. In questo modo:

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

Ho anche corretto un po 'la tua intestazione di posizione.

2

Se si vuole accertare se cookie è impostato ... utilizzare

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

@anonymous Perché il DV ? –

+1

A causa di come funziona il sistema di voto. Le risposte di persone in aumento trovano più pertinenti e più utili alla domanda. E le persone in basso votano le risposte che trovano meno interessanti. Immagino che sia per questo che sei stato down-votato. –

+0

@Filip Ekberg Questo è illuminante ... sarebbe fantastico se questi anonimi anonimi lasciassero un commento sul perché ... ma immagino che non sia una pratica molto diffusa :) –

17

Utilizzando parentesi in un linguaggio di programmazione o di un linguaggio di scripting di solito significa che si tratta di una funzione.

Tuttavia $_COOKIE in php non è una funzione, è un Array. Per accedere ai dati nelle matrici si usano le parentesi quadre ('[' e ']') che simboleggiano da quale indice ottenere i dati. Quindi, facendo $_COOKIE['test'], stai praticamente dicendo: "Datemi i dati dall'indice 'test'.

Ora, nel tuo caso, hai due possibilità: (1) vuoi vedere se è falso-- cercando all'interno del biscotto o (2) se non è nemmeno lì.

Per questo, si utilizza la funzione isset che controlla fondo se la variabile è impostata oppure no.

Esempio

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

E se si desidera controllare se il valore è falso ed è impostato si può fare quanto segue:

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

Una cosa che si può tenere a mente è che se il primo test fallisce, non ci vorrà nemmeno il controllo la prossima dichiarazione se è E (&&).

E per spiegare perché si ottiene effettivamente l'errore "La funzione deve essere una stringa", vedere this page. Riguarda la creazione di base di funzioni in PHP, quello che devi ricordare è che una funzione in PHP può contenere solo determinati tipi di caratteri, dove $ non è uno di questi. Poiché in PHP $ rappresenta una variabile.

Una funzione potrebbe essere simile a questa: _myFunction _myFunction123 myFunction e in molti altri modelli, ma mescolandola con caratteri come $ e% non funzionerà.

1

In PHP.js, $ _COOKIE è una funzione ;-)

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

Tecnicamente lo è, ma sta convertendo i contenuti dei cookie in una matrice, quindi in questo senso ciò che viene chiamato non è una funzione. –

2

Sarà $_COOKIE['CaptchaResponseValue'], non $_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

Si prega di spiegare come questo risponde alla domanda originale? – DaveP

Problemi correlati