Möglichst einfach ein Formular mit php speichern?

Guten Tag,

also eines vorweg: ich bin eine php-Null und hab momentan leider auch keine Zeit, meine Kenntnisse zu verbessern. Alles was ich kann, ist bestehenden Code so zu verändern, dass er für eine Website, die ich betrue, passt.

Jetzt will ich eine Umfrage machen, die auf einem Formular basiert - das Ergebnis soll in eine MySQL-DB gespeichert werden.

WAS ICH WEISS: Wie man variablen erzeugt, sie mit der Eingabe einer Textbox füllt und das ganze dann abschickt/speichert.

WAS ICH NICHT WEISS: Wie das ganze mit Radio-Buttons und Textboxen funktioniert. Anscheinend geht es nicht, dass man zB einfach zwei Radio-Buttons „rb_gender“ mit den values „m“ und „w“ hat und die variable mit „$geschlecht=rb_gender.selectedvalue“ füllt (oder so auf die art…). meine Recherchen haben ergeben, dass man für jede mögliche auswahl eines radiobuttons eine eigene variable braucht, was natürlich ziemlich umständlich is…

WAS ICH GERNE HÄTTE: eine Formular-Vorlage, bei der eine Tabelle in einer DB mit variablen aus Textboxen, Checkboxen und Radiobuttons gefüllt wird (zB Name: textbox, Geschlecht: radiobutton, Hobbies: Textbox/Mehrfachauswahl) - so dass ich das ganze nach meinem kreativen Guddüngen umschreiben kann, und nicht das Rad neu erfinden muss. Das ganze sollte so wenig umständlich wie möglich sein…

Lg&Dankeschön

hi,

dies ist eigentlich ganz einfach und auch nicht schwierig.

hier mal ein Beispiel-Code, welcher bei Absenden das $_POST - Array ausgibt.

Reiten
Schwimmen
Tanzen
Männlich
Weiblich

<?php if(isset($_POST["submit_test"])){
print\_r($\_POST); } ?\> Folgendes zur Erklärung der Radios. Du kannst aus mehreren Radios eine Gruppe bilden, indem du den Namen (name="") immer gleich und den value (value="") unterschiedlich definierst, dann kannst du aus dieser Gruppe nie 2 Radios gleichzeitig auswählen. Dieses Formular gibt dir das Post-array wieder, wenn du auf absenden drückst, da kannst du mal ein bischen rumexperimentieren. Du benötigst eigentlich keine seperaten Variablen weil du ja schon alles in dem Post-array drinstehen hast. Um auf die Daten zugreifen zukönnen, musst du einfach nur den Namen (name="") an das Post-array anhängen, dies sieht so aus: echo $\_POST["text1"]; Ich hoffe, ich konnte dir einen guten Ansatz geben Gruß Prahkael

Hallo,

vielen Dank für den Code und die nette Erklärung!!!
Eines bleibt mir aber trotzdem noch unklar:

ich will die Eingabe ja in eine MySQL DB speichern - also muss ich der Auswahl (bei Checkbox und Radio button) bzw. der Eingabe (bei Textbox) ja eine Variable zuweisen, damit ich die Variable dann in die MySQL Datenbank schreiben kann.

Das ist was ich mir ungefähr vorgestellt habe (funktioniert so aber natürlich / leider nicht)…:

<?php $server = "...";
$user = "..."; $pass = "..."; $connection = @mysql\_connect($server,$user,$pass); $db = "..."; mysql\_select\_db($db, $connection); ?\><?php // Hier werden die Variablen erzeugt
$gender=""; $age=""; $auswahl=""; // Hier wird die DB gefüllt, zusätzlich zu den 3 Variablen wird die ip des Benutzers gespeichert if (isset($\_POST['gender'])) { $ip=$\_SERVER['REMOTE\_ADDR']; $gender=$\_POST['gender']; $age=$\_POST['age']; $auswahl=$\_POST['auswahl']; $querystr="INSERT INTO umfrage (ip,gender,age,auswahl) VALUES ('$ip','$gender','$age','$auswahl')"; mysql\_query($querystr,$connection) or die(mysql\_error()); } ?\> **Umfrage** // Gender weiblich mänlich <?php $gender=rb_gender.SelectedValue();
// Ja ich weiß, dass "SelectedValue()" bullshit ist und es die klasse in php nicht gibt... Aber wie kann ich mit einem PostArray eine string-variable füllen? ?\> // Age - das müsste so funktionieren // Auswahl Wasser Cola Wein Bier <?php // Hier weiß ich auch nicht, wie ich eine Mehrfachauswahl als string übergeben kann... Eventuell alle ausgewählten mit ";" trennen...?
?\> // ABSENDEN

hi,

wie genau hast du dir das mit der Datenbank vorgestellt?

Du hast da jetzt zum Beispiel diese Checkboxen mit Wasser, Cola, Wein und Bier. Wie willst du diese Daten jetzt in die DB speichern, wenn zum Beispiel einer alles ausgewählt hat. Wie sieht da deine DB struktur aus?

Gruß

Prahkael

Hallo,

hätte am liebsten String-Felder in der Datenbank.
Wenn jetzt zB jemand nur Bier auswählt, sollte der String „Bier“ übergeben werden, wählt er zusätzlich Wein aus, soll der String um „; Wein“ erweitert werden… würde das vielleicht mit einer while-schleife gehen?

lg

hi,

würde gehen aber meiner Meinung nach zu Performance lastig.

Wesentlich einfacher währe es, wenn du eine seperate Tabelle anlegst. Du hast ja deine Tabelle, in der jeder Benutzer enthalten ist und jeder Benutzer hat eine eindeutige ID. Mit dieser ID kannst du wunderbar arbeiten. Du würdest also eine 2te Tabelle anlegen, in der die fortlaufende ID drin steht, dann die ID des Kunden und dann kannst du die Getränke reinschreiben. Jedes Getränk eine Zeile
Beispiel:

id-----kdid-----getraenk
1-------1--------Bier
2-------1--------Wasser
3-------2--------Cola
4-------1--------Fanta

Du kannst dir somit alle Daten des Benutzer mit der ID 1 anzeigen lassen. Und hier könntest du auch mit einer While-Schleife und MySQL Num Rows arbeiten für evtl einen Nachtrag zu machen.

Gruß

Prahkael

hallo!

funktioniert leider nicht so… das formular soll nicht für registrierte benutzer sein - es soll eine umfrage werden, die jeder besucher der seite ausfüllern und abschicken kann. nach ein paar tagen will ich die daten aus der mysql-db auswerten…

lg

weiblich
mänlich
Wasser
Cola
Wein
Bier

<?php if(isset($_POST["submit"])){
//zählen, wieviele Inhalte das Array $\_POST["auswahl"] hat //da das Zählen bei 1 losgeht und das Array bei 0 startet wird noch - 1 gerechnet $count = count($\_POST["auswahl"]) - 1; // for-schleife // $i startet bei 0 und die schleife wird solange durchgeführt und $i um 1 erhöht, bis $i gleich $count ist. for($i = 0; $i \<= $count; $i++){ // wenn $i 0 ist, ist das somit der erste eintrag und die Variable wird befüllt. if($i == 0){ $auswahl = $\_POST["auswahl"][$i] . "; "; // wennn $i = $count ist, so ist dies der letzte Eintrag und es wird kein weiters ; mehr benötigt }elseif($i == $count){ $auswahl .= $\_POST["auswahl"][$i]; // ansonsten wird danach immer noch ein ; angehängt }else{ $auswahl .= $\_POST["auswahl"][$i] . "; "; } } // $auswahl ist nun ein string echo $auswahl; // die restlichen Daten kannst du direckt aus dem $\_POST array ziehen } ?\> Gruß Prahkael

Hallo,

danke für den code und die comments!!! Damit ist mir viel weiter geholfen! allerdings gibt es noch zwei kleine probleme…

  1. schreibt es mir im feld „auswahl“ in der tabelle immer nur den text „Array“. es hat erst schon funktioniert, $auswahl mit echo richtig auszugeben, aber gespeichert hat es trotzdem nru „Array“. Hab auch versucht, die Schleife vor dem Submit-Button zu verwenden, hat aber nix gebracht. Jetzt (warum auch immer?!) funktioniert auch das echo nicht mehr…

  2. bei deinem code wird die Radiobox-auswahl nicht übergeben, oder? wie weiße ich nun der variable $gender das value der box zu?

liebe Grüße!


Hier mein Code (ohne Radioboxen…):

<?php $server = "...";
$user = "..."; $pass = "..."; $connection = @mysql\_connect($server,$user,$pass); $db = "..."; mysql\_select\_db($db, $connection); ?\><?php $auswahl="123"; //um zu sehen, ob sich die variable verändert...
$comment="123"; if (isset($\_POST['comment'])) { $ip=$\_SERVER['REMOTE\_ADDR']; $auswahl=$\_POST['auswahl']; $comment=$\_POST['comment']; $querystr="INSERT INTO meinetabelle (ip,auswahl,comment) VALUES ('$ip','$auswahl','$comment')"; mysql\_query($querystr,$connection) or die(mysql\_error()); } ?\> Wasser Cola Wein Bier <?php if(isset($_POST["submit"])){
$count = count($\_POST["auswahl"]) - 1; for($i = 0; $i \<= $count; $i++){ if($i == 0){ $auswahl = $\_POST["auswahl"][$i] . "; "; }elseif($i == $count){ $auswahl .= $\_POST["auswahl"][$i]; }else{ $auswahl .= $\_POST["auswahl"][$i] . "; "; } } echo $auswahl; } ?\>

hi,

zu Frage 1:
erstens:
Nach deinem Code zufolge ist es ganz klar, warum er Array in die Tabelle schreibt, weil du ja erst den MySQL befehl ausfürst und dann die Umwandlung startest. Wenn du das umgekehrt machen würdest dann funzt es auch.

zweitens:
Das Echo funzt nicht, weil keine Daten übermittelt werden. Grund: Dein Array heißt $_POST[„submit“] und dein HTML Button heißt name=„Submit“ weiblich
mänlich

dann sind die radio´s in einer Gruppe und es kann immer nur einer aktiv sein. Also heißt es $_POST[„rb_gender“] (wenn du versuchst echo $_POST[„rb_gender“] dann bekommst du entweder m oder w angezeigt, sofern du eines ausgewählt hast)

Gruß

Prahkael

PS: Versuch mal den HTML Code von PHP Code zu trennen also nicht HTML PHP HTML PHP sondern zum Beispiel erst HTML und dann PHP Code oder umgekehrt, aber nicht abwechselnd. Es ist zwar egal, wie du es schreibst, weil eh erst deine eine Code und dann erst der andere ausgeführt wird, aber es sieht strukturierter aus und man blickt schneller durch : )

Hallo,

dankeschön, absenden/echo und die radio-buttons funktionieren jetzt :smile:

nur das problem mit dem array besteht weiter… hab den mysql befehl jetzt hinten angehängt, trotzdem wird immer nur „Array“ gespeichert. In Punkto Datenbankstruktur hab ich „VCHAR“ und „TEXT“ probiert, also daran kann es glaub ich nicht liegen…

Und eine Frage hätt ich noch: das ganze soll als include laufen (http://www.dr-zeller.com/Version2/index.php?mode=umf…), aber wenn man auf den Button klickt, wird immer die datei direkt aufgerufen, nicht die eingebundene version… weißt du zufällig, woran das liegen kann?

liebe grüße

ps: hier nochmal der aktuelle code:

<?php //DB Connection is eh bekannt...
?\> Wasser Cola Wein Bier weiblich mänlich <?php if(isset($_POST["submit"])){
//zählen, wieviele Inhalte das Array $\_POST["auswahl"] hat //da das Zählen bei 1 losgeht und das Array bei 0 startet wird noch - 1 gerechnet $count = count($\_POST["auswahl"]) - 1; // for-schleife // $i startet bei 0 und die schleife wird solange durchgeführt und $i um 1 erhöht, bis $i gleich $count ist. for($i = 0; $i // wenn $i 0 ist, ist das somit der erste eintrag und die Variable wird befüllt. if($i == 0){ $auswahl = $\_POST["auswahl"][$i] . "; "; // wennn $i = $count ist, so ist dies der letzte Eintrag und es wird kein weiters ; mehr benötigt }elseif($i == $count){ $auswahl .= $\_POST["auswahl"][$i]; // ansonsten wird danach immer noch ein ; angehängt }else{ $auswahl .= $\_POST["auswahl"][$i] . "; "; } } // $auswahl ist nun ein string echo $auswahl; // die restlichen Daten kannst du direckt aus dem $\_POST array ziehen } // In die Datenbank schreiben... $comment=""; if (isset($\_POST['comment'])) { $ip=$\_SERVER['REMOTE\_ADDR']; $auswahl=$\_POST['auswahl']; $comment=$\_POST['comment']; $gender=$\_POST["rb\_gender"]; $querystr="INSERT INTO umfrage\_5y (ip,auswahl,comment,gender) VALUES ('$ip','$auswahl','$comment','$gender')"; mysql\_query($querystr,$connection) or die(mysql\_error()); } ?\>

hi,

zu erstens

ja, ich weiss woran es liegt, warum er dir Array in die DB reinschreibt und zwar liegt das an folgendem:

Du ziehst dir den Inhalt des $_POST[„auswahl“] in die for-Schleife, bearbeitest diese dann und wandelst es in einen String um und speicherst es in $auswahl.
Soweit so gut aber Folgende Frage:

if (isset($_POST[‚comment‘]))
{
$ip=$_SERVER[‚REMOTE_ADDR‘];

$auswahl=$_POST[‚auswahl‘]; /* ab oder du postest mal den Inhalt von umfrage_5y.inc.php.

Gruß Prahkael

WUNDERBAR! Jetzt funktioniert alles so wie ich es mir vorsgestellt habe! 1000 DANK für den zeitaufwendigen Support!!!