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.
 

toni93

Utente Attivo
12 Nov 2009
38
0
0
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!
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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"); 
     } 
?>
 

neo996sps

Utente Attivo
31 Mag 2007
247
0
0
Trentino
Meglio ancora con uno switch:

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

simo10piu

Nuovo Utente
4 Mag 2009
24
0
0
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!!!
 

simo10piu

Nuovo Utente
4 Mag 2009
24
0
0
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.
 

simo10piu

Nuovo Utente
4 Mag 2009
24
0
0
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.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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????"
}
 

simo10piu

Nuovo Utente
4 Mag 2009
24
0
0
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.
 

simo10piu

Nuovo Utente
4 Mag 2009
24
0
0
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.
 

MarcoGrazia

Utente Attivo
15 Dic 2009
852
20
28
62
Udine
www.stilisticamente.com
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.
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
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.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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?
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
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
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
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.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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
Autore Titolo Forum Risposte Data
G header , nav e flex HTML e CSS 3
A Logo si sovrappone all'header HTML e CSS 1
I $header HTML e CSS 0
J Header location PHP 3
gandalf1959 [PHP] problema con l'utilizzo di Header PHP 3
M [PHP] header (location..) non funzionante dopo login PHP 3
M [HTML] Picture Tag non funziona in header-Element HTML e CSS 0
M [WordPress] Header responsive WordPress 5
M Header responsive Presentati al Forum 0
P [WordPress] header-post-title-class WordPress 7
R [HTML] sfondo header HTML e CSS 0
L [HTML] Flusso contenuti sotto la header HTML e CSS 9
Kolop [WordPress] [HTML] Problema header su mobile WordPress 4
W [XAMPP] File "header.php" non si vede su XAMPP PHP 0
giuseppe_123 [Magento] Creazione modulo statico sotto header Magento 0
G [PHP] Warning: Cannot modify header information - headers already sent by PHP 3
giancadeejay [PHP] Nome utente e Logout nell'header PHP 0
S [PHP] Non mi effettua header PHP 7
E [PHP] No 'Access-Control-Allow-Origin' header is present PHP 1
G php redirect header location pagina bianca PHP 0
gandalf1959 problema con header in area riservata PHP 4
alankanz Header(Location: mailto.... PHP 1
X Problema con header() include() e i siti di hosting PHP 1
enzonero problema immagini header WordPress 1
borgo italia header e meta non più funzionanti PHP 7
M Errore di header se metto include al posto delle istruzioni PHP 2
M Mettere un'immagine come header HTML e CSS 1
N Header fisso HTML e CSS 8
P header fisso HTML e CSS 3
K inserimento immagini tra header e pagine WordPress 4
L problema con la funzione header!!! AIUTO! PHP 24
P problema con header(Location....) PHP 11
F Effetto comparsa header Javascript 2
J Inserimento di un header, nav, footer php PHP 0
R Vertex Template (jommla2.5): cambiare colore dell'header Joomla 12
G [VENDO] Banner 125x125 Zona Alta Header - advhits.com (3000 Unici/Giorno) Vendere e Acquistare pubblicita' online 0
R banner in header wordpress WordPress 1
G html problema table scrollable con header fisso HTML e CSS 2
D Help per header in flash Flash 6
lara:) Header sito WordPress 2
S php problemi di funzione header usando la fuzione di jquery post PHP 4
blips Stampare header tabella in funzione di un campo db PHP 4
F Header location $_GET PHP 1
Emix Problema Header location... PHP 15
U distribuire elementi verticalmente tra header e footer HTML e CSS 7
N Header che scorre onclick... forse nulla di nuovo, ma... jQuery 6
H Warning: Cannot modify header information... PHP 6
Fabrizio Fiorita header e session funzionano perfettamente in locale ma creano problemi in remoto PHP 32
F PrestaShop header.tpl CMS (Content Management System) 0
V Header PHP 6

Discussioni simili