2010-09-28 20 views
22

Ho un po 'di problemi usando le dichiarazioni condizionali in PHP separate dal codice HTML. Questo è il tipo di codice che sto cercando di scrivere. Questa è una pagina di profilo e dovrebbe essere vista solo dall'utente il cui profilo è (sto usando variabili di sessione per controllare che):Dichiarazioni condizionali in codice PHP tra codice HTML

<?php if(check if user is logged in) ?> 
<display users profile in html> 
<?php else ?> 
<display an error> 

Ma questo non funziona. Ho anche provato a utilizzare la notazione abbreviata inserendo unoalla fine dello if e utilizzando l'istruzione endif, ma non ha funzionato. (Su un precedente progetto, il metodo : lavorato per foreach e endforeach così ho pensato di provarlo)

tutte le idee?

risposta

58

probabilmente hai dimenticato il endif del alternative control structure syntax:

<?php if(check if user is logged in): ?> 
<display users profile in html> 
<?php else: ?> 
<display an error> 
<?php endif; ?> 

Omettendo le parentesi graffe, come hai scritto non è possibile . È possibile solo se è seguito da un regular statement.

+0

+1: preferisco questa sintassi per la leggibilità. – RedFilter

+0

+1 per usare i metodi 'end *'/':' per fare condizionali in HTML. – RobertPitt

+1

eurk. Odio la sintassi "endif". Dammi belle bretelle ricci amichevoli ogni giorno. ;) – Spudley

0

Prova a mettere tra parentesi per separare le condizioni.

<?php if(check if user is logged in) { ?> 
<display users profile in html> 
<?php } else { ?> 
<display an error> 
<?php } ?> 
0

parentesi usare perché l'interprete php questo si estende su più linee

<?php if(check if user is logged in) { ?> 
<display users profile in html> 
<?php } else { ?> 
<display an error> 
<?php } // else ?> 
6

utilizzare le parentesi graffe { e }.

<?php if(check if user is logged in) { ?> 
<display users profile in html> 
<?php } else { ?> 
<display an error> 
<?php } ?> 
+3

io preferisco le parentesi graffe, soprattutto quando usi un IDE – Hannes

0

Il tuo pensiero iniziale era corretto. Ci sono due modi per farlo, come da PHP documentation:

<?php if($loggedin): ?> 
<p>User is logged in.</p> 
<?php else: ?> 
<p>User is not logged in.</p> 
<?php endif; ?> 

O:

<?php if($loggedin){ ?> 
<p>User is logged in.</p> 
<?php }else{ ?> 
<p>User is not logged in.</p> 
<?php } ?> 
+0

Grazie per averlo reso forte e chiaro :) Saluti :) – 0xff0000

11

PHP ha due stili di notazione per se() blocchi (e blocchi in generale).

In primo luogo, si dispone della notazione wordy, che prevede esplicitamente endif; alla fine del blocco if(). Ecco come si presenta:

if(whatever): 
    do something 
else: 
    do something else 
endif; 

i due punti alla fine delle linee if e else sono importanti, perché altrimenti PHP pensa che si sta utilizzando l'altra notazione di (sotto).

In secondo luogo, si ha la notazione parentesi graffe, che è simile al C o Perl codice di stile, e si presenta così:

if(whatever) { 
    do something 
} else { 
    do something else. 
} 

Con questa notazione stile, si è permesso di lasciare le coppie di ricci -Staffa se il tuo blocco sarà lungo una sola riga. (Personalmente ritengo che sia una cattiva pratica lasciarli fuori in questo modo, ma molta gente lo giustifica, ed è una sintassi perfettamente valida. Ma ho visto PHP confondersi con i blocchi a linea singola quando si passa da un codice PHP all'altro e HTML: questo è il motivo per cui preferisco sempre usare le parentesi graffe anche se sto scrivendo solo una riga).

Il problema nel tuo caso è che hai mescolato le due notazioni. Ci stai provando con la notazione verbale, ma non hai i due punti sulle linee, quindi PHP pensa che tu intenda la notazione delle parentesi graffe. Ma poiché la notazione delle parentesi graffe consente di non rilevare le parentesi, PHP sta vedendo il tuo codice come sintassi valida, anche se non funzionerà esattamente come pianificato.

La soluzione è quella di riordinarlo in modo da utilizzare sicuramente una sintassi o l'altra. Aggiungere parentesi graffe ({ e }} all'inizio e alla fine di ciascun blocco come illustrato nell'esempio, oppure aggiungere due punti e una riga endif;.

Quindi il codice dovrebbe essere simile a uno di questi due esempi:

<?php if(check if user is logged in): ?> 
    <display users profile in html> 
<?php else: ?> 
    <display an error> 
<?php endif; ?> 

o ...

<?php if(check if user is logged in) { ?> 
    <display users profile in html> 
<?php } else { ?> 
    <display an error> 
<?php } ?> 

Speranza che aiuta.

+0

Wow, che era abbastanza elaborato. Grazie ! Sono <3'in! SO :) – 0xff0000