zweimal include, jeweils andere Variable, immer der gleiche Aufruf – SELFHTML-Forum Forum als Ergänzung zum SELFHTML-Wiki und zur Dokumentation SELFHTML https://forum.selfhtml.org/self zweimal include, jeweils andere Variable, immer der gleiche Aufruf Mon, 09 Nov 20 08:08:40 Z https://forum.selfhtml.org/self/2020/nov/09/zweimal-include-jeweils-andere-variable-immer-der-gleiche-aufruf/1777715#m1777715 https://forum.selfhtml.org/self/2020/nov/09/zweimal-include-jeweils-andere-variable-immer-der-gleiche-aufruf/1777715#m1777715 <p>Tach,</p> <p>ich habe folgendes Problem. Ich binde über include</p> <p>$beispiel_var=1;</p> <p>include("page_rechnen.php");</p> <p>folgende Seite auf.</p> <p>Anschließend ändere ich bestimmte Variablen und rufe sie erneut auf:</p> <p>$beispiel_var=2;</p> <p>include("page_rechnen.php");</p> <p>Die include Seite wird zwar zweimal geladen, doch der Wert, der zweiten Var wird nicht überschrieben und auch nicht übermittelt.. Wie stelle ich es an, das beim zweiten Aufruf, auch mit den neuen Variable gearbeitet wird?</p> <p>Richard</p> zweimal include, jeweils andere Variable, immer der gleiche Aufruf Mon, 09 Nov 20 08:17:45 Z https://forum.selfhtml.org/self/2020/nov/09/zweimal-include-jeweils-andere-variable-immer-der-gleiche-aufruf/1777716#m1777716 https://forum.selfhtml.org/self/2020/nov/09/zweimal-include-jeweils-andere-variable-immer-der-gleiche-aufruf/1777716#m1777716 <p>Hallo,</p> <blockquote> <p>$beispiel_var=1;</p> <p>include("page_rechnen.php");</p> <p>folgende Seite auf.</p> </blockquote> <p>das heißt, du bindest eine weitere Quelldatei mit include() ein, deren Code sofort ausgeführt werden soll. Guter Programmierstil ist das aber nicht. Der Normalfall ist eher, dass man eine Datei nur <em>einmal</em> includiert und eine darin definierte Funktion mehrmals aufruft. Dann ist auch die Übergabe von Parametern bzw. des Ergebnisses eindeutig.</p> <blockquote> <p>Anschließend ändere ich bestimmte Variablen und rufe sie erneut auf:</p> <p>$beispiel_var=2;</p> <p>include("page_rechnen.php");</p> <p>Die include Seite wird zwar zweimal geladen, doch der Wert, der zweiten Var wird nicht überschrieben und auch nicht übermittelt.. Wie stelle ich es an, das beim zweiten Aufruf, auch mit den neuen Variable gearbeitet wird?</p> </blockquote> <p>Was genau steht in page_rechnen.php, und was genau meinst du mit <em>übermitteln</em>?</p> <p>Live long and <s>pros</s> healthy,<br>  Martin</p> <div class="signature">-- <br> Versuchungen sollte man nachgeben. Wer weiß, ob sie wiederkommen. </div> zweimal include, jeweils andere Variable, immer der gleiche Aufruf Mon, 09 Nov 20 10:01:15 Z https://forum.selfhtml.org/self/2020/nov/09/zweimal-include-jeweils-andere-variable-immer-der-gleiche-aufruf/1777729#m1777729 https://forum.selfhtml.org/self/2020/nov/09/zweimal-include-jeweils-andere-variable-immer-der-gleiche-aufruf/1777729#m1777729 <p>Hallo Richard,</p> <p>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:</p> <p>master.php:</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"I am your Master\n"</span><span class="token punctuation">;</span> <span class="token variable">$obey</span> <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span> <span class="token keyword">include</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"slave.php"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$obey</span> <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">;</span> <span class="token keyword">include</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"slave.php"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"I am done now.\n"</span><span class="token punctuation">;</span> </span></code></pre> <p>slave.php:</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$obey</span> <span class="token operator">==</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">" I am your obediant servant!\n"</span><span class="token punctuation">;</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$obey</span> <span class="token operator">==</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">" Command me, Master!\n"</span><span class="token punctuation">;</span> <span class="token keyword">else</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">" You're pathetic...\n"</span><span class="token punctuation">;</span> </span></code></pre> <p>Ausgabe:</p> <pre><code class="block">I am your Master I am your obediant servant! Command me, Master! I am done now. </code></pre> <p>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.</p> <p>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.</p> <p>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):</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$beispiel_var</span> <span class="token operator">==</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token delimiter important">?></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>label</span><span class="token punctuation">></span></span>Alter: <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>input</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>number<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>alter<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>label</span><span class="token punctuation">></span></span> <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">elseif</span> <span class="token punctuation">(</span><span class="token variable">$beispiel_var</span> <span class="token operator">==</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token delimiter important">?></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>label</span><span class="token punctuation">></span></span>Geburtsdatum: <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>input</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>text<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>gebdat<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>label</span><span class="token punctuation">></span></span> <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">endif</span><span class="token punctuation">;</span> <span class="token delimiter important">?></span></span> </code></pre> <p>(if mit Doppelpunkt und endif?!?! -> <a href="https://www.php.net/manual/de/control-structures.alternative-syntax.php" rel="nofollow noopener noreferrer">alternativsyntax für kontrollstrukturen</a>, bei einem PHP/HTML Mix zu empfehlen)</p> <p>Man kann aber auch in einer Funktion HTML ausgeben und auch den PHP Kontext verlassen:</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">function</span> <span class="token function-definition function">eingabeAlter</span><span class="token punctuation">(</span><span class="token variable">$modus</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$modus</span> <span class="token operator">==</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token delimiter important">?></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>label</span><span class="token punctuation">></span></span>Alter: <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>input</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>number<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>alter<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>label</span><span class="token punctuation">></span></span> <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">elseif</span> <span class="token punctuation">(</span><span class="token variable">$beispiel_var</span> <span class="token operator">==</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token delimiter important">?></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>label</span><span class="token punctuation">></span></span>Geburtsdatum: <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>input</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>text<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>gebdat<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>label</span><span class="token punctuation">></span></span> <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">endif</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </span></code></pre> <p>Im aufrufenden Script steht dann:</p> <pre><code class="block language-php"><span class="token keyword">require_once</span> <span class="token string double-quoted-string">"input_widgets.php"</span><span class="token punctuation">;</span> <span class="token operator">...</span> <span class="token function">eingabeAlter</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token operator">...</span> <span class="token function">eingabeAlter</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>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.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> zweimal include, jeweils andere Variable, immer der gleiche Aufruf Mon, 09 Nov 20 10:47:13 Z https://forum.selfhtml.org/self/2020/nov/09/zweimal-include-jeweils-andere-variable-immer-der-gleiche-aufruf/1777735#m1777735 https://forum.selfhtml.org/self/2020/nov/09/zweimal-include-jeweils-andere-variable-immer-der-gleiche-aufruf/1777735#m1777735 <p>Tach!</p> <blockquote> <p>Die include Seite wird zwar zweimal geladen, doch der Wert, der zweiten Var wird nicht überschrieben und auch nicht übermittelt..</p> </blockquote> <p>Das scheint mir ein Verständnisfehler zu sein. <code>include</code> ist keine Funktion, die man aufruft, der man was übergibt, und die ein Ergebnis liefert oder per Nebenwirkung zum Beispiel eine Ausgabe erstellt. Stattdessen wird der Code in der Include-Datei sozusagen an die aufrufende Stelle eingefügt und im Kontext des Aufrufs ausgeführt.</p> <p>Oder in anderen Worten: Du übergibst nicht eine Aufgabe an einen Kollegen, die er in seinem Büro erledigt, sondern holst den Kollegen zu dir, dass er die Aufgabe bei dir im Raum ausführt.</p> <p>dedlfix.</p> zweimal include, jeweils andere Variable, immer der gleiche Aufruf Mon, 09 Nov 20 08:20:52 Z https://forum.selfhtml.org/self/2020/nov/09/zweimal-include-jeweils-andere-variable-immer-der-gleiche-aufruf/1777717#m1777717 https://forum.selfhtml.org/self/2020/nov/09/zweimal-include-jeweils-andere-variable-immer-der-gleiche-aufruf/1777717#m1777717 <p>Je nachdem welcher Wert übermittelt wird, wird eine andere Ausgabe in dieser Datei zusammengesetzt. Ich übermittel eine einzige Zahl</p> zweimal include, jeweils andere Variable, immer der gleiche Aufruf Mon, 09 Nov 20 09:16:57 Z https://forum.selfhtml.org/self/2020/nov/09/zweimal-include-jeweils-andere-variable-immer-der-gleiche-aufruf/1777719#m1777719 https://forum.selfhtml.org/self/2020/nov/09/zweimal-include-jeweils-andere-variable-immer-der-gleiche-aufruf/1777719#m1777719 <p>Hallo,</p> <blockquote> <p>Je nachdem welcher Wert übermittelt wird, wird eine andere Ausgabe in dieser Datei zusammengesetzt. Ich übermittel eine einzige Zahl</p> </blockquote> <p>Mir scheint du brauchst include eigentlich gar nicht. Schau dir mal an was und wofür Funktionen sind!</p> <p>Gruß<br> Kalk</p> zweimal include, jeweils andere Variable, immer der gleiche Aufruf Mon, 09 Nov 20 11:11:06 Z https://forum.selfhtml.org/self/2020/nov/09/zweimal-include-jeweils-andere-variable-immer-der-gleiche-aufruf/1777736#m1777736 https://forum.selfhtml.org/self/2020/nov/09/zweimal-include-jeweils-andere-variable-immer-der-gleiche-aufruf/1777736#m1777736 <p>Hallo dedlfix,</p> <p>hast ja recht, aber wenn ich den dienstbaren Kollegen hole und ihm sage: Tu, was da auf der Tafel steht, dann sollte er das tun. Wenn ich die Tafel auswische, was anderes draufschreibe und ihn dann nochmal hole, dann sollte er <strong>nicht</strong> tun, was beim ersten Mal auf der Tafel stand.</p> <p>Tut er auch in meinem Beispiel nicht. Bei Richard dagegen schon. Und da hilft dann nur debuggen.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> zweimal include, jeweils andere Variable, immer der gleiche Aufruf Mon, 09 Nov 20 11:41:12 Z https://forum.selfhtml.org/self/2020/nov/09/zweimal-include-jeweils-andere-variable-immer-der-gleiche-aufruf/1777737#m1777737 https://forum.selfhtml.org/self/2020/nov/09/zweimal-include-jeweils-andere-variable-immer-der-gleiche-aufruf/1777737#m1777737 <p>Tach!</p> <blockquote> <p>hast ja recht, aber [...]</p> </blockquote> <p>Schon klar, auf das eigentliche Thema gingen ja schon die anderen Antworten ein. Ich wollte nur noch klarstellen, wie sich include eigentlich verhält. Im übrigen stimme ich darin überein, dass sich die Aufgabenstellung eher so liest, das eine Funktion die bessere Lösung ist.</p> <p>dedlfix.</p>