Datenbankeintrag aus einer for-schleife

mkoeni1

Erfahrenes Mitglied
Hallo Leute,

ich habe ein Problem.
In meinem Script lese ich aus einer Datenbank alle Felder aus.
PHP:
while($row=mysql_fetch_array($resultfrag)) {
                                    $id=$row["frageid"];
                                    $fragedb=$row["fragedb"];
                                    echo "<tr>";
                                        echo "<td><b>Kapitel:</b></td>";
                                        echo "<td colspan=\"5\" align=\"center\">$fragedb</td>";
                                        echo "</tr><tr><td><b>Bewertung:</b></td>";


an die Rfage hänge ich Icon aus einem Array an.

PHP:
// icons auflisten
                                        for($i = 0; $i<=4; $i++){
                                            echo "<td align=\"center\">$imgarray[$i]</td>";
                                        }

und zum schlluß noch input Felder um eine Auswahl zu treffen.
PHP:
echo "</tr><tr><td></td>";
                                        //input felder auflisten
                                        for($j=0;$j<=4;$j++){
                                            echo "<td align=\"center\"><input type=\"radio\" name=\"bewertung\" value=\"$j\"></td>";
                                        }
                                        // Abstand dazwischen
                                        echo "</tr><tr><td colspan=\"6\"><img src='images/1pixt.gif' width='1' height='10' alt='' border='0'></td></tr>";
                                }


Komplett sieht das Script dann wie folgt aus.
PHP:
<?php 
include ("db_frag.php");
$resultfrag = mysql_query("SELECT * FROM $dbtable");
                
                // 1. Standard-Kategorie
                
                        $imgarray = array('<img src="images/sgut.gif" width="15" height="15" alt="sehr gut" border="0">', 
                                                  '<img src="images/gut.gif" width="15" height="15" alt="gut" border="0">',
                                                  '<img src="images/befr.gif" width="15" height="15" alt="befr" border="0">',
                                                  '<img src="images/ausr.gif" width="15" height="15" alt="ausr" border="0">',
                                                  '<img src="images/mangl.gif" width="15" height="15" alt="mangl" border="0">',
                                                 );
                        print_r($imgarray); 
                    
                        echo "<table border='1' cellpadding='0' cellspacing='3'>";
                        echo "<tr>";
                        echo "<td><img src='images/1pixt.gif' width='100' height='1' alt='' border='0'></td>";
                        echo "<td><img src='images/1pixt.gif' width='100' height='1' alt='' border='0'></td>";
                        echo "<td><img src='images/1pixt.gif' width='100' height='1' alt='' border='0'></td>";
                        echo "<td><img src='images/1pixt.gif' width='100' height='1' alt='' border='0'></td>";
                        echo "<td><img src='images/1pixt.gif' width='100' height='1' alt='' border='0'></td>";
                        echo "<td><img src='images/1pixt.gif' width='100' height='1' alt='' border='0'></td>";
                        echo "</tr>";
                        // SQL fetch row fragedb and fragid
                                while($row=mysql_fetch_array($resultfrag)) {
                                    $id=$row["frageid"];
                                    $fragedb=$row["fragedb"];
                                    echo "<tr>";
                                        echo "<td><b>Kapitel:</b></td>";
                                        echo "<td colspan=\"5\" align=\"center\">$fragedb</td>";
                                        echo "</tr><tr><td><b>Bewertung:</b></td>";
                                        // icons auflisten
                                        for($i = 0; $i<=4; $i++){
                                            echo "<td align=\"center\">$imgarray[$i]</td>";
                                        }
                                        echo "</tr><tr><td></td>";
                                        //input felder auflisten
                                        for($j=0;$j<=4;$j++){
                                            echo "<td align=\"center\"><input type=\"radio\" name=\"bewertung\" value=\"$j\"></td>";
                                        }
                                        // Abstand dazwischen
                                        echo "</tr><tr><td colspan=\"6\"><img src='images/1pixt.gif' width='1' height='10' alt='' border='0'></td></tr>";
                                }
?>

Das ganze gehört natürlich zu einem Formular ;-)
Jetzt mein Problem.
Ich kann zwar mit Icons (Bewertungen) auswählen aber nur einmal Hat jmd. eine Idee wie ich das anderst machen könnte. Die Angaben sollen in einer Datenbank gespeichert werden.


Vielen Dank
Matze
 
Das hier noch keiner geantwortet hat könnte damit zusammenhängen das die Frage, auch für mich, etwas unverständlich ist.

Sollen die User 2 Bewertungen gleichzeitig abgeben? (Note 1 und 6 gleichzeitig?) was kein Sinn macht, daher denke ich das ist nicht das Problem.
Wobei ich jetzt auch keinen Weg wüsste, wie man 2 Radiobuttons gleichzeitig auswählen kann, wenn sie den gleichen namen haben (HTML Arrays dürften auch nicht gehen)

Geht es darum, das wenn 2 Bewertung(icons) gewählt wurden, diese dann in die DB zu schreiben?

Vielleicht wäre ein paar Hinweise zu der Frage vielleicht doch besser ;)
Danke und

Gruss
 
Sorry, wenn ich mich undeutlich ausgedrückt habe, beim ersten Posting.

Es ist ganz einfach ;-) Aber ich komme nicht dahinter :-(
Es geht darum einen Button pro Schleifendurchgang (pro frage) auszwählen der dann in der DB gespeichert werden soll. Es kann nur 1 Button ausgewählt werden (also zB. 3).

Mein Problem:
1. die Unterscheidung der Buttons (for Schleife von 1-5) in jeder Fragenkategorie.
Idee. 2 for-Schleifen ?
2. wie bekomme ich jede Bewertung (zB. Frage 1 - Bewertung 4, Frage 2 - Bewertung 2, Frage 3 - Bewertung 4, usw.) in die Datenbank ? Um das Ergebnis später wieder abzurufen.

Danke
Matze
 
Ok, du wirst sicherlich in der Tabelle auch nen Primary Key ( ne Fragen ID) haben.

Diese könntest du an den Namen des Feldes der Radiobuttins anhängen.
Bsp:
PHP:
//input felder auflisten
 for($j=0;$j<=4;$j++)
echo "<td align=\"center\"><input type=\"radio\" name=\"bewertung_".$row["frageid"]."\" value=\"$j\"></td>";

Wenn du dann die Radiobuttons auf der Folgeseite auswerten willst, schaust du dir die gelieferten Namen der Radiobuttons an:
PHP:
FOREACH($_POST AS $postkey => $postvalue)
{
 IF(preg_match('/^bewertung_([0-9]*)/', $postkey)) // hier wird geprüft, ob wirklich nur "bewertungsfelder" genommen werden: 
//Format: bewertung_ZAHL (Zahl wäre dann ID der Frage in der DB
 {
   $expl = explode('_', $postkey);
   $ergebnis[$expl[1]] = $postvar;
 }
}
echo '<pre>';
echo var_dump($ergebnis);
echo '</pre>';

Die $ergebnis Variable ist dann ein Array, wobei der Index immer die ID der Frage in der DB wäre und der Inhalt die Bewertung.

Hoffe das war so gemeint. Ist nicht perfekt, aber würde eine Möglichkeit aufzeigen.

Gruss
 
Vielen Dank, soweit sehr, sehr gut ;-) Kompliment.

Wenn ich mir das Ergebnis auf der Auswerten Seite ausgebe bekomme ich für den Inhalt der Bewertung immer einen NULL-Wert.
HTML:
array(2) {
  [298]=>
  NULL
  [296]=>
  NULL
}

PHP:
FOREACH($_POST AS $postkey => $postvalue) 
{ 
 IF(preg_match('/^bewertung_([0-9]*)/', $postkey)) // hier wird geprüft, ob wirklich nur "bewertungsfelder" genommen werden:  
//Format: bewertung_ZAHL (Zahl wäre dann ID der Frage in der DB 
 { 
   $expl = explode('_', $postkey); 
   $ergebnis[$expl[1]] = $postvar; 
 } 
} 
echo '<pre>'; 
echo var_dump($ergebnis); 
echo '</pre>';
muss hier nich noch die Variable bewertung angehängt werden ? Ich kenne mich in PHP noch nicht so gut aus.


Vielen Dank
 
Schreibfehler schon in meinem Post:

FOREACH($_POST AS $postkey => $postvalue)
Hier steht $postvalue.
$ergebnis[$expl[1]] = $postvar;
und hier $postvar.

$postvar muss geändert werden in $postvalue.
Also:
$ergebnis[$expl[1]] = $postvalue;

Gruss
 
Sehr gut, sehr gut.Vielen Dank, die nächste Frage die sich mir stellt. Wie bekomme ich aus dem Array die einzelnen Zuordnungen raus ?

HTML:
array(5) {
  [302]=>
  string(1) "1"
  [300]=>
  string(1) "2"
  [299]=>
  string(1) "3"
  [298]=>
  string(1) "2"
  [303]=>
  string(1) "1"
}

ich würde gern zB. zu Frage 302 eine Ausgabe zuweisen.
zb:
PHP:
if([302]=='1'){
echo "Note 1";
}

Anderst ausgedrückt, wie bekomme ich die Werte aus dem Array in die Datenbank ?

Gibt es da eine Funktion ?



Viele Grüße Matze
 
Ok, einerseits ist das schon in dem ForEach Part möglich, wo wir das array $ergebnis aufbauen.

Sprich dort kannst du dann direkt schreiben (sollte man zumindest):

PHP:
FOREACH($_POST AS $postkey => $postvalue) 
{ 
 IF(preg_match('/^bewertung_([0-9]*)/', $postkey))
 { 
   $expl = explode('_', $postkey); 
   mysql_query('INSERT INTO ergebnistabelle (frageid, bewertung) VALUES('.$expl[1].', '.$postvalue.')');
 } 
}

Das ist nur ein Beispiel. Hier werden die ID der Frage und die dazugehörige Bewertung in die Tabelle 'ergebnistabelle' geschrieben.

Wenn du mit dem Array $ergebnis weiterarbeiten willst:
Ich weiss nicht ob du weisst, welche Frage und damit welche ID gerade beantwortet wurde, daher würde ich das Array $ergebnis wieder mit foreach durcharbeiten.

PHP:
FOREACH($ergebnis AS $frageid => $bewertung)
{
  echo 'Die Frage mit der ID: '.$frageid.' wurde mit '.$bewertung.' bewertet';
  echo 'Das schreiben wir jetzt in die Tabelle "ergebnistabelle".';
  mysql_query('INSERT INTO ergebnistabelle (frageid, bewertung) VALUES('.$frageid.', '.$bewertung.')');
      echo '<br>Die Frage mit der ID: '.$frageid.' und Bewertung'.$bewertung.' wurde in die DB geschrieben.';
}

So zum Beispiel. Hoffe das ist verständlich.

Nochmal zu deinem Post:
PHP:
if([302]=='1'){
echo "Note 1";
}

Um auf einzelne Elemente des Arrays direkt zugreifen zu können (dafür musst du aber die ID der Frage wissen), kannst du das so machem

PHP:
IF($ergebnis['302'] == 1)
  echo 'Note 1';

Gruss

//edit Hoffe das reicht für den Anfang. Weitere Fragen zu Arrays kannst du im Manual auf http://www.php.net/array nachlesen. Ich mach jetzt mal "Support"-Feierabend :)
 
Zuletzt bearbeitet:
Zurück