Header dentro ad if ed elseif?

simo10piu

Nuovo Utente
4 Mag 2009
24
0
0
Ciao a tutti, mi scuso in anticipo per la probabile banalità della domanda.
E' da poco che mi muovo in php, il mio top è stato inserire un formail nel sito....
Ho questa domanda: vorrei inserire un form dove l'utente inserirà un numero di errori, a seconda del numero di errori lo devo reindirizzare ad una specifica pagina. Le fasce di errori sono 5.
Volevo chiedere se per indirizzare posso usare header tipo:
<?php
$errori=$_POST['errori'];
if ($errori=0)
{header("location:test/da0.php")};
elseif ($errori>=1)
{header("location:da1a10.php")};
?>
E' una boiata? :D

Che metodo potrei/dovrei usare in alternativa.
Grazie in anticipo.
Simone.
 
a me sembra corretto, visto che sei nuovo del php ti consiglierei di scrivere in un modo più "comodo" che rende il codice più leggibile e ti permette di fare meno errori di sintassi tipo:

PHP:
<?php
     $errori=$_POST['errori'];
     if ($errori=0) {
          header("Location: test/da0.php");  //QUI CI VA IL ;
     };    //QUESTO ; NON TI DA ERRORE MA E' INUTILE (poiche significa istruzione vuota)
     elseif ($errori>=1) {
          header("Location: da1a10.php");
     }
?>

occhio ai punto e virgola!
 
ciao,
o ancora più semplicemente visto che hai solo due alterntive

PHP:
<?php 
     $errori=$_POST['errori']; 
     if ($errori=0) { 
          header("Location: test/da0.php");
     }else{ 
          header("Location: da1a10.php"); 
     } 
?>
 
Meglio ancora con uno switch:

PHP:
switch($nome_della_variabile)
{
case 1: ISTRUZIONI; break;
case 2: ISTRUZIONI; break;
...
case n: ISTRUZIONI; break;
}
 
a me sembra corretto, visto che sei nuovo del php ti consiglierei di scrivere in un modo più "comodo" che rende il codice più leggibile e ti permette di fare meno errori di sintassi tipo:

PHP:
<?php
     $errori=$_POST['errori'];
     if ($errori=0) {
          header("Location: test/da0.php");  //QUI CI VA IL ;
     };    //QUESTO ; NON TI DA ERRORE MA E' INUTILE (poiche significa istruzione vuota)
     elseif ($errori>=1) {
          header("Location: da1a10.php");
     }
?>

occhio ai punto e virgola!

Grazie mille per i consigli riguardo al metodo di scrittura iniziale!
Scusa il ritardo nella risposta!! Ottimo ci provo subito!
Grazie ciao!
Sto php è spettacolare!!!
 
ciao,
o ancora più semplicemente visto che hai solo due alterntive

PHP:
<?php 
     $errori=$_POST['errori']; 
     if ($errori=0) { 
          header("Location: test/da0.php");
     }else{ 
          header("Location: da1a10.php"); 
     } 
?>

Grazie mille borgo. Ho postato solo 2 alternative ma in totale saranno 6.
Ciao grazie.
Scusate il ritardo.
 
Meglio ancora con uno switch:

PHP:
switch($nome_della_variabile)
{
case 1: ISTRUZIONI; break;
case 2: ISTRUZIONI; break;
...
case n: ISTRUZIONI; break;
}

Ciao neo e grazie, ieri poi girando qua e là in rete ho scoperto questo switch e ci ho provato....ma ho problemi ad inserire case per numeri "<="... cioè ho scritto così:
<?php
$errori=$_POST['errori'];
switch ($errori) {
case '0':
header ("location:risultatotest/da0.php");
break;
case '<=10':
header("location:risultatotest/da1a10.php");
break;
case '<=30':
header("location:risultatotest/da11a30.php");
break;
case '<=50':
header("location:risultatotest/da31a50.php");
break;
case '<=100':
header("location:risultatotest/da51a100.php");
break;
case '<=150':
header("location:risultatotest/da101a150.php");
break;
}
?>
Se nel form inserisco 0 mi manda alla pagina giusta ma per gli altri che hanno istruzione " >o< e = " ad un numero non và in nessuna pagina......
Sai il motivo?
Grazie mille, ciao e scusate il ritardo nella risposta.
 
ciao
a che ne so io il tuo switch è sbagliato.
lo swuitch (contrariamentie all'if) non può contenere il magiore/minore

<?php
$errori=$_POST['errori'];
switch ($errori) {
case '0':
header ("location:risultatotest/da0.php");
break;
case '10':
header("location:risultatotest/da1a10.php");
ecc.....
in questo caso devi usare l'eleseif

PHP:
if($errori ==0){
     header ("location:risultatotest/da0.php");
}elseif( $errori > 0 && $errori <=10){
     header("location:risultatotest/da1a10.php");
}elseif($errori > 10 && $errori <=30){
     header("location:risultatotest/da11a30.php");
}elseif(....){
//eccetera eccetera.....

}else{//orrore
     echo "come hai fatto a fare 151 errori su 150 domande????"
}
 
ciao
a che ne so io il tuo switch è sbagliato.
lo swuitch (contrariamentie all'if) non può contenere il magiore/minore

<?php
$errori=$_POST['errori'];
switch ($errori) {
case '0':
header ("location:risultatotest/da0.php");
break;
case '10':
header("location:risultatotest/da1a10.php");
ecc.....
in questo caso devi usare l'eleseif

PHP:
if($errori ==0){
     header ("location:risultatotest/da0.php");
}elseif( $errori > 0 && $errori <=10){
     header("location:risultatotest/da1a10.php");
}elseif($errori > 10 && $errori <=30){
     header("location:risultatotest/da11a30.php");
}elseif(....){
//eccetera eccetera.....

}else{//orrore
     echo "come hai fatto a fare 151 errori su 150 domande????"
}

Ciao borgo ed ancora grazie.
Ci provo subito.....
ahahhahah forte l'echo finale!!!
Faccio una prova ciao.
 
ciao
a che ne so io il tuo switch è sbagliato.
lo swuitch (contrariamentie all'if) non può contenere il magiore/minore

<?php
$errori=$_POST['errori'];
switch ($errori) {
case '0':
header ("location:risultatotest/da0.php");
break;
case '10':
header("location:risultatotest/da1a10.php");
ecc.....
in questo caso devi usare l'eleseif

PHP:
if($errori ==0){
     header ("location:risultatotest/da0.php");
}elseif( $errori > 0 && $errori <=10){
     header("location:risultatotest/da1a10.php");
}elseif($errori > 10 && $errori <=30){
     header("location:risultatotest/da11a30.php");
}elseif(....){
//eccetera eccetera.....

}else{//orrore
     echo "come hai fatto a fare 151 errori su 150 domande????"
}

Grande Borgo e grazie mille funziona!!!!!!!!!!!!!!!!!!!
Ma quant'è bello questo php??????? Da autodidatta è un pò dura però.....:dipser:
Credo che per errori superiori ai 151 metterò una chiamata diretta alle forze dell'ordine perchè è sicurmente una persona moooooooolto pericolosa!!!:D Cè un header anche per questo?????:D
Ciao borgo grazie buona serata alla prossima.
 
Ciao neo e grazie, ieri poi girando qua e là in rete ho scoperto questo switch e ci ho provato....ma ho problemi ad inserire case per numeri "<="... cioè ho scritto così:
<?php
$errori=$_POST['errori'];
switch ($errori) {
case '0':
header ("location:risultatotest/da0.php");
break;
case '<=10':
header("location:risultatotest/da1a10.php");
break;
case '<=30':
header("location:risultatotest/da11a30.php");
break;
case '<=50':
header("location:risultatotest/da31a50.php");
break;
case '<=100':
header("location:risultatotest/da51a100.php");
break;
case '<=150':
header("location:risultatotest/da101a150.php");
break;
}
?>
Se nel form inserisco 0 mi manda alla pagina giusta ma per gli altri che hanno istruzione " >o< e = " ad un numero non và in nessuna pagina......
Sai il motivo?
Grazie mille, ciao e scusate il ritardo nella risposta.
A dire la verità si può a leggere il manuale online del PHP, negli esempi c'è qualcosa del genere, ma non l'ho mai provato:
PHP:
$errori=$_POST['errori'];
switch ($errori) {
case '0':
header ("location:risultatotest/da0.php");
break;
case '$errori<=10':
header("location:risultatotest/da1a10.php");
break;
case '$errori<=30':
header("location:risultatotest/da11a30.php");
break;
case '$errori<=50':
header("location:risultatotest/da31a50.php");
break;
case '$errori<=100':
header("location:risultatotest/da51a100.php");
break;
case '$errori<=150':
header("location:risultatotest/da101a150.php");
break;
}
ma devi ripetere la variabile $errori ogni volta, poco male se funziona va bene.
Ad ogni buon conto usare switch o elseif è analogo, l'importante è l'eleganza dello script, ovvero se quanto da te realizzato è solido.
Per solido intendo a prova di errore.
Solitamente nelle lunghe serie di elseif è facile sbagliare dopo un po' che si scrivono cose sempre uguali, magari riportandole con un copia e incolla per modificarle subito dopo.
La strada migliore la devi trovare da te, sicuramente ci vuole molto tempo per dicedere da quale parte andare :)
Io avrei usato questo costrutto, simile a quello di Borgo ma che mi permette di modificare facilmente la pagina da mostrare se un domani cambiassi idee e inoltre:
PHP:
$pagina = 'da0.php'; // Zero eRori, beati loro!
if(( $errori > 0) && ($errori <=10)){
     $pagina = 'da1a10.php';
}elseif(($errori > 10) && ($errori <=30)){
     $pagina = 'da11a30.php';
}elseif(....){
//eccetera eccetera.....
}else{//orrore
     echo "come hai fatto a fare 151 errori su 150 domande????"
     $errore = 'bad_page.php';
}
// Invia alla pagina!
header ("location: risultatotest/$pagina");
La prima volta inserisci una pagina predefinita, per esempio quella che da zero errori, o una pagina che vuoi tu, serve a eliminare un ciclo, tanto comunque una pagina la devi pur sempre mostrare.
Inoltre nei cicli uso la costruzione a dopie parentesi, in questo modo se non viene risolta la prima equazione passa oltre senza stare a risolvere anche la seconda e fare il confronto, meno cicli = meno tempo.
Alla fine del ciclo la variabile $pagina conterrà comunque il nome di una pagina da mostrare, ma avrai scritto meno e fatto un ciclo in meno che non è poco per il povero server.
 
MarcoGrazia, credo che tu intendessi una cosa di questo tipo:
PHP:
<?php
switch(true)
{
	case $errori >= 10:
		// istruzioni
		break;
	case $errori >= 30:
		// istruzioni
		break;
	case $errori >= 60;
		// istruzioni
		break;
	default:
		// istruzioni
}
?>
A funzionare funziona, ma non è logicamente molto corretto.
 
ciao
domada per alex, nel tuo script (o modificato per capirsi //istruzioni)
<?php
switch(true)
{
case $errori >= 10:
// istruzione 1
break;
case $errori >= 30:
// istruzione 2
break;
case $errori >= 60;
// istruzione 3
break;
default:
// istruzioni
}
?>

se $errori è 35 quale istruzione esegue?
 
Incredibile, borgo è riuscito a trovare una falla in uno script che ho scritto! :D
Ora che ci penso se è 35 esegue l'istruzione 1, perché comunque e superiore di dieci. Nessun problema, basta cambiare le condizioni in modo che controllino se è maggiore di 10 e minore di 35 :p
 
Scusa, non avevo letto il tuo messaggio. Perché il costrutto switch nasce non per testare una serie di espressioni, ma per velocizzare il controllo del valore di una variabile. Usarlo con delle espressioni (x è maggiore di y) è improprio, a questo punto è meglio elseif.
 
ciao alex consoaliti, anche nel manuale php qualcuno fa lo stesso tuo errore (orrore)

varnavruz at gmail dot com
04-Sep-2009 09:34
You also may also use that for comparison. For example, we measure the script execution time and generate a comment about it. $totaltime is number of seconds script executes.

PHP:
<?php
switch ($totaltime) {
case ($totaltime < 1):
echo "That was fast!";
break;
case ($totaltime > 1)://e per $totaltime di 100 secondi?
echo "Not fast!";
break;
case ($totaltime > 10):
echo "That's slooooow";
break;
}
?>

comunque nel manuale (parte ufficiale) non fa cenno a tale possibilità
 

Discussioni simili