Newsgroup: it.comp.www.php
Titolo: IFe ELSE

Non riesco a concludere questo piccolo script , in pratica funziona tutto se
use e psw sono quelle indicate ,e anche se i 2 campi sono vuoti ... ma se
user e/o psw sono errati o ne manca uno mi si apre una pagina bianca .. Con
che indicazione lo concludo ??
Grazie ciao Marco
<?php
if ($login=="marco"){
if ($psw=="leo" ) {
header("Location: 
http://localhost/pagina1.htm
");
}
}
if ($login=="pippo"){
if ($psw=="pluto" ) {
header("Location: 
http://localhost/pagina2.htm
");
}
}
if ($login==""){
if ($psw==""){
print "Inserisci Login e PSW";
}
}
?>
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/


Scrivi meglio i tuoi script, così ti rendi conto da solo. L'errore è
ovvio. Tu hai scritto questo (basta solo una parte dello script...):
if ($login=="marco")
{
   if ($psw=="leo" )
   {
      header("Location: 
http://localhost/pagina1.htm
");
   }
}
Come puoi vedere, basta che $login sia uguale a 'marco' per entrare
nel primo blocco. Per entrare nel blocco interno, invece, bisogna che
anche la password sia giusta. Poiché questo non avviene, lo script
entra nel primo blocco ma NON nel secondo blocco interno al primo... e
non c'è nulla da stampare.
Di conseguenza, questa è la forma corretta:
if ($login=="marco" AND $psw=="leo" )
{
   header("Location: 
http://localhost/pagina1.htm
");
   exit;
}
Lo stesso vale per il resto dello script! Un'altra cosa: dopo gli
header devi aggiungere exit, così da essere sicuro che lo script si
fermi in quel punto ;)

 lo concludo ??
if ($login == 'marco' && $psw == 'leo') {
    header("Location: 
http://localhost/pagina1.htm
");
    exit();
} elseif ($login == 'pippo' && $psw == 'pluto') {
    header("Location: 
http://localhost/pagina2.htm
");
    exit();
} elseif ($login == '' || $psw == '') {
    echo 'Inserisci username e password';
} else {
    echo 'Username o password errate';
}
Perň se $login e $psw provenissero da un form sarebbe da
riscrivere meglio con qualche controllo in piů e utilizzando gli
array superglobal.
Vedi:
http://www.php.net/manual/en/language.variables.external.php
http://www.php.net/manual/en/language.variables.predefined.php
Ciao.
-- 
Federico

     exit();
D'oh! Ho dimenticato le parentesi della funzione :P


Intanto grazie ad entrambi per la risposta , e per i consigli .. ma da
neofita ( tanto ve ne sarete accorti) mi viene un altro dubbio , per far
funzionare lo script in locale devo scrivere : Location:
http://localhost/pagina1.htm
 , ma poi quando eventualmente lo sposterò in
rete dovreo cambiare il percorso in 
http://www.miosito.it
 ?? ( finchè ne
devo cambiare 2 non c'è problema ma se avessi da cambiarne 100 sarebbe un
lavorone ) sicuramente esisterà una scappatoia vero ? qual'è?
Grazie e ciao


 qual'Ã¨?
Potresti usare l'array $_SERVER.In un file di configurazione
(config.php) definisci una costante, per esempio di nome URL,
così:
<?php
define('URL', 'http://'.$_SERVER['HTTP_HOST'].'/');
?>
[vedi 
http://www.php.net/define
]
Dopodiché, includendo il file config.php avrai a disposizione la
costante URL che in locale varrà '
http://localhost/
', mentre on
line '
http://www.miosito.it/
'.
In questo modo puoi scrivere:
<?php
require 'config.php';
...
header('Location: '.URL.'pagina1.htm');
...
?>
Per vedere tutti gli altri valori dell'array $_SERVER puoi fare:
<pre><?php print_r($_SERVER); ?></pre>
Vedi anche
http://www.php.net/manual/en/reserved.variables.php#reserved.variables.server
-- 
Federico

 Di conseguenza, questa ? la forma corretta:
Mah, non gli cambia molto la sostanza.
Il punto non è che c'è una maniera corretta o meno di scrivere le 
condizioni ma che lui ha previsto di dover scrivere qualcosa solo in tre 
casi specifici, poi ne prova un quarto e chiaramente non gli stampa 
niente. 
Più che nelle condizioni direi che il problema è di concetto.
P.S.
Occhio al charset entrambi.

 Più che nelle condizioni direi che il problema è di concetto.
ma optare per uno switch/case che esce con un default?

 ma optare per uno switch/case che esce con un default?
Meglio, imho, proprio per il default.

 ha scritto nel messaggio 
news:1185019907.9...@n60g2000hse.googlegroups.com...






Mi viene un altrodubbio , ma il mio login non può essere superato facilmente 
digitando nella barra degli indirizzi .. www.miosito/pagina1.htm ?? se così 
fosse come si affronta il problema ?
Grazie Ciao Marco

 }
E` effettivamente la forma corretta, ma vorrei solo raccomandare di stare 
attenti alla differenza tra "&&" e "and". Il secondo ha priorita` piu` 
bassa (inferiore anche a "||", il che puo` portare a idosincrasie):
http://www.php.net/manual/en/language.operators.php
Nel dubbio, conviene sempre racchiudere tra parentesi le espressioni.
Bye.

 se così fosse come si affronta il problema ? 
Inserendo in ogni pagina di cui vuoi controllare l'accesso un
controllo che verifichi se l'utente si è autenticato (e quindi
chi è) oppure no. Per fare ciò si possono usare le sessioni.
I passi da seguire, a grandissime linee, sono:
- Attraverso la pagina del login invii la coppia
username/password a uno script per controllare se corrisponde a
una di quelle corrispondenti a un utente (utenti memorizzati in
un file, in una tabella di un database o dove vuoi tu). Se tale
coppia corrisponde a un utente salvi in sessione un suo
identificatore univoco (per esempio un id numerico, o quello che
vuoi tu), altrimenti agisci secondo i casi (coppia
username/password non valida, eccetera...).
- In ogni pagina che vuoi rendere accessibile solo dopo
l'autenticazione includi uno script (per esempio controllo.php)
che controlla se in sessione esiste un parametro di
identificazione. Se esiste l'utente si è autenticato e se tale
utente è abilitato ad accedere a tale pagina (da verificare
attraverso una mappatura utente->pagina), allora gliela mostri.
Altrimenti, se è autenticato, ma non ha il permesso di vedere
quella pagina lo rimandi a una pagina in cui gli spieghi la
cosa. Se invece non è autenticato lo rimandi alla pagina del
login.
Per le sessioni puoi vedere 
http://www.php.net/session
.
Ciao.
-- 
Federico