2009-10-23 17 views
34

he añadido unas líneas siguientes en la parte superior de mi código PHP, pero se da un error:PHP Error: Nombre de la función debe ser una cadena

Fatal error: Nombre de la función debe ser una cadena de /home/reg.php en la línea 2

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

Incluso probé: $ _COOKIE ("CaptchaResponseValue"). La cookie se configuró con éxito y está disponible. ¿Por qué está dando error cuando estoy usando $ _COOKIE?

Respuesta

93

Cabe $_COOKIE['name'], no $_COOKIE('name')

$ _COOKIE es una matriz, no una función.

5

Pruebe llaves cuadradas con su $_COOKIE, no paréntesis. De esta manera:

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

También corrigí un poco su ubicación.

2

Si quieres comprobar si se ha establecido la galleta ... usar

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

@anonymous Por qué el DV ? –

+1

Debido a cómo funciona el sistema de votación. Las personas votaron por respuestas que consideran más relevantes y más útiles para la pregunta. Y la gente rechaza las respuestas que les parecen menos interesantes. Imagino que es por eso que fueron votados negativamente. –

+0

@Filip Ekberg Eso es esclarecedor ... sería genial si estas almas anónimas dejaran un comentario sobre por qué ... pero supongo que no es una práctica muy extendida :) –

17

El uso de paréntesis en un lenguaje de programación o un lenguaje de script por lo general significa que se trata de una función.

Sin embargo, $_COOKIE en php no es una función, es un Array. Para acceder a los datos en matrices, utiliza llaves cuadradas ('[' y ']') que simbolizan de qué índice obtener los datos. Así que al hacer $_COOKIE['test'] básicamente dice: "Dame los datos del índice 'prueba'.

Ahora, en tu caso, tienes dos posibilidades: (1) o quieres ver si es falso-- mirando dentro de la cookie o (2) ver si es ni siquiera existe.

Para ello, se utiliza la función isset que básicamente comprueba si la variable se establece o no.

Ejemplo

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

Y si usted quiere comprobar si el valor es falso y se establece que puede hacer lo siguiente:

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

Una cosa que se puede tener en cuenta es que si falla la primera prueba, que incluso no molesta comprobación la siguiente declaración si es Y (&&).

Y para explicar por qué realmente obtienes el error "La función debe ser una cadena", mira this page. Se trata de la creación básica de funciones en PHP, lo que debes recordar es que una función en PHP solo puede contener ciertos tipos de caracteres, donde $ no es uno de estos. Dado que en PHP $ representa una variable.

Una función podría verse así: _myFunction _myFunction123 myFunction y en muchos otros patrones también, pero mezclarlo con caracteres como $ y% no funcionará.

1

En PHP.js, $ _COOKIE es una función ;-)

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; 
} 

través http://phpjs.org/functions/setcookie:509

+0

Técnicamente lo es, pero está convirtiendo el contenido de las cookies en una matriz, por lo que a ese respecto, lo que se llama no es una función. –

2

Será $_COOKIE['CaptchaResponseValue'], no $_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

Por favor explique cómo responde esto a la pregunta original? – DaveP

Cuestiones relacionadas