8721 sujets

Développement web côté serveur, CMS

Bonjour à tous.

Je fais un code qui permettrait d'afficher un contenu de tableau différent en fonction d'une variable (ici $data['taille']).
L'objectif est que si cette variable est inférieur à 100 on affiche un tableau différent de si elle est égale à 100.

Le problème que j'ai c'est que la variable $data['contenu'], qui contient un texte simple (Lorem pour l'instant) ne s'affiche que si $data['taille'] < 100 . Elle ne s'affiche pas si $data['taille'] = 100...

Voici le code concerné


<?php if($data['taille'] < 100){  ?>	
	<tr id="listtr">
		<td id="listtd" colspan="5">
		<?php echo $data['contenu'] ?><textarea style="text-align: left; width: 100%;" name="contenu"></textarea>
		</td>
	</tr>
	<tr align="center">
		<td style="text-align: center;" colspan="5" rowspan="1">
			<button value="edit" name="edit">Ajouter</button>&nbsp;<a href="index.php" id="annulh">Annuler</a>
		</td>
	</tr>	
<?php }else{ ?> 
	<tr id="listtr">
		<td id="listtd" colspan="5">
			<? echo $data['contenu'] ?>
		</td>
	</tr>
	<tr align="center">
		<td style="text-align: center;" colspan="5" rowspan="1">
			<a href="index.php" id="annulh">Retour</a>
		</td>
	</tr> 
<?php } ?>


Je ne comprend pas. Je me suis alors dit que ça venait du signe "<" que j'ai alors changé pour un $data['taille'] == 100 mais rien n'a changé.

Ma conclusion sur ce problème c'est que $data['contenu'] ne s'affiche que dans la première partie de la condition. Et que pour une raison inconnue elle ne s'affiche pas à la deuxième partie de la condition : après " else { " .

Avez-vous une idée de pourquoi ça fait ça et de comment corriger ce problème ?

Je vous remercie d'avance. Si j'en vais à demander de l'aide c'est que j'ai vraiment pas de solution ^^' . Je suis perdu là.

EDIT :

Problème résolu. Fallait que je mettes "<?php " au lieu de "<?" en deuxième partie. J'avais pas vu le plus évident x) .
Modifié par arbilus (03 Jul 2017 - 18:44)
Meilleure solution
Bonsoir.

Vous n'avez pas de problèmes de compilation ?
Parce que faire :
<?php } ?>

est, a priori, problématique.

Il faut faire :
<?php echo '}'; ?>

(bon le point-virgule est probablement inutile s'il n'y a qu'une seule instruction…)

Pour le reste, votre code fonctionne. J'ai cependant repris tout le code en ne mettant qu'une seule fois <?php ... ?> et en remplaçant chaque ligne de code HTML par :
echo 'code HTML';

Smiley smile
Bonjour,

Tu n'étais plus réveillé hier Zelena (ou c'est moi qui ne le suis pas ce matin) ?
Zelena a écrit :
Vous n'avez pas de problèmes de compilation ?
Parce que faire :
<?php } ?>

est, a priori, problématique.

Ben non, c'est l'accolade de fin du if...else Smiley hum

Zelena a écrit :
J'ai cependant repris tout le code en ne mettant qu'une seule fois &lt;?php ... ?&gt; et en remplaçant chaque ligne de code HTML par :
echo 'code HTML';

Beurk, je préfère encore utiliser la syntaxe "here document" du echo :
echo <<<END
...
END;


Sinon, pour utiliser la syntaxe avec le <?, il faut activer la directive short_open_tag dans le php.ini
Modifié par SolidSnake (04 Jul 2017 - 09:26)
Modérateur
SolidSnake a écrit :

Tu n'étais plus réveillé hier Zelena (ou c'est moi qui ne le suis pas ce matin) ?

Non non, elle devait faire du rêve éveillé Smiley smile

Sinon pour du templating la forme suivante est généralement conseillée:

<?php if($a > $b): ?>
  <strong>C'est grand</strong>
<?php else: ?>
  <strong>C'est petit</strong>
<?php endif; ?>


les endif; endfor; endforeach; sont plus lisibles que les multiples <?php } ?>
Modifié par kustolovic (04 Jul 2017 - 09:50)
Bonjour,

SolidSnake a écrit :

Tu n'étais plus réveillé hier Zelena (ou c'est moi qui ne le suis pas ce matin) ?

Ben non, c'est l'accolade de fin du if...else Smiley hum



Non, ce n'était pas pour l'accolade, c'était l'absence d'echo qui me troublait… Mais si ça marche comme ça (et apparemment c'est le cas), pourquoi pas.

C'est vrai que mélanger HTML et PHP ne me plait pas trop.

Smiley smile