Rolf B: zweimal include, jeweils andere Variable, immer der gleiche Aufruf

Beitrag lesen

Hallo Richard,

die Kollegen haben schon recht: mehrfache Includes müssen nicht sein. Aber mal davon ab, das, was Du tust, sollte im Rahmen dessen, was Du uns hier erzählst, funktionieren. Ich habe ein Beispiel gemacht:

master.php:

<?php
echo "I am your Master\n";
$obey = 1;
include("slave.php");
$obey = 2;
include("slave.php");
echo "I am done now.\n";

slave.php:

<?php
if ($obey == 1)
   echo "  I am your obediant servant!\n";
else if ($obey == 2)
   echo "  Command me, Master!\n";
else
   echo "  You're pathetic...\n";

Ausgabe:

I am your Master
  I am your obediant servant!
  Command me, Master!
I am done now.

Der Mechanismus, den Du verwenden willst, funktioniert. Mit PHP 5.6 und mit PHP 7.4. Wenn die includete Datei bei Dir nicht der geänderten Variablen aus der Hauptdatei folgt, machst Du etwas anderes falsch.

Tipp: Gib ganz zu Beginn der Include Datei den Wert von $beispiel_var aus. Und da, wo Du sie abfragst, tu das in der Zeile davor nochmal.

Zum Verbesserungsverfahren. Mal angenommen, deine Include-Datei hat den Job, je nach Wert von $beispiel_var ein bestimmtes HTML Fragment in der einen oder anderen Variante auszugeben. Das kann man so tun wie in meinem albernen slave.php Beispiel oben. An Stelle der echo kann man auch den PHP Kontext verlassen, das ist ganz praktisch für das Syntax-Highlighting, wenn die Ausgabe HTML enthält (ob das Beispiel praktisch ist, möge dahingestellt bleiben):

<?php if ($beispiel_var == 1): ?>
<label>Alter: <input type="number" name="alter"></label>
<?php elseif ($beispiel_var == 1): ?>
<label>Geburtsdatum: <input type="text" name="gebdat"></label>
<?php endif; ?>

(if mit Doppelpunkt und endif?!?! -> alternativsyntax für kontrollstrukturen, bei einem PHP/HTML Mix zu empfehlen)

Man kann aber auch in einer Funktion HTML ausgeben und auch den PHP Kontext verlassen:

<?php
function eingabeAlter($modus) {
   if ($modus == 1):
?>
<label>Alter: <input type="number" name="alter"></label>
<?php 
   elseif ($beispiel_var == 1):
?>
<label>Geburtsdatum: <input type="text" name="gebdat"></label>
<?php
   endif;
}

Im aufrufenden Script steht dann:

require_once "input_widgets.php";

...

eingabeAlter(1);

...

eingabeAlter(2);

Was nicht heißt, dass ich das im konkreten Fall empfehlen würde. Wenn man ein Include hat, das eine Sammlung von Funktionen zum Ausgaben von input-Gruppen enthält, dann würde ich nicht eine Funktion mit Fallunterscheidung darin bereitstellen, sondern zwei Funktionen schreiben: eingabeAlter und eingabeGeburtsdatum.

Rolf

--
sumpsi - posui - obstruxi