Daten in MySQL eintragen

hallo!

ich bin am verzweifeln. ich habe 5 radiobuttons für jede meiner fragen. ich habe eine dynamische umfrage. jetzt möchte ich die angeklickten werte einfach in die datenbank übertragne, aber schaffe es nicht.

bitte um hilfe!!!

Ascom Kundenumfrage

<?php include "inc/connect.php";
$sql = "SELECT \* FROM Frage"; $result = mysql\_query($sql) OR die(); $i=1; while ($row = mysql\_fetch\_assoc($result)) { $frage[$i]= $row['Frage']." "; $frage= $\_POST['frage']; $query = "INSERT INTO Antwort('Antwort') VALUES ('$frage') "; mysql\_query ($query); $i++; } if (isset($\_GET['id'])) { $id = $\_GET['id']; } else { $id =1; } if ($id==7) { $nextsite = "seite3.php"; } else { $nextsite = "seite2.php?id=".($id+1); } if ($id==1) { $backbutton = ""; } else { $backbutton = ""; } ?\> <?php echo ceil((100/9*$id)); ?>% abgeschlossen

Seite echo $id ?>

Beurteilung

(Bitte zutreffendes Feld ankreuzen!)

Sehr zufrieden
++
Zufrieden

Teilweise zufrieden

Nicht zufrieden

Keine Angabe
/
echo $frage[$id]?>

Kommentar:

echo $backbutton; ?>

danke

lg Manuel

Hallo.

Ich hab deinen Code nur kurz überflogen, aber ohne Fehlermeldung, kann man sowieso nichts darüber aussagen.

Schreib mal bei dieser Zeile:

mysql\_query($query) or die(mysql\_error());

Nun hast du eine Fehlermeldung von SQL.

Gruss Sebastian

Hi

$sql = "SELECT \* FROM Frage";
$result = mysql\_query($sql) OR die();

$i=1;
while ($row = mysql\_fetch\_assoc($result)) {
 $frage[$i]= $row['Frage']."
";
 $frage= $\_POST['frage'];
 $query = "INSERT INTO Antwort('Antwort') VALUES ('$frage') ";
 mysql\_query ($query);
 $i++;
}

Hier fragst du in der 1. Zeile eine Tabelle „Frage“ ab.
Das Ergebniss durchläufst du mit der whileschleife. Dann speicherst du die Spalte Frage in der Variablen „frage“ als array. In der nächsten Zeile überschreibst du die Variable „frage“ mit der radiobutton antwort aus dem formular. Danach speicherst du die Antwort in der Tabelle Antwort.

So … nun zu dem was du eigentlich willst.

Du willst wenn jemand eine antwort auf deinem Formular gibt diese eine Antwort in die Tabelle kommmt. Also fragen wir als nächstes erstmal ab ob es überhaupt eine antwort gibt.

if ( isset($\_POST['frage']) ) 
{

}

so damit haben wir schon mal das Frage erstellen vom Frage auswerten getrennt. Weiter:

Jetzt mußt du schauen ob die antwort die dort in $_POST[‚frage‘] steht auch wirklich stehen darf (security). Also machen wir uns ein kleines array (scheint ja auf jeder seite die gleichen antworten zu geben) wo die Antworten die kommen können drin stehen. Also:

var antworten = array('sz', 's', 'z', 'ka', 'nz');

So nun müssen wir überprüfen ob die antwort passt:

if ( in\_array($\_POST['frage'], $antworten) ) 
{
 // die Antwort gibt es, hier können wir weiter arbeiten
}
else
{
 // Die Antwort gibt es nicht Fehlerbehandlung
}

So nach dem wir sicher sind das es die Antwort gibt wollen wir die Antwort speichern.

$query = 'INSERT INTO antworten SET 
 antwort="' . mysql\_real\_escape\_string($\_POST['frage'] . '"';
mysql\_query($query);

So damit steht die Antwort gespeichert in der Datenbank.

Was ich ändern würde:

  1. Die $_POST[‚frage‘] sollte $_POST[‚antwort‘] sein da es die antwort beinhaltet ansonsten kommt man durcheinander wenn man das in 10 Wochen noch mal ändern will.

  2. Würde ich noch den User der die Antwort gibt mit abspeichern und auch die Zeit wann er geantwortet hat.

  3. würde ich das antwort array am anfang der Seite deklarieren und nicht nur die antworten damit speichern sondern daraus auch die antworten im html-Formular bilden. So brauchst du später nur noch das array ändern und nicht im html mehr rumkramen.

Soviel dazu … hoffe das hilft dir. Auch wenn ich noch einiges andere anders machen würde sollte dir das erstmal helfen :smile: hoff.

Gruß Lamer

Alleine diese Zeile

$query = "INSERT INTO Antwort('Antwort') VALUES ('$frage') ";

Dürfte nur immer wieder $frage als antwort speichern. Richtig wäre:

 $query = 'INSERT INTO Antwort("Antwort") VALUES ("' . $frage . '")';

Das wäre dann soweit richtig. Aber für ein besseres Verständniss (wenn man es denn schon so macht) wäre diese Vorgehensweise besser:

 $query = 'INSERT INTO antworten SET antwort= "' . mysql\_real\_escape\_string($frage) . '"';
  1. Anstatt die Tabelle Antwort zu nennen … ist der Name „antworten“. Warum: Tabellennamen sollten immer klein geschrieben werden und in der Tabelle steht nicht eine antwort sondern mehrere antworten.
  2. für die sicherheit mysql_real_escape_string damit du keine MySQL-Injections ausversehen mit abspeicherst.

Gruß Lamer

PS: War mehr für den Threadersteller als für dich Sebastian …

1 Like

Diese Zeile hilft mit bestimmt.

"' . mysql\_real\_escape\_string($frage) . '"

Besten dank.

Gruss Sebastian

hallo!

also irgendwie bin ich jetzt noch mehr verwirrt. ich kopiere jetzt noch einmal den code herein. kannst du mir bitte einfach die unnötigen zeilen löschen und einfach soweit wie möglich das meiste richtig stellen?

meine tabellen heißen trotzdem „Frage“ und „Antwort“, sonst verwirrt mich das jetzt noch mehr, und wie gesagt die antwort ist ja kein array sondern ein radio button.

bitte nochmals um hilfe.

Ascom Kundenumfrage

<?php include "inc/connect.php";
$sql = "SELECT \* FROM Frage"; $result = mysql\_query($sql) OR die(); $i=1; while ($row = mysql\_fetch\_assoc($result)) { $frage[$i]= $row['Frage']." "; $i++; } if (isset($\_GET['id'])) { $id = $\_GET['id']; } else { $id =1; } if ($id==7) { $nextsite = "seite3.php"; } else { $nextsite = "seite2.php?id=".($id+1); } if ($id==1) { $backbutton = ""; } else { $backbutton = ""; } if ( isset($\_POST['frage']) ) { } var Antwort = array('sz', 's', 'z', 'ka', 'nz'); if ( in\_array($\_POST['Antwort'], $Antwort) ) { // die Antwort gibt es, hier können wir weiter arbeiten } else { // Die Antwort gibt es nicht Fehlerbehandlung } $query = 'INSERT INTO antworten SET antwort="' . mysql\_real\_escape\_string($\_POST['frage'] . '"'; mysql\_query($query); ?\> <?php echo ceil((100/9*$id)); ?>% abgeschlossen

Seite echo $id ?>

Beurteilung

(Bitte zutreffendes Feld ankreuzen!)

Sehr zufrieden
++
Zufrieden

Teilweise zufrieden

Nicht zufrieden

Keine Angabe
/
echo $frage[$id]?>
value=„sz“ />
value=„z“ />
value=„tz“ />
value=„nz“ />
value=„ka“ checked />

<?php $antwort = $_POST['Antwort'];
$query = "INSERT INTO Antwort('Antwort') VALUES ('$antwort') "; mysql\_query ($query); ?\> Kommentar: echo $backbutton; ?\>

hallo!

also irgendwie bin ich jetzt noch mehr verwirrt. ich kopiere jetzt noch einmal den code herein. kannst du mir bitte einfach die unnötigen zeilen löschen und einfach soweit wie möglich das meiste richtig stellen?

meine tabellen heißen trotzdem „Frage“ und „Antwort“, sonst verwirrt mich das jetzt noch mehr, und wie gesagt die antwort ist ja kein array sondern ein radio button.

bitte nochmals um hilfe.

Ascom Kundenumfrage

<?php include "inc/connect.php";
$sql = "SELECT \* FROM Frage"; $result = mysql\_query($sql) OR die(); $i=1; while ($row = mysql\_fetch\_assoc($result)) { $frage[$i]= $row['Frage']." "; $i++; } if (isset($\_GET['id'])) { $id = $\_GET['id']; } else { $id =1; } if ($id==7) { $nextsite = "seite3.php"; } else { $nextsite = "seite2.php?id=".($id+1); } if ($id==1) { $backbutton = ""; } else { $backbutton = ""; } if ( isset($\_POST['frage']) ) { } var Antwort = array('sz', 's', 'z', 'ka', 'nz'); if ( in\_array($\_POST['Antwort'], $Antwort) ) { // die Antwort gibt es, hier können wir weiter arbeiten } else { // Die Antwort gibt es nicht Fehlerbehandlung } $query = 'INSERT INTO antworten SET antwort="' . mysql\_real\_escape\_string($\_POST['frage'] . '"'; mysql\_query($query); ?\> <?php echo ceil((100/9*$id)); ?>% abgeschlossen

Seite echo $id ?>

Beurteilung

(Bitte zutreffendes Feld ankreuzen!)

Sehr zufrieden
++
Zufrieden

Teilweise zufrieden

Nicht zufrieden

Keine Angabe
/
echo $frage[$id]?>
value=„sz“ />
value=„z“ />
value=„tz“ />
value=„nz“ />
value=„ka“ checked />

<?php $antwort = $_POST['Antwort'];
$query = "INSERT INTO Antwort('Antwort') VALUES ('$antwort') "; mysql\_query ($query); ?\> Kommentar: echo $backbutton; ?\>

Hi Maunel … wenn du Zeit hast und nen Messenger … dann sag mal wie ich dich erreiche … dann setzen wir uns mal in verbindung.

Ich bin gern bereit zu helfen … allerdings mußt du die lösung schon alleine finden.

Gruß Lamer

PS: Wenn du einen Mann ein paar Tage ernähren willst schenk ihm ein paar Fische. Wenn du ihn für immer satt machen willst dann zeig ihm wie man angelt. Daher … :smile:

1 Like

hallo!

ja mir wäre es über msn messenger am liebsten. hast du den auch?

meine e-mail für dort: [email protected]

hast du vielleicht heute noch zeit weil ich bräuchte das ziemlich dringend?

danke

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hallo!

also der Lamer war gestern so nett und hat mir bei nahezu all meinen problemen geholfen. ein paar kleinigkeiten fehler mir aber leider noch.

ich habe eine index.php auf dieser habe ich ein textfeld mit dem namen „auftrag“, in das kann der kunde etwas hineinschreiben. jetzt habe ich versucht, dass er den inhalt des feldes in die datenbank schreibt, aber leider funktioniert es nicht.

auf seite2.php habe ich folgenden code zum eintragen eingegeben:

$query = ‚INSERT INTO User SET Produkt="‘ . mysql_real_escape_string($_POST[‚auftrag‘]);

also er soll es in die tabelle „User“ und dort in die Spalte „Produkt“ schreiben. leider gibt er mir folgende meldung aus:

Notice: Undefined index: auftrag in D:\Programme\xampp\htdocs\ascom\prototyp\seite2.php on line 28

line 28 ist diese:

$query = ‚INSERT INTO User SET Produkt="‘ . mysql_real_escape_string($_POST[‚auftrag‘]);

bitte um hilfe!

lg Manuel

@Lamer, wenn du zeit hast, kannst du irgendwann im laufe des Abends wieder in den Messenger kommen? Danke

Hi

Ruft denn die Form von „index.php“ die „seite2.php“ auf?

Gruß Lamer

Hi

Ruft denn die Form von „index.php“ die „seite2.php“ auf?

Gruß Lamer

ja tut sie!

hast du heute vielleicht irgendwann am nachmittag zeit, dass du online kommst? ich habe ab 13 uhr zeit.

lg Manuel

Hallo Manuel,

ich würde auf unvollständiges Statement tippen:

$query = 'INSERT INTO User SET Produkt="' . 
 mysql\_real\_escape\_string($\_POST['auftrag']);

Man sollte den String im SQL-Statement auch beenden.

$query = 'INSERT INTO User SET Produkt="' . 
 mysql\_real\_escape\_string($\_POST['auftrag']). 
 '"';

Bitte gewöhn Dir doch auch einige Grundtechniken an: Hier im Forum z.B. das pre-Tag und im PHP/MySQL Fehlerfall nicht nur den SQL-Fehler sondern auch das verwendete Statement ausgegeben.

MfG Georg V.

es kommt noch immer genau die selbe fehlermeldung!!!

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

es kommt noch immer genau die selbe fehlermeldung!!!

Hallo Manuel,
error_reporting(E_ALL);

im Source-Code stehen? Dies würde bedeuten, dass Du _kein_ $_POST[‚auftrag‘] gefüllt hast (eventuell ein $_POST[‚Auftrag‘]?). Das kannst Du durch ein print_r($_POST); erfahren vor Deiner Zeile erfahren. Der SQL-Befehl ist mit dem abschließenden Gänsefüßchen " auf jeden Fall korrekt, daß habe ich durch einen kleinen Test gerade nochmal verifiziert.

MfG Georg V.

hallo Georg V. :wink:

schau es ist so, ich habe eine seite index.php, auf dieser habe ich das textfeld „auftrag“, in das der user etwas hineinschreiben kann.

und auf seite2.php (die nach index.php aufgerufen wird), möchte ich das geschriebene in die datenbank tabelle „User“ Spalte „Produkt“ eintragen. wenn ich das mit dem print mache, kommt nur:

Array ( )
Notice: Undefined index: auftrag in D:\Programme\xampp\htdocs\ascom\prototyp\seite2.php on line 27

was muss ich da davor noch hinschreiben (auf index.php oder seite2.php) damit er mir den inhalt des textfeldes ordnungsgemäß in die datenbank einträg?

ps: hast du vielleicht auch msn messenger, denn da geht die erklärung etwas flotter als immer hier zu schreiben.

meine msn-adresse: [email protected]

lg Manuel :smile:

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

@Lamer

ich bräuchte bei ein paar kleinigkeiten so dringend deine hilfe. könntest du heute abend oder morgen vormittag unbedingt in den messenger kommen?

hier ist es so kompliziert zum schreiben.

vielen dank

ps: schreib mich bitte an, wenn du kurz zeit hast.

lg Manuel

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]