Probleme bei Wertübetragung mit Sessions und formularen

  • Hi,
    ich programmiere einen IQ-test. Dafür habe ich eine Datenbank mit Fragen und Antworten erstellt. Die Fragen werden bei jedem Seitenaufruf zufällig aus der DB ausgewählt. Ich habe nun für den Admin eine Seite programmiert, mit der er neue Fragen in die DB hinzufügen kann. Damit meine Auswertung dynamisch auf die Fragen reagieren kann musste ich folgendes machen:


    In die Auswertung werden die Eingaben nun mit hidden-Feldern übertragen:

    PHP
    $q0=$_SESSION['q0'];
    
    
    <input type="hidden" name="Frage1" value="<?php $_POST["F$q0"]; ?>">


    Jetzt will ich den übertragenen Wert in einer Variable speichern, damit ich ihn dann mit der Lösung abgleichen kann:

    Code
    $Fr($q0)= $_POST["F$q0"];


    Für diese Zeile kriege ich jedoch die Fehlermeldung:
    Fatal error: Can't use function return value in write context...
    Kann mir jemand sagen warum das nicht funktioniert?

  • $Fr($q0)= $_POST['F$q0'];

    vielleicht bin ich grad doof, aber was machen die runden klammern da bei $Fr? die deuten doch eigentlich auf einen funktionsaufruf hin, dem kann aber glaub ich kein wert zugewiesen werden? ^^

  • Ja, danke. $Fr muss ein Array sein -> deswegen $Fr[$q0]

    Ich habe jetzt noch ein Problem. Das hat mit dem vorangegengenen zwar nix zu tun, aber ich will jetzt nicht extra ein neues Thema aufmachen.
    Bei der Auswertung der Antworten der Fragen des Iq-tests sieht der Benutzer als Ausgabe folgenden Text:
    Frage1: 15, 25, 37, 51, 67, ihre Antwort 85 ist richtig! bzw.
    Frage3: 30, 29, 27, 26, 24, ihre Antwort: 45 Richtige Antwort: 23
    Nun habe ich auch Fragen, die mithilfe von Radiocheckbuttons beantwortet werden müssen. In meiner DB habe ich eine Tabelle mit den Fragen samt Antwortoptionen.Wenn nun eine Testperson eine der Checkboxen anklickt wird der Wert(1 oder 2 oder ...) der markierten Box auf die Auswertungsseite in das Array z.B. $Fr[$q9] geschrieben. Wenn die Testperson die Frage falsch beantwortet will ich eben die falsche Antwort nochmal anzeigen lassen. Die auswerung geschieht folgendermaßen:

    Code
    $query= "SELECT * FROM `Maße und Gewichte` WHERE id ='$q9'";
    			$result = mysql_query($query, $db);
    			while ($row = mysql_fetch_assoc($result)){
    				$F2[1] = $row["Frage"];
    				$A12[1] = $row["Antwort1"];
    				$A22[1] = $row["Antwort2"];
    				$A32[1] = $row["Antwort3"];
    				$A42[1] = $row["Antwort4"];
    				$A52[1] = $row["Antwort5"];


    Um die falsche Antwort anzuzeigen muss ich z.B. dastehen haben:

    Code
    echo $A22[1]


    Welche Antwort jetzt gewählt wurde ist ja im oben genannten Array $Fr[$q9] gespeichert. Das Problem ist:
    Ich muss es irgendwie hinkriegen mit $A ???? $Fr[$q9] ??? 2 ???? [1] als $A22[1] dastehen zu haben.

  • Code
    $zwi = 'A'.$Fr[$q9].'2';
    $$zwi = array(1 => 'Dein Eintrag');

    Dann kannst du auf $A ???? $Fr[$q9] ??? 2 ???? [1] als $A22[1] zugreifen.

    Falls ich dich richtig verstanden habe.

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Um das mal klar zu sagen, deine datenbankstruktur ist nicht zu gebrauchen! Eine möglichkeit:

    Tabellen Fragen
    ID - Frage - Typ

    Tabelle Antworten
    ID - ID_von_Frage - Antwort - Richtig

    In der spalte typ der fragen definiertst du z.B. mit 1 = Checkboxen, mit 2 = Radio-Button mit 3 = Eingabefeld, etc.

    In der spalte Richtig definierst du mit 0=falsch, 1=richtig

    Was du da bastelst, führt unweigerlich zum chaos

  • Ich will das $A irgendwas $Fr[$q9] irg. 2 irg. [1] , $A22[1] ist. Ich muss also das Array (welches eine Zahl ist, hier soll es 2 sein) als Teil meiner Vraiablen verwenden.

  • was ist irg.?
    ein Computer kann nur auf bestimmte dinge reagieren und nicht auf irgendwas

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Das genau ist ja mein Problem. Wie kann ich das Array so in die Variable einbauen, dass $Fr[$q9] die erste Zahl bei $A22[1] darstellt. Die zweite Zahl und der Array-Index müssen auch damit verknüpft werden, damit eben die Variable $A22[1] entsteht.

  • Ähm, hau dein komplettes projekt in die tonne und fange von vorne an. Mach' dir aber erst mal ernsthaft gedanken über den aufbau der datenbank, wie du auf fragen/antworten reagieren willst und wie man am sinnvollsten einen admin-bereich aufbauen kann. Im moment scheint mir das alles nur zusammengeschustert zu sein, ohne struktur, ohne sinn und verstand. Deine Array-Konstrukte sind das reine chaos. Das hat man schon bei deinen ersten fragen zu deinem quiz feststellen könnnen. Allerdings hast du ja so ziemlich alle guten hinweise ignoriert.

    Und noch ein Tipp: http://www.php-free.de/Quiz/

    Sieh' dir mal an, wie andere das machen, daraus kannst du bestimmt eine menge lernen.

  • OK, also vergiss alles was ich geschrieben habe. Um zu deiner Lösung zurückzukommen: $zwi ist jetzt A22, oder? Durch $$zwi = array(1 => 'Dein Eintrag') entsteht jetzt ein Array,oder? Aber wie kriege ich es jetzt hin durch echo $A22[1] ; als Ausgabe meine Antwort zu bekommen?

  • Na dann habe ich das falsch erklärt. Ich weiß ja nicht ob ich $A22[1], $A32[1], ... habe. Deswegen ja der Umstand mit $Fr[$q9]. In diesem Array ist der Wert der getriggerten Antwort. Abhängig von diesem Wert will ich die Antwort aus der DB holen. Also wenn $Fr[$q9]=1 ist will ich $A12 kriegen und für $Fr[$q9]=2, $A22. Ich mache das alles ja nur um eben die Antwort auszugeben, die die Testperson ausgewählt hat. Aus meiner fragenseite kriege ich aber nur die Info über den Wert der gedrückten Checkbox geschickt. Mithilfe dieser Info will ich mir dann die Antwort aus der DB holen.

  • also der code den ich dir geschickt habe erstellt dir genau diese variable
    Also was ist das problem?

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Haaaallllooooooo??????? Ignorierst du meine antworten mit absicht????? Dein Formularaufbau ist käse, deine verarbeitung der antworten ist käse und dein db-design auch (obwohl man damit noch leben könnte) Du machst das alles viel komplizierter als nötig!!!

    Vielleicht hilft dir das:

  • Kann mal ein Moderator oder Admin diesen Thread schließen!? Wenn Krendipont alle Hinweise in den Wind schreibt, muss hier auch nicht mehr geholfen werden. :evil: Kopfschüttel :evil:

    Krendipont
    Mach' deinen Sch... alleine!

  • Ja dein Formular ist schon simpler und elleganter, aber das hilft mir bei meinem jetzigen Problem auch nicht viel.Selbst wenn ich die DB jetzt nochmal neu schreibe so wie du es vorgeshlagen hast bleibt eben das problem bestehen, wenn ich in meiner Auswertung die vom Benutzer angeklickte Antwort ausgeben möchte. Mit $_POST['antwort'][$id] habe ich auch lediglich den Value der Antwort. Um den Antworttext aus der DB zu holen, muss ich diesen Value immer noch in eine Variable einarbeiten.

  • Du hast doch dann die Variable $_POST['antwort'][$id], was willst du mehr?!?! :shock: