2010-09-28 14 views
22

Estoy teniendo un problema al usar declaraciones condicionales en PHP separadas por código HTML. Este es el tipo de código que intento escribir. Esta es una página de perfil y sólo debe ser visto por el usuario cuyo perfil es (estoy usando variables de sesión para comprobar que):Declaraciones condicionales en código PHP entre código HTML

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

Pero esto no funciona. También intenté usar la notación abreviada poniendo : al final de if y usando la declaración endif, pero no funcionó. (En un proyecto anterior, el método : funcionó para foreach y endforeach, así que pensé que lo probaría)

¿Alguna idea?

Respuesta

58

Probablemente se olvidó la 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; ?> 

La omisión de los tirantes como los escribió no es posible . Solo es posible si va seguido de un regular statement.

+0

+1: Prefiero esta sintaxis para la legibilidad. – RedFilter

+0

+1 para usar los métodos 'end *'/'' para hacer condicionales en HTML. – RobertPitt

+1

eurk. Odio la sintaxis "endif". Dame bonitos y cómodos aparatos ortopédicos todos los días. ;) – Spudley

0

Intenta poner entre paréntesis para separar las condiciones.

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

soportes de uso debido a la intérprete de PHP esta se extiende por varias líneas

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

use llaves { y }.

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

prefiero llaves, especialmente cuando usa un IDE – Hannes

0

Su primer pensamiento fue correcto. Hay dos maneras de hacer esto, de acuerdo con el 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

Gracias por hacerlo fuerte y claro :) Saludos :) – 0xff0000

11

PHP tiene dos estilos de notación para si() (bloques y bloques en general).

En primer lugar, tiene la notación wordy, que implica indicar explícitamente endif; al final del bloque if(). Se ve así:

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

Los dos puntos al final de las líneas if y else son importantes, porque de lo contrario PHP cree que usas la otra notación (abajo).

En segundo lugar, usted tiene la notación entre llaves, que tiene una apariencia similar a C o código de estilo Perl, y se ve así:

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

Con esta notación estilo, se le permite salir de los pares de rizado -Fuerzas desactivadas si tu bloque solo va a tener una línea de longitud. (Personalmente, creo que es una mala práctica dejarlos así, pero muchas personas lo juran, y es una sintaxis perfectamente válida. Pero he visto que PHP se confunde con los bloques de línea única cuando se cambia de código PHP y HTML; esta es la razón por la que siempre prefiero usar llaves incluso si solo estoy escribiendo una línea).

El problema en su caso es que ha mezclado las dos anotaciones. Está tratando de usar la notación verbal, pero no tiene los dos puntos en las líneas, por lo que PHP piensa que se refiere a la notación de llaves. Pero debido a que la notación de llaves permite que se pierdan las llaves, PHP ve su código como una sintaxis válida, incluso si no va a funcionar como lo planeó.

Su solución es arreglarlo para que definitivamente esté usando una sintaxis u otra. Agregue llaves ({ y }}) al inicio y al final de cada bloque como se muestra en mi ejemplo, o agregue dos puntos y una línea endif;.

Así que el código debe parecerse a uno de estos dos ejemplos:

<?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 } ?> 

Espero que ayude.

+0

Wow, eso fue bastante elaborado. Gracias ! Estoy <3'in! SO :) – 0xff0000

Cuestiones relacionadas