2010-08-09 13 views
10

Aquí hay un código php

if(isset($_GET['id'])) { 
    //do something 
} else { 
    redirect('index.php'); //redirect is a function 
} 

Ahora bien, si se establece Identificación del (ex: index.php? Id = 12) a continuación, la acción se realiza pero si no se establece id (ej: index.php? id =) esto muestra un error, ¿cómo superar esto ... ??

Cómo determinar la identificación es un número entero y no es vacío y luego realizar la acción específica ....

Editado

Gracias a todos por sus respuestas, pero todavía estoy consiguiendo ese error ...

if(isset($_GET['id'])) { // I implemented all these codes but still.... 
    $user= User::find_by_id($_GET['id']); 
    // Database Classes Fetches user info from database 
} 
else { 
    redirect('index.php'); //redirect function 
} 

Si la identificación es 1 o mayor que 1, la secuencia de comandos se ejecuta perfectamente. (Index.php? Id = 1)

Pero ID i Identificación de conjunto como señalando consigo un index.php i..e error? Id =

El código debe redirigir automáticamente al usuario a la página index.php en lugar de mostrar un error .....

ERROR: Error en la consulta de la base de datos: tiene un error en la sintaxis SQL; compruebe el manual que corresponde a su versión del servidor MySQL para el sintaxis derecho al uso cerca de 'LIMIT 1' at line 1

+0

¿Qué sucede cuando no se establece un id var en la cadena de consulta? – kevtrout

+0

En entero, ¿te refieres al tipo de datos de PHP o te refieres a una secuencia de dígitos? – Gordon

+0

Si mira el código, no es el tipo de datos ya que @_GET siempre devuelve una cadena. – ThoKra

Respuesta

25

Usted debe verificar tanto la puesta a punto de estado y el contenido:

if (isset($_GET['id']) && !empty($_GET['id'])) 
    // .... 

Tenga en cuenta que debe no utilice el valor simplemente tal como es y trabaje con él. Debe asegurarse de que solo contenga los valores que espera. Para comprobar si un número entero, e incluso mejor trabajar con un número entero de que el, hacer algo así:

$id = (isset($_GET['id']) && is_numeric($_GET['id'])) ? intval($_GET['id']) : 0; 

if ($id != 0) 
    // id is an int != 0 
else 
    redirect('index.php'); 
+1

is_int nunca será verdadero, desde php.net: 'Nota: Para probar si una variable es un número o una cadena numérica (como la entrada de formulario, que siempre es una cadena), debe usar is_numeric(). ' – ThoKra

+0

Pero si mantengo url como (index.php? Id =) muestra un error ....., debería redireccionar a index.php –

+0

@Terw: Oops, eso es lo que sucede, cuando trato de recordar alguna función No uso a menudo ... ¡Gracias! – poke

0
if (!empty($_GET['id']) && filter_var($_GET['id'], FILTER_VALIDATE_INT)) 

o

if (!empty($_GET['id']) && ctype_digit($_GET['id'])) 
+2

Tenga en cuenta que el entero '0' y la cadena' "0" 'se consideran" vacías "por PHP. –

+0

@Daniel: sí, me acordé de que mientras escribía la respuesta, pero apuesto a que se refiere a una clave principal que definitivamente es un número entero positivo – zerkms

+0

, es posible que una clave principal sea cero o negativa. – timdev

2

¿Qué te dice el error?

Pero esto sería comprobar si está configurado, y si es un entero

if(isset($_GET['id']) && ctype_digit($_GET['id']) && intval($_GET['id']) > 0) 

is_numeric @ php.net

o echa un vistazo ctype_digit

+1

supongamos? Id = 1.5 – zerkms

+1

'is_numeric' realmente no lo corta. –

+0

Vinculado a la función ctype_digit que simplemente verificaría si hay enteros, actualizó el ejemplo para usar este – ThoKra

0

How to determine id is an integer and it's not empty and then perform the specific action....

if (!empty($_GET['id']) && (intval($_GET['id']) == $_GET['id'])) { 
    //do something 
} else { 
    redirect('index.php'); //redirect is a function 
} 

El anterior puede ser la mejor solución, pero debe trabajar para Que necesitas. No permitirá que el ID sea 0 y requerirá que sea un número entero.

+0

No funcionará como lo ve en php.net, el @_GEt nunca devuelve enteros (si usted mismo no lo especifica) devuelve una cadena. – ThoKra

+0

Gracias por señalar eso. Corregí el código para que funcione para lo que necesita. – Joseph

+0

Lamentablemente no funcionó para lo que necesito ..., debería ser simple si id = (espacio) o id = 0 debería redirigir automáticamente al usuario al índice.página php sin ir más lejos ..., pero no está funcionando ... :( –

0

Bueno ... Si va a su puesta en marcha como una variable de tipo entero, entonces se podría hacer también esto:

if($_GET['id'] && gettype($_GET['id']) == 'integer'){ 
    #do something 
}else{ 
    #do something else 
} 
+0

Esto no funcionará, ya que 'gettype' siempre informará un tipo de cadena, porque los parámetros GET generalmente no se escriben. Además, al llamar a '$ _GET ['id']' aparecerá una advertencia de índice cuando no esté configurado. – poke

0
if(isset($_GET['id']) && ctype_digit($_GET['id']) && is_numeric($_GET['id']) && $_GET['id']>0) { 
    $user= User::find_by_id($_GET['id']); 
    } 
else { 
    redirect('index.php'); //redirect function 
    } 

probar esto y el código de píldora llena sus necesidades.

0

Parece que solo está teniendo un problema con el Id. Arrojando un verdadero cuando quiere comprobar si está configurado. Eso es porque está configurado, pero no establecido en un valor que le gustaría usar.

Asumo los identificadores de usuario tienen que ser> 0 por lo que acaba de hacer esta

if (isset($_GET['id']) && $_GET['id'] > 0) { 
    $user= User::find_by_id($_GET['id']); 
} else { 
    redirect('index.php'); 
} 

también estás Prolly mejor limpieza de la identificación antes de procesarlo de modo

$userID = isset($_GET['id']) && $_GET['id'] > 0 ? (int) $_GET['id'] : 0; 

if ($userID) { 
    $user= User::find_by_id($userID); 
} else { 
    redirect('index.php'); 
} 

Hay una gran cantidad de maneras de hacerlo, personalmente prefiero esto. Hace que tu código se vea un poco más limpio.

0

Deberá verificar varias veces para cada caso posible: ¿qué sucede si la identificación no está establecida o está vacía? ¿Qué pasa si se establece id pero no es un dígito? ¿Qué pasa si la clave 'id' no existe en absoluto en la solicitud GET?

Tuve una situación similar. Estaba enviando dos vars con GET, un dígito: 'id' y otro con una cadena que era un nombre: 'estado' ... Lo resolví comprobando todas las condiciones posibles.

Cuestiones relacionadas