Hallo,
ich möchte gerne einen Fragenkatalog über ein Formular in die MySQL DB speichen.
Der Fragenkatalog enthält ca. 150 Fragen.
Ich hab einiges im Netz gefunden.
Was soll passieren:
Entweder sollen die Fragen einzeln im Form angezeigt werden oder z.B. immer 10 Fragen immer auf einmal.
Ich habe eine Tabelle (user) mit den Feldern id, frage, abtwort, comment.
UNten habe ich zwar soweit hinbekommen, dass die Fragen angezeigt bekommen, nur werden die Antworten nicht gespeichert Immer nur die letzte.
Für einen Tipp wäre ich dankbar.
ich möchte gerne einen Fragenkatalog über ein Formular in die MySQL DB speichen.
Der Fragenkatalog enthält ca. 150 Fragen.
Ich hab einiges im Netz gefunden.
Was soll passieren:
Entweder sollen die Fragen einzeln im Form angezeigt werden oder z.B. immer 10 Fragen immer auf einmal.
Ich habe eine Tabelle (user) mit den Feldern id, frage, abtwort, comment.
UNten habe ich zwar soweit hinbekommen, dass die Fragen angezeigt bekommen, nur werden die Antworten nicht gespeichert Immer nur die letzte.
Für einen Tipp wäre ich dankbar.
PHP-Code:
<?php
/*
* Created on 14.01.2010 by Nico Schubert
*/
/**
* Der Host von der MySQL Datenbank, worauf ein
Zugriff gemacht werden soll.
*/
$datenbank_host = 'localhost';
/**
* Der MySQL User womit eine Verbindung zur MySQL
Datenbank hergestellt werden soll.
*/
$datenbank_user = 'root';
/**
* Das entsprechende Datenbankpasswort, vom MySQL
User.
*/
$datenbank_passwort = 'root';
/**
* Der Name von der MySQL Datenbank
*/
$datenbank_name = 'qa1986';
/**
* Definieren von den Variablen
*/
if (!isset($_POST['senden'])) $_POST['senden'] = '';
$nr = 1;
while($row = mysql_fetch_assoc($result)) {
if (!isset($_POST['answer[$nr]'])) $_POST['answer[$nr]'] = '';
if (!isset($_POST['comment[$nr]'])) $_POST['comment[$nr]'] = '';
}
/**
* Prüfen, ob die Variablen einem Wert gespeichert
haben. Wenn dies der Fall ist speichern wir
den Eintrag in der MySQL Datenbank.
*/
if ($_POST['senden'] != '' AND $_POST['answer'] != '' AND $_POST['comment'] != '') {
/**
* Aufbau der MySQL Verbindung anhand der MySQL
Verbindungsdaten, der Rückgabewert von
der PHP Funktion mysql_connect() ist die
Verbindungskennung. Die
Verbindungskennung wird in der Variable
$link gespeichert. Damit keine PHP
Fehlermeldung ausgegeben wird, stellen
die ein @ Zeichen vor die PHP Funktion.
*/
$link = @mysql_connect($datenbank_host, $datenbank_user, $datenbank_passwort);
/**
* Prüfen ob eine Verbindungskennung in der
Variable $link enthalten ist, wenn keine
Verbindung aufgebaut werden konnte, steht
in der Variable ein false, wofür man
entsprechend eine Fehlermeldung ausgeben
kann und anschließend das Script
abbrechen kann.
*/
if (!$link) {
die('keine Verbindung möglich: ' .mysql_error());
}
/**
* Die Datenbank auswählen anhand der der
Verbindungskennung, die PHP-Funktion
mysql_select_db() gibt in Fehlerfall ein
false zurück. Damit wir diesen Status
überprüfen können, speichern wir den
Rückgabewert in der Variable $db_selected.
*/
$db_selected = @mysql_select_db($datenbank_name, $link);
/**
* Prüfen ob in der Variable $db_selected kein
false steht, wenn ein false hinterlegt
ist, wird automatisch mit der PHP
Funktion die() das Script abgebrochen und
entsprechend eine Fehlermeldung ausgegeben.
*/
if (!$db_selected) {
die ('Kann '.$datenbank_name.' nicht benutzen : ' . mysql_error());
}
/**
* Nun speichern wir in der Variable
$sql_insert unserer SQL Abfrage, die wir
an die MySQL Datenbank stellen möchten.
Zum speichern von neun Datensätzen müssen
wir INSERT INTO angeben um einen neuen
Datensatz zu speichern, nach INSERT INTO
muss der Name der Tabelle folgen. In
unserem Beispiel lautet der Name `user`.
Anschließend geben wir in den ersten
Klammerbereich an, für welche Felder
entsprechende Daten im zweiten
Klammerbereich liefern. Wir möchten einen
Eintrag in den Feldern `answer` und
`name` machen, daher müssen wir diese im
ersten Klammerbereich angeben.
*
* Im zweiten Klammerbereich übermitteln wir
unsere entsprechenden Daten. Die Daten
sind in den Variablen $_POST['answer']
und $_POST['name'] gespeichert. Bevor wir
diese Daten in der Datenbank speichern
können, sollte man mit der PHP Funktion
mysql_escape_string() die Daten escapen,
damit kein Fehler bei falsch eingegebenen
Daten erfolgt.
*
* Hinweis: Bitte gewöhnen sie sich für die
Zukunft an, alle Daten von den speichern
oder updaten mit der PHP Funktion
mysql_escape_string() zu escapen.
Ansonsten ist es möglich ein so genannte
SQL Injection zu machen. Mehr zu diesem
Thema finden sie unter der Adresse:
http://de.wikipedia.org/wiki/SQL-Injection
*/
$sql_insert = "INSERT INTO `user` (`answer`,`comment`) VALUES('".mysql_escape_string($_POST['answer'])."', '".mysql_escape_string($_POST['comment'])."');";
/**
* Wenn wir nun unser SQL Statement
zusammengesetzt haben, können wir dieser
Anfrage mit der PHP Funktion
mysql_query() an die MySQL Datenbank
senden. Um die PHP-Funktion mysql_query()
zu verwenden, geben wir im ersten
Parameter die Variable $sql_insert an, wo
unser SQL Statement darin gespeichert
ist. Im zweiten Parameter geben wir
unsere Verbindungskennung mit an. Somit
wird unserer geöffnete Verbindung verwendet.
*
* Die PHP-Funktion mysql_query() liefert in
Fehlerfall ein false zurück. Um dieses
false abzufangen prüfen wir mit einer IF
Anweisung, ob kein false zurückgeliefert
wird. Zusätzlich stellen wir vor der
Funktion mysql_query() ein @ Zeichen,
damit keine PHP Fehlermeldung ausgegeben
wird. Wenn sie ein neues PHP-Script
entwickeln, sollten sie vorher das @
Zeichen entfernen. Denn mit dieser
Fehlermeldung kommt man sehr häufig den
Fehler auf die Schliche.
*/
if (@mysql_query($sql_insert, $link) != false) {
/**
* Wenn kein Fehler aufgetreten ist, geben
wir eine Meldung mit den Befehl echo
aus, dass die Daten erfolgreich
gespeichert wurden. Zusätzlich leeren
wir die Variable $_POST['answer']
und $_POST['name'], damit das
Formular automatisch wieder leer ist.
*/
echo 'Der Eintrag wurde gespeichert!';
$_POST['answer'] = '';
$_POST['comment'] = '';
} else {
/**
* Sollte ein Fehler beim Speichern des
Eintrags aufgetreten sein, geben wir
eine entsprechende Fehlermeldung aus.
*/
echo 'Der Eintrag wurde nicht gespeichert!';
}
/**
* Jetzt schließen wir die aktuelle Verbindung
zur MySQL Datenbank mit dem Befehl
mysql_close(), hierzu geben wir die
aktuelle Verbindungskennung, die wir in
der Variable $link gespeichert haben als
ersten Parameter an.
*/
@mysql_close($link);
}
/**
* So zu guter letzt benötigen wir noch das
Formular, was wir absenden möchten. Dies
erstellen wir und geben dies mit Echo aus. Da
dieses Formular dynamisch generiert wird und
mehrere Variablen hat, trennen wir das
Formular nicht von PHP Code.
*
* Als erstes benötigen wir bei unserem Formular,
die Angabe wohin das Formular gesendet werden
soll. Hierzu geben wir action="" die Adresse
über die globale Servervariable
$_SERVER['PHP_SELF'] an, dass die gleiche
Adresse verwendet werden soll, wie das
aktuelle Script aufgerufen wurde. Da man an
dieser Stelle zum Beispiel Variablen an die
Adresse hängen könnte, wandeln wir mit der
PHP Funktion htmlspecialchars() alles
Sonderzeichen in den entsprechenden HTML Code um.
*
* Nun müssen wir noch zusätzlich in form Tag die
Übertragungsmethode angeben, dies machen wir
mit method="post" und dadurch werden auch nur
Postdaten an unser Script übermittelt. Als
nächstes müssen wir noch zusätzlich die zwei
Formularfelder ausgeben und den
entsprechenden Absender Button, um das
Formular abzusenden.
*/
echo '<form action="'.htmlspecialchars($_SERVER['PHP_SELF']).'" method="post">';
/* echo ' answer: <input type="text" name="answer" value="'.htmlspecialchars($_POST['answer']).'"/><br/>'; */
$dbhandle = mysql_connect("localhost","root","root");
$db = mysql_select_db("qa1986", $dbhandle);
$result = mysql_query("SELECT * FROM user");
echo mysql_num_rows($result).'<br/>';
$count = 1;
while($row = mysql_fetch_assoc($result)) {
echo '<br/>' . $count . '/' . mysql_num_rows($result) . ' (' . $row['id'].')<br/>';
echo 'Frage: ' . $row['frage'].'<br/>';
echo ' Antwort:
<input type="radio" name="answer" value="Ja" />Ja
<input type="radio" name="answer" value="Vielleicht" />Vielleicht
<input type="radio" name="answer" value="Nein" />Nein<br />';
$answer = isset($_POST['answer']);
echo ' Kommentar: <input type="text" name="comment" value="'.htmlspecialchars($_POST['comment']).'"/><br/>';
echo ' <input type="submit" name="senden" value="absenden"/><br/>';
$count++;
}
echo '</form>';
?>
Kommentar