2012-08-30 15 views
6

Sto mettendo insieme uno script che tira attraverso diversi $ _GET variabili che vengono poi utilizzati all'interno dello script ai fini del calcolo di un preventivo, ecc

L'incubo I' m avere è semplicemente in grado di determinare se qualcuno di essi non ha un valore, ad esempio? var1 = 500 & var2 = & var3 = Sì con var2 che rappresenta il liceo.

A seconda che tutte le variabili $ _GET abbiano o meno un valore, eseguirò di conseguenza azioni diverse.

ho studiato e si avvicinò con questo come un'opzione:

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

sto echo'ing un semplice po 'di testo utilizzando $ procedere al momento giusto a scopo di test.

Questo non funziona, e ho considerato isset e vuoto ma credo che entrambe le opzioni sono inutili in questo caso. Ho letto in una serie di fonti che i parametri $ _GET a cui non viene assegnato il valore predefinito "" quindi sono perplesso sul motivo per cui questo non funziona.

Non riesco a utilizzare vuoto qui a causa del fatto che a volte i parametri verranno impostati a 0.

Inutile dire che ho stampato il contenuto di $ _GET e ottenere risultati soddisfacenti, per cui i dati sono tutti buoni.

Qualsiasi aiuto molto apprezzato

+0

foreach con $ _GET -> cattiva idea. – Mahn

+4

@ Mahn e perché? – MacMac

+0

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

risposta

2

Mancano i parametri don apparire in $_GET. Dire la querystring è simile al seguente:

index.php?page=5 

Se vi aspettavate un parametro id, non è automagicamente intenzione di presentarsi in $_GET. Devi solo controllare usando isset (e contro una stringa vuota) quando li usi, non in modo preventivo. Questo non funziona.

0

Che ne dici di qualcosa del genere?

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

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

che sembra promettente, ci proveremo! – davetgreen

0

Se im leggendo la tua domanda correttamente il guardare troppo:

Controllare il parametro tobe set e hanno un valore, ma anche usare un foreach per avvolgere il $ _GET per convenienza.

Forse, crea un array di parametri che ti aspetti, quindi esegui il loop e verifica se $ _GET contiene la stessa chiave.

<?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

essenzialmente voglio controllare se uno qualsiasi dei parametri è una stringa vuota. Il modo in cui il modulo trasmette i dati garantisce che il parametro sia nella stringa, indipendentemente dal fatto che sia stato compilato o meno: tuttavia alcuni parametri sono obbligatori, quindi per quei parametri specifici vorrei verificare se qualsiasi uguale "". – davetgreen

0

È possibile utilizzare il seguente codice per definire e impostare un elenco di variabili al valore passato tramite $ _GET se esiste, o una stringa vuota se non è presente o non ha alcun valore nella querystring:

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

Che creerà le variabili $ var1, $ var2, $ var3, $ var4 e $ var5 con i valori appropriati.

+0

approccio interessante! proveremo anche questo grazie! – davetgreen

Problemi correlati