Gunnar Bittersmann: if Problem

Beitrag lesen

@@Bernd

<?php if(isset($_POST['abschicken']) && empty($errors1) === false) {?>
    <?php echo '<ul><li>'.implode('</li><li>',$errors1).'</li></ul>'; 
    ?>
  <?php } ?>

  <?php if(isset($_POST['abschicken']) && empty($errors) === false && empty($errors1) === true) {?>
    <?php echo '<ul><li>'.implode('</li><li>',$errors).'</li></ul>'; 
    ?>
  <?php } ?>

Zu dem Code einige Anmerkungen:

empty($errors1) === false Würdest du das in natürlicher Sprache so ausdrücken: Ist es wahr, dass es keine Fehler gab? Oder würdest du sagen: Gab es keine Fehler?

Vermutlich letzteres, und genau das solltest du im Code auch tun: !empty($errors1)

Vergleiche von booleschen Werten gegen true oder false sind unsinnig; stattdessen gleich die booleschen Werte verwenden. So wie du es bei isset($_POST['abschicken']) ja auch tust.

Statt empty($errors1) === true dann auch einfach empty($errors1).


Markup (HTML-Tags) nicht mit echo ausgeben. Nicht HTML in PHP schachteln, sondern andersrum: PHP in HTML, d.h. nur die Daten mit PHP ausgeben.

Dabei sollten im Ausgabeteil keine geschweiften Klammern auftreten, sondern die alternative Syntax für Kontrollstrukturen verwendet werden. Die Gründe dafür kannst du dieser Diskussion mit Dem Martin entnehmen.

Waren wir an der Stelle nicht vor einem Jahr schon mal?

Der Code sähe dann so aus:

<?php if (isset($_POST['abschicken']) && !empty($errors1)): ?>
	<ul>
		<li>
			<?php echo implode('</li><li>',$errors1); ?>
		</li>
	</ul>'; 
<?php endif; ?>

<?php if (isset($_POST['abschicken']) && !empty($errors) && empty($errors1)): ?>
	<ul>
		<li>
			<?php echo implode('</li><li>',$errors); ?>
		</li>
	</ul>'; 
<?php endif; ?>

Äh Moment, immer noch Markup im PHP-Code. Der Trick mit implode() mag den Code kürzer machen, aber nicht besser lesbar. So sieht man, was da wirklich passiert:

<?php if (isset($_POST['abschicken']) && !empty($errors1)): ?>
	<ul>
		<?php foreach ($errors1 as $error1): ?>
			<li>
				<?php echo $error1; ?>
			</li>
		<?php endforeach; ?>
	</ul>'; 
<?php endif; ?>

<?php if (isset($_POST['abschicken']) && !empty($errors) && empty($errors1)): ?>
	<ul>
		<?php foreach ($errors as $error): ?>
			<li>
				<?php echo $error; ?>
			</li>
		<?php endforeach; ?>
	</ul>'; 
<?php endif; ?>

Die Benennung der Variablen (errors, errors1) solltest du überdenken und aussagekräftigere Bezeichner wählen.

Außerdem kann es nicht schaden, die Ausgaben mit htmlspecialchars() abzusichern, selbst wenn sie in diesem Fall vollständig unter deiner Kontrolle sind. Also <?php echo htmlspecialchars($error1); ?>) usw.

LLAP 🖖

--
„Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann