web-dev-qa-db-fra.com

Instructions conditionnelles en PHP entre code HTML

Je rencontre un problème en utilisant des instructions conditionnelles dans PHP séparé par du code HTML. C'est le type de code que j'essaie d'écrire. Il s'agit d'une page de profil et elle devrait être vu uniquement par l'utilisateur dont il s'agit (j'utilise des variables de session pour le vérifier):

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

Mais ça ne marche pas. J'ai également essayé d'utiliser la notation abrégée en mettant un : à la fin de if et en utilisant l'instruction endif, mais cela n'a pas fonctionné. (Sur un projet précédent, le : la méthode a fonctionné pour foreach et endforeach alors j'ai pensé que j'allais l'essayer)

Des idées ?

33
0xff0000

Vous avez probablement oublié le endif du syntaxe de structure de contrôle alternative :

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

L'omission des accolades comme vous l'avez écrit n'est pas possible. Cela n'est possible que s'il est suivi d'un instruction régulière .

63
Gumbo

PHP a deux styles de notation pour les blocs if () (et les blocs en général).

Tout d'abord, vous avez la notation verbeuse, qui implique d'indiquer explicitement endif; à la fin du bloc if (). Cela ressemble à ceci:

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

Les deux points à la fin des lignes if et else sont importants, car sinon PHP pense que vous utilisez l'autre notation (ci-dessous).

Deuxièmement, vous avez la notation entre accolades, qui ressemble au code de style C ou Perl, et ressemble à ceci:

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

Avec cette notation de style, vous êtes autorisé à laisser les paires d'accolades si votre bloc ne fait qu'une ligne. (Personnellement, je pense que c'est une mauvaise pratique de les laisser comme ça, mais beaucoup de gens ne jurent que par cela, et c'est une syntaxe parfaitement valide. Mais j'ai vu PHP se confondre sur une seule ligne) blocs lorsque vous basculez entre PHP et HTML; c'est pourquoi je préfère toujours utiliser des accolades même si je n'écris qu'une seule ligne).

Le problème dans votre cas est que vous avez mélangé les deux notations. Vous essayez de nous la notation verbeuse, mais n'avez pas les deux-points sur les lignes, donc PHP pense que vous voulez dire la notation d'accolades. Mais parce que la notation d'accolades permet de manquer les accolades , PHP considère votre code comme une syntaxe valide, même s'il ne fonctionnera pas comme prévu.

Votre solution est de le ranger afin que vous utilisiez définitivement une syntaxe ou l'autre. Soit ajoutez des accolades ({ et }}) au début et à la fin de chaque bloc, comme indiqué dans mon exemple, ou ajoutez des deux-points et un endif; ligne.

Votre code devrait donc ressembler à l'un de ces deux exemples:

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

ou...

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

J'espère que cela pourra aider.

13
Spudley

utiliser des accolades { et }.

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

Votre pensée initiale était correcte. Il y a deux façons de faire cela, selon la documentation PHP :

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

Ou:

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

Une autre façon de rendre conditionnellement un modèle consiste à utiliser include

Exemple

if($condition)
{
    include 'page1.php';
}else{
    include 'page2.php';
}
0
NS23

Essayez de mettre entre parenthèses pour séparer les conditions.

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

utiliser des crochets parce que pour l'interpréteur php cela s'étend sur plusieurs lignes

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