Mehrere Formular-Felder gleichzeitig in DB eintragen

Eistee

Erfahrenes Mitglied
Hi,
ich stehe grad vor nem großen kleinen Problem - oder einfach nur auf der Schlauch :rolleyes:
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 :confused:

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!
 

Anhänge

  • form.gif
    form.gif
    1,6 KB · Aufrufe: 91
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
 
Dr Dau hat gesagt.:
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.
 
Hi wenn ich das richtig verstanden habe könnte man es so lösen.
mfG Drade

PHP:
<?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);
}

?>
 
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.
 
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:
<?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
 
Zuletzt bearbeitet:
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:
$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:
<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?
 
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:
<!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:
<?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')
 
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?
 
Zurück