PDA

Visualizza la versione completa : Perché php mi costringe ad usare elseif?


giannino1995
13-03-2016, 00:59
Se uso questo codice:

// verifico che tutti i campi siano stati compilati
if (! $name || ! $email || ! $phone || ! $message) {
$test = false;
echo "<p><strong>Tutti i campi del modulo sono obbligatori!</strong></p>";
} // verifico che il messaggio non sia troppo lungo
elseif (strlen ( $name ) >= 100 || strlen ( $email ) >= 100 || strlen ( $phone ) >= 100 || strlen ( $message ) >= 5000) {
$test = false;
echo "<p><strong>Il messaggio e' troppo lungo.</strong></p>";
} // verifico che il nome non contenga caratteri nocivi
elseif (! preg_match ( '/^[A-Za-z \'-]+$/i', $name )) {
$test = false;
echo "<p><strong>Il nome contiene caratteri non ammessi.</strong></p>";
} // verifico che l'indirizzo email sia valido
elseif (! filter_var ( $email, FILTER_VALIDATE_EMAIL )) {
$test = false;
echo "<p><strong>Indirizzo email non corretto.</strong></p>";
} // verifico che il numero di telefono sia un numero senza spazi
elseif (! is_numeric ( $phone )) {
$test = false;
echo "<p><strong>Numero di telefono non corretto.</strong></p>";
}
nessun problema. Se sostituisco l'ultimo elseif con else come qui di seguito:

// verifico che tutti i campi siano stati compilati
if (! $name || ! $email || ! $phone || ! $message) {
$test = false;
echo "<p><strong>Tutti i campi del modulo sono obbligatori!</strong></p>";
} // verifico che il messaggio non sia troppo lungo
elseif (strlen ( $name ) >= 100 || strlen ( $email ) >= 100 || strlen ( $phone ) >= 100 || strlen ( $message ) >= 5000) {
$test = false;
echo "<p><strong>Il messaggio e' troppo lungo.</strong></p>";
} // verifico che il nome non contenga caratteri nocivi
elseif (! preg_match ( '/^[A-Za-z \'-]+$/i', $name )) {
$test = false;
echo "<p><strong>Il nome contiene caratteri non ammessi.</strong></p>";
} // verifico che l'indirizzo email sia valido
elseif (! filter_var ( $email, FILTER_VALIDATE_EMAIL )) {
$test = false;
echo "<p><strong>Indirizzo email non corretto.</strong></p>";
} // verifico che il numero di telefono sia un numero senza spazi
else (! is_numeric ( $phone )) {
$test = false;
echo "<p><strong>Numero di telefono non corretto.</strong></p>";
}
ottengo questo errore:

Parse error: syntax error, unexpected '{' in ... on line 151
Ma come è possibile? :confused: Perché?!? :dhò: Non può essere!!! :(

badaze
13-03-2016, 01:12
Dopo la else hai sia { sia una sola istruzione. Ecco perche.

giannino1995
13-03-2016, 11:43
Dopo la else hai sia { sia una sola istruzione. Ecco perche.

Non capisco, a me sembra che le istruzioni siano 2 !?!?



$test = false; // prima istruzione
echo "<p><strong>Numero di telefono non corretto.</strong></p>"; // seconda istruzione


per poter usare else come dovrei correggere il codice?

badaze
13-03-2016, 12:24
Volevo dire che quando usi else, dopo hai sia { sia un'istruzione. Tu, dopo la else, hai una condizione che il parser analizza come un'istruzione seguita da {




if (condizione) {
codice
} else {
if (condizione) {
codice
}
}

o


if (condizione) {
codice
} elseif (condizione) {
codice
}





if (! $name || ! $email || ! $phone || ! $message) {
$test = false;
echo "<p><strong>Tutti i campi del modulo sono obbligatori!</strong></p>";
} else {
if (strlen ( $name ) >= 100 || strlen ( $email ) >= 100 || strlen ( $phone ) >= 100 || strlen ( $message ) >= 5000) {
$test = false;
echo "<p><strong>Il messaggio e' troppo lungo.</strong></p>";
} else {
if (! preg_match ( '/^[A-Za-z \'-]+$/i', $name )) {
$test = false;
echo "<p><strong>Il nome contiene caratteri non ammessi .</strong></p>";
} else {
if (! filter_var ( $email, FILTER_VALIDATE_EMAIL )) {
$test = false;
echo "<p><strong>Indirizzo email non corretto.</strong></p>";
} else {
if (! is_numeric ( $phone )) {
$test = false;
echo "<p><strong>Numero di telefono non corretto.</strong></p>";
}
}
}
}
}

giannino1995
13-03-2016, 19:57
quindi molto più semplicemente è una regola, cavolo che strana questa cosa! io pensavo di aver scritto qualcosa di errato nel codice

grazie mille badaze!

fermat
13-03-2016, 20:02
quindi molto più semplicemente è una regola, cavolo che strana questa cosa! io pensavo di aver scritto qualcosa di errato nel codice

grazie mille badaze!

in verità hai scritto una cosa errata.
l'else non richiede un ulteriore condizione, ma esegue le istruzioni nel caso non si verifichi nessuna condizione precedente.
questo vale per praticamente qualunqu linguaggio....

k.b
13-03-2016, 20:04
Beh non e' strano, non ha senso mettere una condizione dopo else.

giannino1995
13-03-2016, 21:06
in verità hai scritto una cosa errata.
l'else non richiede un ulteriore condizione, ma esegue le istruzioni nel caso non si verifichi nessuna condizione precedente.
questo vale per praticamente qualunqu linguaggio....

se provi il ciclo con else scritto sopra ti accorgerai che non funziona ma devi mettere elseif
a mio avviso con java funzionerebbero entrambi gli script

fermat
13-03-2016, 21:24
non hai capito cosa intendevo.
io intendevo che questo non si può fare:


else (CONDIZIONE) {
..........
}

else non vuole una condizione, in nessun linguaggio.
la sintassi corretta è:


else {
.......
}

e questo perchè else viene eseguito solo se non si è entrati in nessun if/elseif precedente.
e vale anche per java

se poi pensi sia il contrario, leggiti qualche guida di base....

Alhazred
13-03-2016, 22:29
...
se poi pensi sia il contrario, leggiti qualche guida di base....
Ma sei pazzo? Mai proporre di cercare una guida a giannino, ne nascerà una discussione chilometrica!
Ti propongo per il ban! :D

Loading