tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
12
ZUGRIFFE
562
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Eistee
    Eistee Eistee ist offline Mitglied Gold
    Registriert seit
    Oct 2003
    Ort
    Sauerland
    Beiträge
    195
    Hi,
    ich stehe grad vor nem großen kleinen Problem - oder einfach nur auf der Schlauch
    Jedefalls habe ich ein Formular dass so aussieht: siehe Anhang

    In diesme Formular könne, wie ihr seht 4 Antworten eingetragen werden und eine mit Hilfe der radio-Buttons als richtig markiert werden.
    Nun weiss ich allerdings nicht, wie ich die Daten möglichst sinnig in meine DB eintrage

    Die DB hat folgende Strktur:
    | answer | correct |

    Die Textfelder haben die id "answer1" bis "answer4".
    Die radio-buttons haben die id "correct und die Werte "1" bis "4".

    Nun soll für jeder der 4 eingetragenen Antworten ein datensatz in die DB geschrieben werden, wobei das Feld "correct" den Wert "1" bekommen soll, wenn der entsprechende radio-button ausgewählt wurde.
    Wie bekomme ich das am einfachsten und logischsten hin?
    Hoffe, ihr könnt mir helfen, da ich hier ziemlich auf dem Schlauch stehe.
    Danke!
    Miniaturansicht angehängter Grafiken Miniaturansicht angehängter Grafiken Mehrere Formular-Felder gleichzeitig in DB eintragen-form.gif  
     

  2. #2
    Avatar von Dr Dau
    Dr Dau Dr Dau ist offline ich wisch hier durch
    Registriert seit
    Feb 2005
    Ort
    hinterm Mond gleich Links
    Beiträge
    6.160
    Blog-Einträge
    4
    Hallo!

    Verstehe ich es richtig?!
    Du hast keine Frage?
    Darauf soll der User 4 Antworten geben können?
    Diese Anworten soll er auch noch selbst definieren können und selbst entscheiden können welche davon korrekt ist?

    Hmm, wo steckt dort die Logik?!
    Mal abgesehen davon, Radio-Buttons sind nicht für eine Mehrfachauswahl gemacht.

    Gruss Dr Dau
     
    Schri-Schra-Schrödi *g*
    mehrspaltiges/zeiliges Seitenlayout mit DIV's und CSS
    Dinge, die mit Tabellen besser klappen als mit CSS
    Ausgabe von Datum/Zeit unabhängig von der Server Zeitzone [php]
    Meine Links zum Thema Linux (Last update: 29.10.2011)
    Kein Busen ist so flach wie das Niveau dieser Party!
    ----
    Alte Weisheit: wer uns in den Arsch kriecht wird beschissen!
    ----
    Ich habe 3 Kinder und kein Geld!
    Warum kann ich nicht keine Kinder haben und 3 Geld?! (Homer Jay Simpson)

  3. #3
    Avatar von Eistee
    Eistee Eistee ist offline Mitglied Gold
    Registriert seit
    Oct 2003
    Ort
    Sauerland
    Beiträge
    195
    Zitat Zitat von Dr Dau
    Hallo!
    Verstehe ich es richtig?!
    ...
    Gruss Dr Dau
    Nein, du verstehst überhaupt nix

    Es handelt sich hierbei um den admin-Teil eines Quizes.
    In dieser Maske werden eine Frage (der Teil ist auf dem Screenshot nicht zu sehen, da er für die Fragestellung nicht relevant ist) und 4 Antwortmöglichkeiten eingeben. Ausserdem wird über die radio-buttons 1 der Antworten als richtig markiert.
    Was weiter passieren soll hab ich ja bereits oben beschrieben.

    Genau da liegt ja auch mein Problem - und nicht bei Sinn und Unsinn der Eingabemaske.

    Hoffe, ihr könnt mir trotzdem helfen.
     

  4. #4
    Drade Drade ist offline Mitglied Silber
    Registriert seit
    Nov 2005
    Beiträge
    58
    Hi wenn ich das richtig verstanden habe könnte man es so lösen.
    mfG Drade

    PHP-Code:
    <?php

    //ersetzte dur deine Configdatei etc.
    include("mysqlconnect.php");

    if(isset(
    $anser1) && isset($anser2) && isset($anser3) &&isset($anser4)){

    if(
    $radio == answer1){
    $insert1 "INSERT INTO deinetabelle (answer, correct) VALUES ('$answer1','1')";
    }else{
    $insert1 "INSERT INTO deinetabelle (answer, correct) VALUES ('$answer1','0')";
    }

    if(
    $radio == answer2){
    $insert1 "INSERT INTO deinetabelle (answer, correct) VALUES ('$answer2','1')";
    }else{
    $insert1 "INSERT INTO deinetabelle (answer, correct) VALUES ('$answer2','0')";
    }

    if(
    $radio == answer3){
    $insert1 "INSERT INTO deinetabelle (answer, correct) VALUES ('$answer3','1')";
    }else{
    $insert1 "INSERT INTO deinetabelle (answer, correct) VALUES ('$answer3','0')";
    }

    if(
    $radio == answer4){
    $insert1 "INSERT INTO deinetabelle (answer, correct) VALUES ('$answer4,'1')";
    }else{
    $insert1 "INSERT INTO deinetabelle (answer, correct) VALUES ('$answer4','0')";
    }

    mysql_query($insert1);
    mysql_query($insert2);
    mysql_query($insert3);
    mysql_query($insert4);
    }

    ?>
     

  5. #5
    Avatar von Eistee
    Eistee Eistee ist offline Mitglied Gold
    Registriert seit
    Oct 2003
    Ort
    Sauerland
    Beiträge
    195
    Im Prinzip richtig verstanden
    Ich hatte bloß gehofft, dass es auch etwas kompakter geht...
     

  6. #6
    Drade Drade ist offline Mitglied Silber
    Registriert seit
    Nov 2005
    Beiträge
    58
    Du könntest es auch in einer schleife abfragen lassen aber kompakter wird es dadurch nicht, da auch die Schleife die selben abfragen durchführen muss.
     

  7. #7
    Registriert seit
    Dec 2001
    Ort
    Hannover
    Beiträge
    4.234
    Natürlich geht das kompakter...

    Ich erweitere mal das an sich schon gute Beispiel:

    Du gibst den Textfeldern folgende Namen:
    answer[0], answer[1], answer[2], answer[3]
    oder auch einfach allen
    answer[]
    PHP, schreibt alle angaben in ein Array. Das Gleiche passiert mit Textfeld correct. Nur das Du als Standardwert '0' wählst, und in angeklicktem zustand soll als '1' verschickt werden.

    Das kannst du wie folgt abfragen.

    PHP-Code:
    <?php
    // Nimm die POST Daten in Empfang und schreibe sie in ein Array
    $arr_values['answer'] = $_POST['answer'];
    $arr_values['correct'] = $_POST['correct'];
    // Alle Werte stehen nun in einem Array bereit

    //ersetzte durch deine Configdatei etc.
    include("mysqlconnect.php");

    // nun bilden wir eine kleine schleife
    for($i=0;$i<count($arr_values['answer']);$i++){
        
    $answer $arr_values['answer'][$i];
        
    $correct $arr_values['correct'][$i];
        
    // bilde SQL-Befehl
        
    $sql "INSERT INTO deinetabelle (answer,correct) VALUES ('$answer','$correct')";
        
    // Es folgt Deine Datenbankverbindung
        
    $query mysql_query($sql);
    }
    // Die Schleife führt in diesem Beispiel 4 Verbindungen durch
    ?>
    P.S.: Ungetestet und in 2 Minuten zusammengetippt
    Und obendrein die Anzahl der Antworten quasi unbegrenzt ohne das man das Script abändern müßte
    Geändert von Neurodeamon (30.11.05 um 21:31 Uhr)
     
    Copy for free - Yet another page for free software with soures:
    • BitUnlocker (Automatic unlock multiple Bitlocker secured drives - if you use the same password)
    • W7 ScrollZoom (Use Windows 7 zoom tool through your mouse wheel)
    • AppStarter (Somewhat like PortableApps launcher)
    • QuakeConsole (Show/Hide windows console with your tilde key)
    • BetterFileRenamer (Simple file renamer that adds date and version)
    .... more to come

  8. #8
    Avatar von Eistee
    Eistee Eistee ist offline Mitglied Gold
    Registriert seit
    Oct 2003
    Ort
    Sauerland
    Beiträge
    195
    Danke für deine Lösung!
    So hab ich mir das in etwa vorgestellt.
    Ein Problem gibts aber immer noch.
    Wenn ich nun die Antworten in die DB schreiben lasse, so hat "correct" beim ersten datensatz immer den Wert "1", alle weiteren haben den Wert "0" - egal welchen der 4 radio-buttons ich auswähle

    Hier nochmal der Code:
    PHP-Code:
    $arr_values['answer'] = $_POST['answer'];
            
    $arr_values['correct'] = $_POST['correct']; 
            
            for(
    $i=0$i<count($arr_values['answer']); $i++)
            {
                
    $answer $arr_values['answer'][$i];
                
    $correct $arr_values['correct'][$i];
                
    $sqlab "INSERT INTO `quiz_answers` (answer, correct) VALUES ('$answer', '$correct')";
                
    mysql_query($sqlab);
            } 
    Der passende HTML Teil schaut so aus:
    HTML-Code:
    <tr>
                      <td><strong>Antwort 1: </strong></td>
                      <td><input name="answer[]" type="text" class="forminput" id="answer[]" size="40" />
                        <input type="radio" name="correct[]" value="1" id="correct[]" />
                      </td>
                    </tr>
                    <tr>
                      <td><strong>Antwort 2:</strong> </td>
                      <td><input name="answer[]" type="text" class="forminput" id="answer[]" size="40" />
                        <input type="radio" name="correct[]" value="1" id="correct[]" />
                      </td>
                    </tr>
                    <tr>
                      <td><strong>Antwort 3: </strong></td>
                      <td><input name="answer[]" type="text" class="forminput" id="answer[]" size="40" />
                        <input type="radio" name="correct[]" value="1" id="correct[]" />
                      </td>
                    </tr>
                    <tr>
                      <td><strong>Antwort 4: </strong></td>
                      <td><input name="answer[]" type="text" class="forminput" id="answer[]" size="40" />
                        <input type="radio" name="correct[]" value="1" id="correct[]" />
                      </td>
                    </tr>
    Wo liegt der Fehler?
     

  9. #9
    Registriert seit
    Dec 2001
    Ort
    Hannover
    Beiträge
    4.234
    Ich glaube ich weiß woran es liegt. Die leeren Radiobuttons sind wahrscheinlich die Übeltäter. Ich habe eine weitere Abfrage eingefügt, welche die leeren Werte auf »0« setzt. Vermutlich wurde in der SQL-Spalte der Standardwert »1« genommen und Wert NOT NULL eingestellt.Mysql fügt die »1« ein wenn leere Werte durchlaufen.

    Ich habe das Script modifiziert, es gibt jetzt keine leeren Werte:
    formular.html
    HTML-Code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
    <html>
    <head>
        <title></title>
    </head>
    <body>
    <form method="post" action="proc.php" name="test">
        <table>
            <tr>
                <td><strong>Antwort 1:</strong></td>
                <td><input name="answer[]" type="text" class="forminput" id="answer[]" size="40">
                <input type="radio" name="correct[]" value="1" id="correct[]"></td>
            </tr>
            <tr>
                <td><strong>Antwort 2:</strong></td>
                <td><input name="answer[]" type="text" class="forminput" id="answer[]" size="40">
                <input type="radio" name="correct[]" value="1" id="correct[]"></td>
            </tr>
            <tr>
                <td><strong>Antwort 3:</strong></td>
                <td><input name="answer[]" type="text" class="forminput" id="answer[]" size="40">
                <input type="radio" name="correct[]" value="1" id="correct[]"></td>
            </tr>
            <tr>
                <td><strong>Antwort 4:</strong></td>
                <td><input name="answer[]" type="text" class="forminput" id="answer[]" size="40">
                <input type="radio" name="correct[]" value="1" id="correct[]"></td>
            </tr>
        </table>
        <input name="send" value="Abschicken" type="submit">
    </form>
    </body>
    </html>

    proc.php
    PHP-Code:
    <?php
    // Nimm die POST Daten in Empfang und schreibe sie in ein Array
    $arr_values['answer'] = $_POST['answer'];
    $arr_values['correct'] = $_POST['correct'];
    // Alle Werte stehen nun in einem Array bereit

    //ersetzte durch deine Configdatei etc.
    // include("mysqlconnect.php");

    // nun bilden wir eine kleine schleife
    for($i=0;$i<count($arr_values['answer']);$i++){
        
    $answer $arr_values['answer'][$i];
        
    $correct $arr_values['correct'][$i];
        if(
    $correct == ''){$correct 0;}
        
    // bilde SQL-Befehl
        
    $sql "INSERT INTO deinetabelle (answer,correct) VALUES ('$answer','$correct')";
        
    // Es folgt Deine Datenbankverbindung
        // $query = mysql_query($sql);
        
    echo $sql."<br>\n";
    }
    // Die Schleife führt in diesem Beispiel 4 Verbindungen durch
    ?>
    Ausgabe meiner Testausgaben im Browser:
    INSERT INTO deinetabelle (answer,correct) VALUES ('Der Ball ist rund!','1')
    INSERT INTO deinetabelle (answer,correct) VALUES ('Der Ball ist flach!','0')
    INSERT INTO deinetabelle (answer,correct) VALUES ('Der Ball ist platt!','0')
    INSERT INTO deinetabelle (answer,correct) VALUES ('Der Ball ist weg!','0')
     
    Copy for free - Yet another page for free software with soures:
    • BitUnlocker (Automatic unlock multiple Bitlocker secured drives - if you use the same password)
    • W7 ScrollZoom (Use Windows 7 zoom tool through your mouse wheel)
    • AppStarter (Somewhat like PortableApps launcher)
    • QuakeConsole (Show/Hide windows console with your tilde key)
    • BetterFileRenamer (Simple file renamer that adds date and version)
    .... more to come

  10. #10
    Avatar von Eistee
    Eistee Eistee ist offline Mitglied Gold
    Registriert seit
    Oct 2003
    Ort
    Sauerland
    Beiträge
    195
    Ich hab deine Änderung nun ebefalls vorgenommmen - geändert hat sich dadurch allerdings nichts
    Es wird immer nur im ersten Datensatz der Wert für correct auf "1" gesetzt. Alle weiteren haben immer den Wert "0".
    Noch eine Idee?
     

  11. #11
    Registriert seit
    Dec 2001
    Ort
    Hannover
    Beiträge
    4.234
    Ja, habe noch eine Idee. Da natürlich (woran ich hornochse nicht gedacht habe) nur eine Checkbox übertragen wird (also eine 1), gibt das correct array nur einen unterpunkt. Alle anderen bleiben leer.
    Sprich: Der erste treffer ist immer 1 (egal was man auswählt) und alle anderen werden 0

    Sorry... Ich ändere es fix und editiere diesen Post hier

    EDIT:

    formular.html
    HTML-Code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
    <html>
    <head>
        <title></title>
    </head>
    <body>
    <form method="post" action="proc.php" name="asdf">
        <table>
            <tr>
                <td><strong>Antwort 1:</strong></td>
                <td><input name="answer[]" type="text" class="forminput" id="answer[]" size="40">
                <input type="radio" name="correct[]" value="1" id="correct[]"></td>
            </tr>
            <tr>
                <td><strong>Antwort 2:</strong></td>
                <td><input name="answer[]" type="text" class="forminput" id="answer[]" size="40">
                <input type="radio" name="correct[]" value="2" id="correct[]"></td>
            </tr>
            <tr>
                <td><strong>Antwort 3:</strong></td>
                <td><input name="answer[]" type="text" class="forminput" id="answer[]" size="40">
                <input type="radio" name="correct[]" value="3" id="correct[]"></td>
            </tr>
            <tr>
                <td><strong>Antwort 4:</strong></td>
                <td><input name="answer[]" type="text" class="forminput" id="answer[]" size="40">
                <input type="radio" name="correct[]" value="4" id="correct[]"></td>
            </tr>
        </table>
        <input name="send" value="Abschicken" type="submit">
    </form>
    </body>
    </html>
    proc.php
    PHP-Code:
    <?php
    // Nimm die POST Daten in Empfang und schreibe sie in ein Array
    $arr_values['answer'] = $_POST['answer'];
    $correct_num $_POST['correct'][0];
    // Alle Werte stehen nun in einem Array bereit
    //ersetzte durch deine Configdatei etc.
    // include("mysqlconnect.php");

    // nun bilden wir eine kleine schleife
    for($i=0;$i<count($arr_values['answer']);$i++){
        
    $answer $arr_values['answer'][$i];
        if (
    $i == $correct_num-1){$correct 1;}else{$correct 0;}
        
    // bilde SQL-Befehl
        
    $sql "INSERT INTO deinetabelle (answer,correct) VALUES ('$answer','$correct')";
        
    // Es folgt Deine Datenbankverbindung
        // $query = mysql_query($sql);
        
    echo $sql."<br>\n";
    }
    // Die Schleife führt in diesem Beispiel 4 Verbindungen durch
    ?>
    Erläuterung:
    Da die Checkboxen nur eine Datenfragment versenden, wird das Array "correct" nur mit einem Wert 1 gefüllt, der an position »0« sitzt. Weitere Werte werden nicht gefüllt (was natürlich der sinn der checkbox ist). Daher habe ich einfach jede Checkbox mit einem Wert gefüllt der eindeutig ist: nämlich der Position 1-4. So wird zwar nur ein Datenfragment übertragen, aber das enthält die Zahl 1 - 4 (was 0-3 entspricht), womit wir feststellen können welche Antwort die 1 in die Datenbank bekommt und welche die 0.

    So funktioniert es, habe es diesmal auch überprüft. Sorry nochmal, das hätten wir uns sparen können
    Geändert von Neurodeamon (02.12.05 um 00:06 Uhr)
     
    Copy for free - Yet another page for free software with soures:
    • BitUnlocker (Automatic unlock multiple Bitlocker secured drives - if you use the same password)
    • W7 ScrollZoom (Use Windows 7 zoom tool through your mouse wheel)
    • AppStarter (Somewhat like PortableApps launcher)
    • QuakeConsole (Show/Hide windows console with your tilde key)
    • BetterFileRenamer (Simple file renamer that adds date and version)
    .... more to come

  12. #12
    Avatar von Eistee
    Eistee Eistee ist offline Mitglied Gold
    Registriert seit
    Oct 2003
    Ort
    Sauerland
    Beiträge
    195
    Super!
    Dank dir!
    Manchmal liegt die Lösung vor einem und man findet sie trotzdem nicht...
    Da kann ich ja jetzt beruhigt schlafen gehen
     

  13. #13
    Registriert seit
    Dec 2001
    Ort
    Hannover
    Beiträge
    4.234
    Gern geschehen
     
    Copy for free - Yet another page for free software with soures:
    • BitUnlocker (Automatic unlock multiple Bitlocker secured drives - if you use the same password)
    • W7 ScrollZoom (Use Windows 7 zoom tool through your mouse wheel)
    • AppStarter (Somewhat like PortableApps launcher)
    • QuakeConsole (Show/Hide windows console with your tilde key)
    • BetterFileRenamer (Simple file renamer that adds date and version)
    .... more to come

Ähnliche Themen

  1. SQL Abfrage: Feldname und gleichzeitig Anzahl gefüllter Felder ausgeben
    Von teefit im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 13.10.09, 14:59
  2. Mehrere Checkboxes in DB eintragen
    Von louS im Forum PHP
    Antworten: 1
    Letzter Beitrag: 09.10.09, 15:31
  3. Mehrere Datensätze eintragen
    Von 22hase im Forum PHP
    Antworten: 3
    Letzter Beitrag: 22.12.08, 14:32
  4. [mySQL] mehrere Formulardaten gleichzeitig eintragen
    Von piano im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 26.04.08, 07:48
  5. Formular 2x value eintragen ?
    Von starfoxfs im Forum PHP
    Antworten: 5
    Letzter Beitrag: 01.12.04, 02:17