Newsgroup: it.comp.www.php
Titolo: Ancora problemi di interazione php-html

Salve a tutti.
Alla fine per me il problema è sempre quello: come integrare php e html 
insieme! (quest'ultimo mi è proprio ostico!!!), ma finora questo 
newsgroup è stato la mia salvezza! :)
Vorrei realizzare, nel mio script, il controllo del login, e se l'utente 
non è loggato, visualizzare il messaggio "Devi effettuare il login" dove 
la parola "login" è un link alla pagina di index.htm.
Al solito posto lo stralcio di codice:
[...]
if(!UserLogged())
         echo"Errore: Devi effettuare il ";?>
         <html>
         <a href="index.htm">LOGIN</a>
         </html>
         <?php
         echo " per poter accedere";
    if(UserLogged()){
    		top();
         //recupero informazioni dal form
		$password=$_POST['pass'];
		[...]
Non mi piace dover ripetere l'if dopo la sezione di html (se scrivessi 
solo else[...] non me lo accetterebbe in quanto mancherebbe il relativo 
if, presente solo nella prima sezione).
Come fare una cosa del genere?
Grazie mille!!



mmh..
se continui a scrivere codice del genere otterrai sempre piu' confusione..
io ti consiglierei di leggere qualche libro di software engineering con 
PHP e software design (puoi trovare in rete molte informazioni)..
comunque sicuramente in mattinata qualche altro frequentante del NG ti 
aiutera' a risolvere questo specifico problema..
-- 
www.iuz-lab.info

 
Ma perchè non semplifichi le cose? Per ogni pagina che deve essere 
protetta da user/password, controlli all'inizio se l'utente si è loggato 
(nel tuo stralcio di codice non capisco perchè hai in _POST la password 
se l'utente è già loggato...); se il controllo è positivo procedi con la 
pagina altrimenti fai un redirect alla pagina di login (puoi passare 
alla pagina un parametro per visualizzare un mex personalizzato in base 
all'azione eseguita)
paginaxxx.php
if UtenteNonLoggato then
	redirect pagina di login
	exit;
endif
##visualizzazione pagina protetta
	Francesco
 

 newsgroup è stato la mia salvezza! :)
Un consiglio "en passant" (sempre che si scriva cosi` :)
Visto che hai problemi a integrarli... NON integrarli.
Usa un sistema di templating come smarty, e separa totalmente PHP da HTML, 
oppure (consiglio mio) prendi un framework come Zend Framework e segui 
qualche tutorial (ce ne sono ormai a centinaia).
Bye.

Alessandro Pellizzari ha scritto:

Non so se è efficiente come soluzione :D, ma darò un'occhiata..
Il redirect è stato oggetto di precedenti discussioni, anche aperte da me.
paginaxxx.php
if UtenteNonLoggato then
     redirect pagina di login
     exit;
endif
##visualizzazione pagina protetta
Come intendi scrivere la riga di redirect?
Io conosco 2 modi:
- Con la funzione header() ma in questo modo l'utente non 
visualizzerebbe il messaggio "Devi loggarti prima di accedere", ma si 
ritroverebbe direttamente alla pagina di login (ed ho a che fare con 
utenti poco intelligenti per capire il perchè :))
- Mediante il meta-tag refresh, ma con questo sistema, il redirect viene 
SEMPRE eseguito.
Tu come realizzi un redirect automatico che visualizzi un messaggio 
all'utente e poi lo reindirizzi verso la pagina di login?
Ringrazio tutti!
A presto

 A presto
Come ti avevo detto, aggiungendo un parametro :-)
paginaxxx.php
if(UtenteNonLoggato()) {
   header("Location: 
http://sito.it/login.php?mex=1
");
   exit;
}
In login.php
$get_mex = (isset($_GET['mex']) ? $_GET['mex']: 0);
switch ($get_mex) {
   case 1:
     $label ='Per accedere, ti devi autenticare';
     break;
   case 2:
     $label ='Utente/pwd errata';
     break;
   default:
     $label ='';
     break;
}
###Eventuale mex di errore
<p class="errore"><?PHP echo $label; ?></p>
####Resto della pagina di LOGIN (form etc...)
	Francesco
 

 Come intendi scrivere la riga di redirect?
Il redirect con una pagina intermedia (quello col meta, per capirci) e` 
fastidioso.
Segui quello che ti dice Francesco e passa semplicemente un messaggio alla 
pagina successiva, che visualizzerai in alto.
Bye.

 if, presente solo nella prima sezione).
Non sono sicuro di aver capito che intendi, ma dato che stai usando due 
strutture if con condizioni (UserLogged()) e (!UserLogged()) dovresti 
proprio usarlo il ramo else, mai caso fu più indicato di questo.

Andrea D'Amore ha scritto:

Appunto per questo...
Se nel codice che ho scritto aggiungo il ramo else, cioè precisamente 
scrivo:
[...]
<html>
<a href="index.htm">LOGIN</a>
</html>
<?php
       echo " per poter accedere";
    else{
	[istruzioni ramo else..]
[...]
l'interprete mi risponde che quell'ELSEè "unexpected", suppongo perchè 
il relativo IF è presente nel blocco php precedente...
Perciò ho inserito la condizione negata!.. So mica scemo a questo punto? :D
Si, è l'HTML ad essermi ostico all'ennesima potenza :D
Scrivo del testo prima e dopo il tag per ottenere a video la scritta
"Devi effettuare il login per poter accedere" in cui la parola "login" è 
il link ipertestuale alla pagina di login.
...E' l'unico modo che conosco per farlo, e l'esistenza di modi 
decisamente migliori era anche l'oggetto della mia richiesta qui sul ng :)
Grazie cmq delle risposte!
Buona serata!

io sono dell'idea che fino a quando non si ha padronanza con html e
css il php non debba neanche essere sfiorato.

 il link ipertestuale alla pagina di login.
Ok. ma scrivilo _dentro_ i tag <body>.

 
Sarà abitudine/gusti personali ma io una struttura del genere non la 
digerisco nemmeno con il fernet!
Non è più chiaro generare il messaggio fuori dall'HTML e poi visualizzarlo??
<?PHP
  if (!isLogged()) {
    $mex = 'Non sei autenticato, esegui il <a href="">LOGIN</a>';
  } else {
    $mex = 'Ciao, Utente.';
?>
<html>
  <body>
   <p><?PHP echo $mex; ?></p>
  </body>
</html>
Ripeto, gusti personali!
	Francesco

Francesco F ha scritto:

Sui gusti personali non mi pronuncio, ma in entrambi i casi, è una 
pagina PHP che contiene questo codice, no??
Era qui sostanzialmente il mio errore.. Io volevo inserire del codice 
php in una pagina html e quindi l'interprete non veniva mai richiamato :-P
Grazie mille a tutti!

       }
  Potete dirmi che differenza c'e' tra inframezzare php e html, e far 
tutto "dentro" php? A naso io avrei fatto qualcosa come:
<?php
  if (condizione)
  {
    echo '<p>Non sei autenticato</p>';
  }
?>
  che mi sembra piu' "pulita". Mi sai dire perche' e' sbagliato? 8-o
  Un saluto e grazie,
-- 
Gianfranco Bertozzi
Linux User #183585

   che mi sembra piu' "pulita". Mi sai dire perche' e' sbagliato? 8-o
Non e` sbagliato di per se. E` una cattiva pratica.
Puo` andar bene per uno o due tag come in questo caso, ma diventa poco 
gestibile quando hai 3 tag o piu`, magari con attributi, ecc.
Il modo giusto e' di separare logica di controllo da logica visuale (i 
famosi V e C del pattern MVC), e mettere solo un po' di PHP dentro l'HTML:
Controller:
<?php
 $user = $_POST["user"];
 $logged = $database->checkUserLogged($user);
 include "view.php";
?>
View (view.php):
<html>
...
<body>
 <? if ($logged): ?>
  <p>Non sei autenticato</p>
 <? else: ?>
  <p>Bentornato</p>
 <? endif; ?>
 ...resto del sito...
</body>
</html>
Consideralo meta-codice, ma dovrebbe funzionare :)
Bye.

 tutto "dentro" php? A naso io avrei fatto qualcosa come:
Inframmezzato diventa illeggibile più rapidamente.
Ho usato questa forma perché lo era l'esempio dell'OP.

 famosi V e C del pattern MVC), e mettere solo un po' di PHP dentro l'HTML:
Non sono d'accordo, dipende da quello che si deve scrivere.
Il punto è che Alessandro ha in mente un contesto "professionale" per 
cui usare MVC ha un senso in termini di manutenibilità, di aggiornamento 
codice, di debugging.
 
Per una persona che scriverà una singola pagina con 3 blocchi php in 
tutto è meglio inframmezzare, qualsiasi tipo di approccio diverso non 
ripagherà mai l'investimento (anche solo in termini di tempo) per 
studiarlo.
In assoluto non si può dire cosa sia meglio e cosa sia peggio, si deve 
valutare il caso specifico, imho.

 valutare il caso specifico, imho.
D'accordissimo. :)
Bye.

 <? else: ?>
  E' questo che fa strano: son sempre stato abituato a pensare al 
codice come blocco unico e questo "esci e rientra" mi sembra 
addirittura un controsenso, d'acchito direi "da' errore". Vabbe', mi 
sforzero'.
  Grazie. :-)
-- 
Gianfranco Bertozzi
http://www.locandamilu.it
Linux User #183585