PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : While Schleifen-Fehler


fil3s
17.09.2009, 15:12:43
Hallo Community,

ich habe mal hier ein Problem mit einer eigentlich relativ simplen Abfrage aus einem Poll-Script. Diese Abfrage soll folgendes Bewerkstelligen:

1. Speichern der Frage und der Hauptattribute (z.B. Fragetyp(Checkbox, radio)) aus der Tabelle p_frage in ein array.

2. Speichern aller, der Frage zugehörigen, Auswahlmöglichkeiten mit Zusatzoptionen in das array von 1. aus der Tabelle p_werte.


function show_poll($umfrage)
{

$db = new my_database(); // Datenbankverbindung

$sel_questions = 'SELECT * FROM p_frage';
$sel_werte = 'SELECT * FROM p_werte';

$res = $db->query($sel_questions);
$get_werte = $db->query($sel_werte);
while ($namen = $db->fetch_array($res,0)) { //while #1 zum erfassen der frage mit hauptattributen
$frage[$namen['pos']]['title'] = $namen['name'];
$frage[$namen['pos']]['type'] = $namen['typ'];
$frage[$namen['pos']]['anzval'] = $namen['anzval'];
$frage[$namen['pos']]['id'] = $namen['id'];
if ($namen['typ'] == 'range_single' or $namen['typ'] == 'range_multi' ) {
$frage[$namen['pos']]['range'] = $namen['range'];
}
$i=0;
echo 'id:' .$namen['pos']. '<-- <br />';
while ($werte = $db->fetch_array($get_werte, 0)) { // while #2 Zur Erfassung der Auswahloptionen
// echo 'ping!<br />';
$i++;
$min = 'min_' .$i;
$max = 'max_' .$i;
echo '---'. $werte['frage_id'].'<br />';
if ($namen['pos'] == $werte['frage_id'] ) {
// echo '----möp!<br />';
echo $frage[$namen['pos']]['type'];
if ($frage[$namen['pos']]['type'] == 'range_single') {
// echo '--------blubb<br />';
$frage[$namen['pos']][$min] = $werte['min'];
$frage[$namen['pos']][$max] = $werte['max'];
$frage[$namen['pos']]['capt'] = $werte['title'];
} else {
// echo '--------bla<br />';
$val = 'val' .$i;
$frage[$namen['pos']][$val] = $werte['title'];
}
}
}
}
echo '<pre>';
var_dump($frage);
echo '<br />';
echo '</pre>';

}




Ich habe jetzt ein Problem: für die erste Frage, also den ersten Datensatz läuft das Script einwandfrei durch. Für alle folgenden Datensätze von p_frage speichert er nur noch die Werte aus p_frage und geht nicht mehr in die 2. While Schleife rein, also er übernimmt keine Auswahlmöglichkeiten mehr in das Array! Weiss jemand warum? Das Script muss ja in so weit in Ordnung sein, als das er den Ersten Datensatz komplett ausliest.
Ich hab hier nochmal ein var_dump angehängt!


array(5) {
[1]=>
array(7) {
["title"]=>
string(27) "Was machst du am Wochenende"
["type"]=>
string(8) "checkbox"
["anzval"]=>
string(1) "3"
["id"]=>
string(1) "1"
["val1"]=>
string(6) "Saufen"
["val2"]=>
string(6) "Zocken"
["val3"]=>
string(8) "Schlafen"
}
[2]=>
array(4) {
["title"]=>
string(12) "Was ist das?"
["type"]=>
string(5) "radio"
["anzval"]=>
string(1) "3"
["id"]=>
string(1) "2"
}
[3]=>
array(4) {
["title"]=>
string(44) "An welchen Wochentagen bleibst du lange auf?"
["type"]=>
string(8) "checkbox"
["anzval"]=>
string(1) "7"
["id"]=>
string(1) "3"
}
[4]=>
array(5) {
["title"]=>
string(30) "Wie oft zockst du im Internet?"
["type"]=>
string(12) "range_single"
["anzval"]=>
NULL
["id"]=>
string(1) "4"
["range"]=>
string(1) "6"
}
[5]=>
array(5) {
["title"]=>
string(25) "Was zockst du am meisten?"
["type"]=>
string(11) "range_multi"
["anzval"]=>
string(1) "3"
["id"]=>
string(1) "8"
["range"]=>
string(1) "4"
}
}

vt1816
17.09.2009, 15:21:35
Es wird keine Werte für Deine 2. Schleife geben bzw. stehst Du am Ende der Datensätze.

fil3s
17.09.2009, 15:43:52
sry, aber ich verstehe nicht ganz.
Der soll das fetch_array in while #2 einfach nochmal ausführen, das tut er aber nicht und ich versteh leider nicht ganz. Ich habe schon probiert $werte durch ein 2d-array $werte[$j] zu ersetzen, das bei jeder while schleife ein neues array gebildet wird, aber das gab den exakt gleichen Effekt.

vt1816
17.09.2009, 16:07:26
[...]
Der soll das fetch_array in while #2 einfach nochmal ausführen, das tut er aber nicht..

Dazu muß man sich aber am Anfang des Arrays befinden und nicht wie bei Dir am Ende (nach dem ersten Durchlauf) - verstanden?

fil3s
17.09.2009, 17:25:01
Ah, ja jetzt hats geklickt!

Und dieses Problem kann ich umgehen indem ich einfach den query in die erste while-schleife setze, und somit bei jedem durchlauf einen neuen aufruf zu starten, dann wäre der zähler ja wieder auf null, oder?

vt1816
17.09.2009, 18:04:32
Ja.