Problem mit Switch-Anweisung

  • Hallo,
    ich bin hier auf ein kleines Problem mit einer switch-Verzweigung gestoßen:

    Es geht um Folgendes:

    In meinem Webprojekt durchlaufen die User mehrere Tests, deren Ergebnisse in der DB abgelegt werden.
    Zu Auswertungszwecken soll das Ganze Zahlengewusel nun als CSV vorliegen.
    Die Dateien sollen dann nach dem Schema [Test]_[Datum].csv benannt werden.

    Dafür habe ich erstmal folgendes Skript erstellt (noch nicht ganz fertig).
    Nicht wundern: Da wird momentan noch nichts in Textdateien geschrieben, sondern erstmal nur eine HTML-Ausgabe erzeugt.
    Das liegt zum einen daran, dass ich noch keine Schreibrechte auf dem server hab um das richtig umzusetzen und zum anderen ist es recht bequem, das erstmal so zu testen (Da muss man nicht immer in irgendwelchen Dateien nachschauen, ob alles klar ging...).

    Das funktioniert sogar bis zu einem gewissen Grad einwandfrei...:D

    Das Problem:

    Wenn die Werte aus dem case test1 korrekt ausgegeben wurden, schreitet das Script weiter zum Szenario test2.
    Da müsste nun in etwa das Gleiche passieren und somit auch die Ausgabe ähnlich sein.

    ABER: Es wird lediglich "test2" ausgegeben und von den eigentlichen Ergebnissen ist nichts zu sehen.
    Komischerweise scheint das aber nicht am Quelltext innerhalb von test2 zu liegen, denn:

    Wenn ich die Positionen von test1 und test2 im array $test vertausche, hab ich das ganze genau umgedreht, d.h.:

    Ich bekomme die Ergebnisse von test2 einwandfrei angezeigt, aber nicht die von test1. :confused:

    Woran kann das liegen? (Ich muss dazu sagen, dass ich hier leider keine Fehlermeldungen vom Server bekomme und das selbst auch nicht umstellen kann :( )

    4 Mal editiert, zuletzt von osiris (26. Mai 2008 um 10:07)

  • PHP
    $i=0;
    
    
    for ($i=0; $i<$x; $i++) {
    
    
        $tname=$test['$i'];

    Die erste Zeile ist überflüssig. Und das Array $test hat keine Werte an den Stellen $i. Es gibt zwei Möglichkeiten, das Problem zu lösen:

    1) Du benutzt Foreach. Foreach ist die empfohlene und fast immer die effizienteste Schleifenanweisung für Arrays.

    2) Du realisierst, dass man Variablen in SQL-Abfragen auch in den Tabellennamen schreiben kann:

    PHP
    for($i = 0; $i < $x; $i++) {
        $fraternity = mysql_query("SELECT * FROM antworten$i WHERE meine mudda = deine mudda");
    }

    Und schon kannst du Switch in die Tonne kloppen. Wundertastisch.

  • Danke erstmal für die Tipps.
    Eine Frage noch:

    Und das Array $test hat keine Werte an den Stellen $i.

    Warum bekomme ich dann jeweils den Namen des Tests geliefert, wenn ich in die for-Schleife

    PHP
    $tname=$test['$i'];
    echo $tname;


    einbaue?

  • Ups, mein Fehler. Dynamische Typisierung ist böse! Wegen der Anführungszeichen dachte ich erst, du willst Strings. Nimm sie doch bitte weg, wenn du Zahlen willst.

    Dein Programm funktioniert nicht, da mysql_fetch_array/assoc/row konsumierend ist. Beim ersten Schleifendurchlauf werden die IDs herausgesaugt und sind beim zweiten Mal leer. Deswegen wird die zweite Schleife kein einziges Mal ausgeführt.

    Du solltest die IDs am Anfang des Programmes gleich in ein Array zwischenspeichern. Oder du fügst es als SQL-Unterabfrage direkt ein.

  • Und ein letzter Tipp noch: Anstatt 3749837498 Tabellen gleicher Struktur mit Antworten zu haben, solltest du besser eine Einzige anlegen, welche die Kategorie in einer extra Spalte speichert. Dann brauchst du nicht Benutzeranzahl * Antwortanzahl SQL-Abfragen, sondern mit feinen Joins nur zwei. Ich empfehle die LVA Datenmodellierung.

    Einmal editiert, zuletzt von spinball (26. Mai 2008 um 11:09)

  • Du solltest die IDs am Anfang des Programmes gleich in ein Array zwischenspeichern. Oder du fügst es als SQL-Unterabfrage direkt ein.

    Hab mich für's array entschieden. außerdem hab ich die for-Schleife und jeweils die erste while-Schleife im case durch foreach ersetzt.

    Funktioniert!
    Schreibrechte hab ich jetzt auch, mittlerweile.


    Wundertastisch.


    In der Tat!


    Anstatt 3749837498 Tabellen gleicher Struktur mit Antworten zu haben, solltest du besser eine Einzige anlegen, welche die Kategorie in einer extra Spalte speichert.

    Das gehört zum Glück nicht zu meinem Aufgabenbereich. :D
    Außerdem ist die Struktur der Tabellen (warum auch immer) nicht überall gleich. Würde also alles zu viel Overhead verursachen um noch vor der Mittagspause abgearbeitet zu werden... :)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!