Array-Inhalte plötzlich weg

Mike Rofon

Erfahrenes Mitglied
Ich fülle mehrere Arrays aus einer MySQL-Tabelle mittels WHILE-Schleife.
Innerhalb dieser Schleife mache ich ein echo und laß mir anzeigen, was in den Feldern drin steht.

Danach hol ich mir Daten aus 2 per Formular erzeugten Arrays.
Das Codeschnipsel hab ich aus einem Tutorial hier... soweit funktioniert das auch.
ABER : warum gibt mir das ECHO in der zweiten WHILE-Schleife keine Daten bei $platz[v]und $vorwoche[v] ?
$vorwoche['v'] hilft auch nicht.
Was mach ich denn hier falsch?

Ich geb Euch mal den Code kompleett wie ich ihn geschrieben hab
PHP:
$x = 0;
while ($hit = mysql_fetch_object($liste)) {
  $x++;
  $platz[x] = $hit->voteid;
  $interpret[x] = $hit->interpret;
  $titel[x] = $hit->titel;
  $votes[x] = $hit->votes;
  $wochen[x] = $hit->anzahlwochen;
  $vorwoche[x] = $hit->platzvorwoche;
  // Dieses ECHO liefert saubere Daten in den einzelnen Feldern
  echo $x." ".$platz[x]." ".$vorwoche[x]." ".$interpret[x]."--".$titel[x]."<br>";
  }

echo "</div><br><br>";

$raus=$_POST['raus'];
$rein=$_POST['rein'];
while(list($k,$v)=each($raus)){
  // Dieses ECHO liefert nur Werte bei $k und $v, bei den andern beiden krieg ich nix raus
  echo $k." | ".$v.">>".$vorwoche[v]."##";
  echo $platz[$v];
  echo "<br>";
  }

Wer zeigt mir bitte die Bäume im Wald? ;)
 
$_POST['raus'] ist doch kein Array, oder?! Warum dann die Schleife? Brauchst du nicht! Und beim $vorwoche[v] fehlt das $ vor dem v ;)
PHP:
$raus=$_POST['raus']; 
$rein=$_POST['rein']; 
echo $vorwoche[$v]."##"; 
echo $platz[$v]; 
echo "<br>";
 
doch doch ... das ist ein Array ... kommt aus einem Formular was in etwas so aussieht
Code:
<td><input type="Checkbox" name="raus[]" value="15"  checked='checked' >1</td>
<td><input type="Checkbox" name="raus[]" value="16"  checked='checked' >1</td>
...
<td><input type="Checkbox" name="raus[]" value="20"  checked='checked' >1</td>
...
<td><input type="Checkbox" name="rein[]" value=1  checked='checked' >1</td>
...
<td><input type="Checkbox" name="rein[]" value=6  checked='checked' >1</td>

außerdem hab ich mir folgendes Tutorial geschnappt ;)http://www.tutorials.de/forum/javas...ascript-formulareingaben-pruefen-vol-2-a.html
denn der User soll gezwungen werden für raus[] und rein[] exakt die selbe Anzahl Checkboxen anzuklicken. DAS funktioniert auch alles (Danke, Sven!!)

und was das $ vor dem V betrifft ... wenn ich den Syntax-Kram richtig verstanden habe, is das $ vor dem V bei $platz[$v] sogar zuviel! Ich habe es jedenfalls mal SO und mal SO probiert ... funktionieren tut beides nicht :)
 
Hallo,

Schreib es bitte als $vorwoche[$v].

Wenn du $vorwoche[v] verwendest, versucht er ein Array-Element zu finden mit dem Key
"v" - den wird es nicht geben. Ausnahme wäre wenn du es in einem String schreibst und es dann interpretiert wird.

Das zweite ist, dass du in deiner HTML-Seite die Checkboxen definiert hast als "raus[]". Schreib einfach nur mal "raus" und probiere es dann noch mal.

Markus

Edit: Achso ich glaub hab noch was gesehn, wenn es auch nicht direkt mit deiner Frage zu tun hat:
Du rufst die Array-Inhalte ab und vergibst einfach fortlaufenden Nummern entsprechenden den Query-Ergebnissen. Und in deiner HTML-Seite übergibst du diese Nummern? D.h. du addressiert damit nicht irgendeinen Primärschlüssel sondern einen Index in einer Datenbankabfrage, die evtl. sortiert ist? Ich würde sagen, das ist ziemlich gefährlich. Sollten sich in der Zwischenzeit Daten geändert haben stimmt die Indizierung ja nicht mehr und du selektierst andere Einträge.
Kann aber auch sein, dass es für deinen Anwendungsfall kein Problem darstellt... Eventuell hilfts ja trotzdem ;-)
 
Zuletzt bearbeitet:
Edit: Achso ich glaub hab noch was gesehn, wenn es auch nicht direkt mit deiner Frage zu tun hat:
Du rufst die Array-Inhalte ab und vergibst einfach fortlaufenden Nummern entsprechenden den Query-Ergebnissen. Und in deiner HTML-Seite übergibst du diese Nummern? D.h. du addressiert damit nicht irgendeinen Primärschlüssel sondern einen Index in einer Datenbankabfrage, die evtl. sortiert ist? Ich würde sagen, das ist ziemlich gefährlich. Sollten sich in der Zwischenzeit Daten geändert haben stimmt die Indizierung ja nicht mehr und du selektierst andere Einträge.
Kann aber auch sein, dass es für deinen Anwendungsfall kein Problem darstellt... Eventuell hilfts ja trotzdem ;-)
also das ganze ist das Backend für die Hörerhitparade eines Internet-Radios, und die auswertung der Votings, die ich hier grad code, verlangt vorher, daß derjenige der die Auswertung dann mal durchführt, vorher per Mausklick das Voting auf der Homepage abschaltet. In der Hitparade selbst werden ja keine neuen Datensätze angelegt, sondern nur gevotet. Also geht die Indizierung nicht kaputt. Allerhöchstens gehen die Votings verloren, die ein User abgeben will, wenn zwischen Aufruf der Seite und abschicken des Votes das Voting abgeschaltet wird.
Im Fall des Arrays rein[] ist es so, daß die Nummern, die das Array ausspuckt, die Primärschlüssel der Tabelle sind.

Um die andern Sachen muß ich mich erst kümmern... erstmal muß ich aber mal ne Runde Ducato fliegen, damit sich am Ende des Monats der Kühlschrank füllt ;)
 
Schreib es bitte als $vorwoche[$v].

Zusätzlich muss auch das x hier überall mit einem $ geschrieben werden.

PHP:
$platz[x] = $hit->voteid;
  $interpret[x] = $hit->interpret;
  $titel[x] = $hit->titel;
  $votes[x] = $hit->votes;
  $wochen[x] = $hit->anzahlwochen;
  $vorwoche[x] = $hit->platzvorwoche;
  // Dieses ECHO liefert saubere Daten in den einzelnen Feldern
  echo $x." ".$platz[x]." ".$vorwoche[x]." ".$interpret[x]."--".$titel[x]."<br>";
...andernfalls überschreibst du die Arrays bei jedem Schleifendurchlauf wieder.
 
Zurück