Felix Riesterer: php-Versuchsaufbau schlägt fehl

Beitrag lesen

Lieber Gregor,

um Dich da abzuholen, wo Du bist, gehe ich einfach frech davon aus, dass Du Deinen eigenen Code nicht verstehst. Den Beweis dafür lieferst Du, indem Du folgenden Code-Abschnitt mit der Frage garnierst:

  1. Warum endet mein Script in einer Endlosschleife?
for($id = 1;$id++;$id <= 5) {

Du bist anscheinend noch nicht sicher im Schreiben von for-Schleifen. Die Angaben in der runden Klammer sind für eine Zählschleife (du willst Werte in einem Array abarbeiten, richtig?) immer so:

for ($zaehler = 0; $zaehler <= 5; $zaehler = $zaehler +1) {
  // tu was, es gibt hier jede Runde was anderes in $zaehler
  // aber $zaehler ist mindestens 0 und höchstens 5!
}

Gerne auch rückwärts:

for ($i = 19; $i >= 0; $i = $i -1) {
  // tu was, es gibt hier jede Runde was anderes in $i
  // aber $i ist mindestens 0 und höchstens 19
}

Übrigens bedeutet $zaehler++ das gleiche wie $zaehler = $zaehler +1, ist also eine verkürzte Schreibweise. Für rückwärts gibt es auch $zaehler--, was den Wert um genau 1 verringert.

Wenn Du mal in größeren Schritten gehen willst, geht das so:

for ($i = 19; $i >= 0; $i = $i -5) {
  // erste Runde ist $i bei 19
  // zweite Runde ist $i bei 14
  // ...
  // letzte Runde ist $i bei 4
}

So, und jetzt ist klar, warum Du in einer Endlos-Schleife gelandet bist. Du hast die Angaben in der runden Klammer vertauscht. Deine Bedingung für das Ausführen der Schleife, also die Angabe zwischen den beiden ;-Zeichen (Semikola) war der Ausdruck $id++. Das kann man auch als $id=$id+1 lesen. Damit ist es eine Wertzuweisung. Das Ergebnis dieser Wertzuweisung ist in jedem Fall eine Zahl, die, wenn sie als Bedingung verstanden werden muss (Du notierst es ja an genau dieser Stelle dafür), wie ein true gilt. Deswegen wird die Schleife (schon wieder) ausgeführt.

Das hast Du selbst nicht herausgefunden. Das ist also, wo ich dich mit Deinem Wissensstand abholen muss. Und da denke ich, dass Du noch ziemlich am Anfang stehst. Und das ist absolut OK und überhaupt kein Problem. Es sei denn, Du willst mit Gewalt einen Code verwenden, der nach der Auffassung der Leute hier, die sich besser als Du damit auskennen (oder warum fragst Du sonst hier?), aber überhaupt nicht funktionieren kann.

Um Dir zu helfen, müssen wir genauer verstehen, was Du eigentlich erreichen willst, damit wir Dir besser raten und erklären können. Und ja, Du wirst die Lösung auf jeden Fall verstehen, denn wir besprechen sie ja hier.

Liebe Grüße

Felix Riesterer