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.
+1: Prefiero esta sintaxis para la legibilidad. – RedFilter
+1 para usar los métodos 'end *'/'' para hacer condicionales en HTML. – RobertPitt
eurk. Odio la sintaxis "endif". Dame bonitos y cómodos aparatos ortopédicos todos los días. ;) – Spudley