2012-08-30 19 views
6

Estoy armando un script que extrae a través de varias variables $ _GET que luego se utilizan dentro de la escritura a los efectos del cálculo de una cita, etc.

La pesadilla I' m having es simplemente poder determinar si alguno de ellos carece de valor, por ejemplo? var1 = 500 & var2 = & var3 = Sí, con var2 siendo la culpa allí.

Dependiendo de si todas las variables $ _GET tienen o no un valor, tomaré diferentes medidas en consecuencia.

he investigado y se le ocurrió esto como una opción:

<?php 
foreach($_GET as $name => $value) { 
    if ($value == "") { 
     $proceed = 0; 
    } else { 
     $proceed = 1; 
    } 
} 
?> 

estoy echo'ing un poco simple de texto usando $ procederá en el momento justo para realizar pruebas.

Esto no funciona, y lo he considerado isset y vacío pero creo que ambas opciones son inútiles en este caso. He leído en varias fuentes que los parámetros $ _GET que no tienen valores predeterminados son "', así que estoy confundido de por qué esto no funciona.

No puedo usar vacío aquí debido al hecho de que a veces los parámetros se ponen a 0.

no hace falta decir que he impreso el contenido de $ _GET y obtener resultados satisfactorios, por lo que los datos son todos buenos.

Cualquier ayuda muy apreciado.

+0

foreach con $ _GET -> mala idea. – Mahn

+4

@Mahn y por qué es eso? – MacMac

+0

['empty()'] (http://php.net/manual/en/function.empty.php) – PeeHaa

Respuesta

2

Missing parámetros don No aparece en $_GET. Decir la cadena de consulta es el siguiente:

index.php?page=5 

Si esperaba un parámetro id, no es automágicamente va a aparecer en $_GET. Solo tiene que verificar usando isset (y contra una cadena vacía) cuando los usa, no de manera preventiva. Eso simplemente no funciona.

0

¿Qué tal algo así?

<?php 
$expectedVars = array('var1', 'var2'); 

foreach($expectedVars as $key => $val) { 
    if($_GET[$val] == "") { 
     $proceed = 0; 
    } else { 
     $proceed = 1; 
    } 
} 
?> 
+0

que parece prometedor, ¡intentalo! – davetgreen

0

Si im leer su pregunta correctamente su buscar demasiado:

Compruebe el conjunto de parámetros Tobe y tienen un valor, sino también utilizar un foreach para rizar el $ _GET para mayor comodidad.

Quizás, haga una matriz de los params que esperaba y luego revise si también $ _GET contiene la misma clave.

<?php 
$allowed = array('var1','var2','var3'); 
$error = array(); 

foreach($allowed as $key) { 
    if(array_key_exists($key,$_GET)) { 
     //Validate, value must contain t least 1 len 
     if(strlen($_GET[$key]) >= 1){ 
      $$key = $_GET[$key]; 
     }else{ 
      //Assign an error if param has a blank value 
      $error[$key] = $key." parameter must contain a value"; 
     } 

    }else{ 
     //Assign an error if params not been passed to the url 
     $error[$key] = $key." parameter not set"; 
    } 
} 


if(!empty($error)){ 
    //A Params missing or has no value, dont continue 
    echo 'All parameters required!<br />'; 
    foreach($error as $value){ 
     echo '* '.$value.'<br />'; 
    } 
}else{ 
    //No errors do something 
    echo 'var1 is set: '.$var1; 
    echo 'var2 is set: '.$var2; 
    echo 'var3 is set: '.$var3; 
} 
?> 
+0

esencialmente quiero comprobar si alguno de los parámetros es una cadena vacía. La forma en que el formulario transfiere los datos garantiza que el parámetro esté en la cadena, sin importar si se completó o no: sin embargo, varios parámetros son obligatorios, por lo que para esos parámetros específicos me gustaría verificar si cualquier igual "". – davetgreen

0

Usted puede utilizar el código siguiente para definir y establecer una lista de variables que el valor pasado a través de $ _GET si existe, o una cadena vacía si bien no está presente o no tiene valor en la cadena de consulta:

$getvars = array(); 
$expectedvars = array(     // define variables to be set from $_GET 
    'var1', 'var2', 'var3', 'var4', 'var5', 
); 

foreach($_GET as $key => $value) {  // store all $_GET variables present 
    $getvars[$key] = $value;    // in an associative array 
} 

foreach($expectedvars as $variable) {   // now create all vaariables, 
    ${$variable} = (isset($getvars[$variable])) // if value was passed in url 
    ? $getvars[$variable]      // then set to that value 
    : '';          // otherwise set as empty string 
} 

Que creará las variables $ var1, $ var2, $ var3, $ var4 y $ var5 con los valores apropiados.

+0

enfoque interesante! ¡Intentaré esto también gracias! – davetgreen

Cuestiones relacionadas