Mehrere Formulardaten über ein Funktion in Mysql speichern
Hallo,
Ich bin ein newbie in php und habe folgende Frage:
Ich habe folgender Formular:
Ich will den anwnder die Möglichkeit geben, auf einmal ähnliche Informationen zu speichern
z.b.:
Name: Mark Gerudtsdatum:10101980
Name: Philip Gerudtsdatum:12031981
Name: Nadia Gerudtsdatum:12031979
Wenn ich auf OK klicke, soll mein Programm diese Daten in eine Tabelle in der mein Mysql Db speichrn.
Hofe, ihr habt meine Frage verstanden und könnt mir helfen.
sorry für meine Ausdrucksweise .. die deutsche Sprache ist nicht meine Muttersprache.
MfG
Ich bin ein newbie in php und habe folgende Frage:
Ich habe folgender Formular:
<form ..... >
<tr>
<td><input type="text" size="20" name="f_i_recipient_on" /></td>
<td><input type="text" size="40" name="f_i_subject_on" /></td>
<td><input type="text" size="20" name="f_i_l_date_on" /></td>
<td><input type="text" size="20" name="f_i_l_number_on" /></td>
<td><input type="text" size="20" name="f_i_sender_on" /></td>
<td><input type="text" size="20" name="f_i_attach_on" /></td>
<td><input type="text" size="20" name="f_i_l_type_on" /></td>
<td><input type="text" size="20" name="f_i_number_on" /></td>
</tr>
<tr>
<td><input type="text" size="20" name="f_i_recipient_on" /></td>
<td><input type="text" size="40" name="f_i_subject_on" /></td>
<td><input type="text" size="20" name="f_i_l_date_on" /></td>
<td><input type="text" size="20" name="f_i_l_number_on" /></td>
<td><input type="text" size="20" name="f_i_sender_on" /></td>
<td><input type="text" size="20" name="f_i_attach_on" /></td>
<td><input type="text" size="20" name="f_i_l_type_on" /></td>
<td><input type="text" size="20" name="f_i_number_on" /></td>
</tr>
<tr>
<td><input type="text" size="20" name="f_i_recipient_on" /></td>
<td><input type="text" size="40" name="f_i_subject_on" /></td>
<td><input type="text" size="20" name="f_i_l_date_on" /></td>
<td><input type="text" size="20" name="f_i_l_number_on" /></td>
<td><input type="text" size="20" name="f_i_sender_on" /></td>
<td><input type="text" size="20" name="f_i_attach_on" /></td>
<td><input type="text" size="20" name="f_i_l_type_on" /></td>
<td><input type="text" size="20" name="f_i_number_on" /></td>
</tr>
<input type="reset" value="abbrechen" class="btnw"/>
<input type="submit" name="submit" class="btnw" value="OK" onClick="return confirmSubmit()"/>
</form>
z.b.:
Name: Mark Gerudtsdatum:10101980
Name: Philip Gerudtsdatum:12031981
Name: Nadia Gerudtsdatum:12031979
Wenn ich auf OK klicke, soll mein Programm diese Daten in eine Tabelle in der mein Mysql Db speichrn.
Hofe, ihr habt meine Frage verstanden und könnt mir helfen.
sorry für meine Ausdrucksweise .. die deutsche Sprache ist nicht meine Muttersprache.
MfG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 141839
Url: https://administrator.de/forum/mehrere-formulardaten-ueber-ein-funktion-in-mysql-speichern-141839.html
Ausgedruckt am: 10.01.2025 um 23:01 Uhr
17 Kommentare
Neuester Kommentar
Moin,
das ist keine Frage.
a) Weisst du nicht wie du das Forumular richtig aufbauen sollst?
b) Hast du Probleme damit jedes Feld auszulesen?
c) Hast du Probleme damit die Werte in die DB zu bekommen?
...
Also - bitte stelle mal eine konkrete Frage -> dann kann man dir auch helfen! Ich weiss nämlich nicht wo das Problem nun sein soll -> ok, du klickst auf OK und das Programm soll eben speichern... Das ist ne Aussage - aber keine Frage!
das ist keine Frage.
a) Weisst du nicht wie du das Forumular richtig aufbauen sollst?
b) Hast du Probleme damit jedes Feld auszulesen?
c) Hast du Probleme damit die Werte in die DB zu bekommen?
...
Also - bitte stelle mal eine konkrete Frage -> dann kann man dir auch helfen! Ich weiss nämlich nicht wo das Problem nun sein soll -> ok, du klickst auf OK und das Programm soll eben speichern... Das ist ne Aussage - aber keine Frage!
sorry für meine Ausdrucksweise .. die deutsche Sprache ist nicht meine Muttersprache.
Und ich hätte jetzt so gerne eine Rechtschreib-Flamewar angefangen...
http://php.net/mysql_query
http://php.net/manual/de/reserved.variables.post.php
http://de.wikipedia.org/wiki/SQL-Injection#PHP
das ist eher ein HTML Problem
Beachte die [ ] !!! - damit funktionieren auch die multi-select Boxen.
jetzt bekommst Du ein multi-dim. Array über $_POST oder $_GET zurückgeliefert.
Es ist möglich mit einer Insert Anweisung mehrere Daten einzufügen.
... bei PDO ist es auch möglich eine SQL Anweisung zu übergeben und diese mit jeweils anderen Parametern wiederholt auszuführen.
<input type="text" name="name" value="" />
<input type="text" name="gebdatum" value="" />
jetzt bekommst Du ein multi-dim. Array über $_POST oder $_GET zurückgeliefert.
Es ist möglich mit einer Insert Anweisung mehrere Daten einzufügen.
INSERT INTO `tabelle` (`name`, `gebdatum`) VALUES
( ' ... ', ' ...' ),
( ' ... ', ' ... ' );
INSERT INTO `tabelle` ( `name`, `gebdatum` ) VALUES ( ?, ?);
<form action="" method="post">
Name: <input type="text" name="name" value="" /> - Geb.datum: <input type="text" name="gebdatum" value="" /><br />
Name: <input type="text" name="name" value="" /> - Geb.datum: <input type="text" name="gebdatum" value="" /><br />
Name: <input type="text" name="name" value="" /> - Geb.datum: <input type="text" name="gebdatum" value="" /><br />
Name: <input type="text" name="name" value="" /> - Geb.datum: <input type="text" name="gebdatum" value="" /><br />
<!-- usw -->
<input type="submit" name="action" value="speichern" />
</form>
Du kannst auch einen Button 'weiterer Eintrag' in dein Formular einbauen und per JS eine weitere Zeile in den FORM einfügen.
<input type="button" value="weiterer Eintrag" onclick="this.form.innerHTML = 'Name: <input type="text" name="name" value="" /> - Geb.datum: <input type="text" name="gebdatum" value="" /><br />'+ this.form.innerHTML;" />
wie übergebe ich mein php code diese FORM werte
Diese werden an das Script welches im FORM Attribut action eingetragen ist gesendet. Innerhalb des PHP Scripts stehen dann die Werte in der Variablen $_POST, $_GET oder auch $_REQUEST.print_r( array($_POST, $_GET, $_REQUEST) );
wie soll ich via POST oder GET die Werte von allen INPUTS in variablen speichern.
Diese sind schon in den o.g. Variablen gespeichert.... und diese dann über INSERT in meine DB einfügen
Ich empfehle Dir das PDO ( PHP Data Objects ), damit kann man recht einfach arbeiten. http://www.php.net/manual/de/book.pdo.php$oDb = new PDO('mysql:host=localhost;dbname=datenbank', 'benutzer', 'passwort');
$oDbStatement = $oDb->prepare( 'INPUT INTO `tabelle` (`name`, `gebdatum`) VALUES (?, ?)' );
// ? sind s.g. 'question marks' - also Platzhalter - diese haben den Vorteil das Du dich nicht um die Umformung und Sicherheit der einzufügenden Daten kümmern musst.
// jetzt kannst Du in einer Schleife die $_POST Werte durchlaufen und mit
$oDbStatement ->execute( array('Musterann', '2000-01-01') );
// wiederholt speichern
// Verbindung abbauen
$oDB = null;
Das PHP Handbuch http://www.php.net/manual/de/ kann man sich auch als CHM Datei saugen - so findet man immer schnell was man braucht.
@Silver,
Heißt, für mich, es können auch 3 oder 7 oder 9 Dokumente sein?
Dann würde ich im Script eine kleines Formular einbauen, in das ich die Anzahl eintragen kann:
!! Mit dem else-Zweig (Formularaufbau) gehts gleich weiter !!
Anstatt diese Art Formular . . .
. . . zu verwenden, würde ich ein sagen wir mal abstraktes Array nur mit Indizies verwenden. Was heißt, es gibt keine
unterschiedlichen Arrays mit Vorname, Nachname, Geburtstag etc., sondern nur ein Array mit einem Namen,
in dem jede Person mit ihren eigenen Eigenschaften über Indizies verwaltet wird. Das Array im Formular sieht dann so aus:
arrayname[userindex][eigenschaftenindex], also . . .
arrayname = Vorname Person1
arrayname[1] = Nachname Person1
arrayname[2] = Geburtstag Person1
arrayname[1] = Vorname Person2
arrayname[1][1] = Nachname Person2
arrayname[1][2] = Geburtstag Person2
. . . usw.
Beliebig viele "Personenblöcke" können dann ganz einfach mit einer for-Schleife angelegt werden.
!! Weiter mit dem else-Zweig - Formularaufbau zur Eingabe !!
!! Auswertung des Arrays nach Absenden. !!
Gruß
Günni
Wenn ich aber 10 Dokumente bekomme, möchte gerne ein einziger Formular implementieren,
über den ich die 10 einträge auf ein mal in der DB speichere. wie mache ich so was?
über den ich die 10 einträge auf ein mal in der DB speichere. wie mache ich so was?
Heißt, für mich, es können auch 3 oder 7 oder 9 Dokumente sein?
Dann würde ich im Script eine kleines Formular einbauen, in das ich die Anzahl eintragen kann:
<?php
/*
* Wenn die POST-Variable **wieviel** nicht existiert, wird ein Formular zur
* Eingabe einer Anzahl Einträge gezeigt.
*/
if(!isset($_POST['wieviel'])){
?>
<form action="<?echo $_SERVER[PHP_SELF];?>" method="post">
Anzahl Einträge <input type="text" name="wieviel">
<input type="submit" name="cmd" value="Senden">
</form>
<?php
} else { //Formularaufbau
?>
!! Mit dem else-Zweig (Formularaufbau) gehts gleich weiter !!
Anstatt diese Art Formular . . .
<form action="" method="post">
Name: <input type="text" name="name" value="" /> - Geb.datum: <input type="text" name="gebdatum" value="" /><br />
Name: <input type="text" name="name" value="" /> - Geb.datum: <input type="text" name="gebdatum" value="" /><br />
<!-- usw -->
<input type="submit" name="action" value="speichern" />
</form>
. . . zu verwenden, würde ich ein sagen wir mal abstraktes Array nur mit Indizies verwenden. Was heißt, es gibt keine
unterschiedlichen Arrays mit Vorname, Nachname, Geburtstag etc., sondern nur ein Array mit einem Namen,
in dem jede Person mit ihren eigenen Eigenschaften über Indizies verwaltet wird. Das Array im Formular sieht dann so aus:
arrayname[userindex][eigenschaftenindex], also . . .
arrayname = Vorname Person1
arrayname[1] = Nachname Person1
arrayname[2] = Geburtstag Person1
arrayname[1] = Vorname Person2
arrayname[1][1] = Nachname Person2
arrayname[1][2] = Geburtstag Person2
. . . usw.
Beliebig viele "Personenblöcke" können dann ganz einfach mit einer for-Schleife angelegt werden.
!! Weiter mit dem else-Zweig - Formularaufbau zur Eingabe !!
<?php
}else{
/*
* Wenn eine Zahl eingegeben wurde, wird das Formular aufgebaut.
*/
?>
<form action="<?echo $_SERVER[PHP_SELF];?>" method="post">
<?php
/*
* Eine Variable von 0 < wieviel hochzählen.
* Für jede Eigenschaft zu einer Person wird im Formular ein Textfeld
* ausgegeben, dessen Name textfeld ist.
* Im ersten Klammerpaar wird via PHP $i ausgegeben.
* Im zweiten Klammerpaar wird via PHP $j ausgegeben und mit einem zweiten
* Befehl hochgezählt.
* Die Variable $j wird bei jedem Schleifenlauf immer
* wieder auf 0 gesetzt.
* Dadurch entsteht ein Array, das wie folgt aussieht:
* - textfelder
* - textfelder[1]
* - textfelder[2]
* - textfelder[1]
* - textfelder[1][1]
* - textfelder[1][2]
* - textfelder[2]
* - textfelder[2][1]
* - textfelder[2][2]
* . . . usw.
*/
for($i=0;$i<$_POST['wieviel'];$i++){
echo "Eintrag Nr.: ".($i+1)."<br>";
$j=0;
?>
Vorname <input type="text" name="textfelder[<?php echo $i;?>][<?php echo $j; $j++;?>]"><br>
Nachname <input type="text" name="textfelder[<?php echo $i;?>][<?php echo $j; $j++;?>]"><br>
Geburtstag <input type="text" name="textfelder[<?php echo $i;?>][<?php echo $j; $j++;?>]"><br>
<?php
echo "---------------------------------------------------------------------------<br>";
}
?>
<input type="submit" name="cmd" value="Eintragen">
</form>
<?php }?>
</body>
</html>
!! Auswertung des Arrays nach Absenden. !!
<?php
/*
* Prüfen, ob die Textfelder gesendet wurden
*/
if(isset($_POST['textfelder'])){
/*
* Wenn Textfelder gesendet wurden, das Post-Array
* in einer Variablen ablegen . . .
* (Muß nicht sein, ist aber einfacher zu händeln :-) )
*/
$textfelder=$_POST['textfelder'];
/*
* . . . und in einer foreach-Schleife den Index und den
* Wert in Variablen ablegen, wobei hier wiederum
* Arrays entstehen, von denen aber nur das Werte-Array
* weiterverarbeitet wird.
*/
foreach($textfelder as $keys => $values){
/*
* In einer Variablen wird die linke Klammer gespeichert
* und das erste Element aus dem Werte-Array.
* ************* KnowHow *******************************************************
* Warum wird die Variable in "' '" eingeschlossen?
* Mit ' ' kann man Text ausgeben, aber keine Variablen:
* - echo 'Text' ergibt Text, echo '$var' ergibt $var.
* Mit " " kann man Text UND Variablen ausgeben:
* - echo "Text" ergibt Text, echo "Vorname: $var" ergibt Vorname: Heinz(z.B.)
* Innerhalb " " passiert also folgendes:
* - Die ' ' werden als Text interpretiert UND der Variableninhalt wird ausgegeben.
* - Somit ist $valuestr.="'$values'"; gleichbedeutend mit $valuestr.='Heinz';
* Somit wird der MySQL-Syntax entsprochen:
* insert into tabelle(feld1, feld2 . . . usw.) values('Heinz','Schmitz', . . . usw)
* ************* KnowHow Ende ***************************************************
*/
$valuestr.="(";
$valuestr.="'$values'";
$i=1;
/*
* Solange das Werte-Array einen Wert liefert, werden der
* Variablen $valuestr nacheinander ein Komma und der nächste
* Wert angehangen.
*/
while($value=$values[$i++]){
$valuestr.=","."'$value'";
}
/*
* Am Schluß werden die rechte Klammer und ein Komma angehangen.
*/
$valuestr.="),";
}
/*
* Das letzte Komma muß noch entfernt werden . . .
*/
$valuestr=substr($valuestr,0, -1);
/*
* . . . und die Variable kann nun an das Insert-Statement angehangen werden.
*/
$query="insert into tabelle6(vorname,nachname,geburtstag) values ".$valuestr;
/*
* Statement überprüfen . . .
*/
echo $query;
/*
* . . . und absenden.
*/
//mysql_query($query);
}
?>
Gruß
Günni
<?echo $_SERVER[PHP_SELF];?>
1. Anfängerfehler: Nie Short Open Tags benutzen
2. Anfängerfehler: Nie PHP_SELF so benutzen wie du es gemacht hast. Stichwort: XSS
$query="insert into tabelle6(vorname,nachname,geburtstag) values ".$valuestr;
3. Anfängerfehler: Nie Werte vom Benutzer ohne Escaping/Kontrolle übergeben. Stichwort: SQL-Injection
Zitat von @dog:
> <?echo $_SERVER[PHP_SELF];?>
1. Anfängerfehler: Nie Short Open Tags benutzen
2. Anfängerfehler: Nie PHP_SELF so benutzen wie du es gemacht hast. Stichwort: XSS
> $query="insert into tabelle6(vorname,nachname,geburtstag) values ".$valuestr;
3. Anfängerfehler: Nie Werte vom Benutzer ohne Escaping/Kontrolle übergeben. Stichwort: SQL-Injection
> <?echo $_SERVER[PHP_SELF];?>
1. Anfängerfehler: Nie Short Open Tags benutzen
2. Anfängerfehler: Nie PHP_SELF so benutzen wie du es gemacht hast. Stichwort: XSS
> $query="insert into tabelle6(vorname,nachname,geburtstag) values ".$valuestr;
3. Anfängerfehler: Nie Werte vom Benutzer ohne Escaping/Kontrolle übergeben. Stichwort: SQL-Injection
Das ist ja schön und gut, aber Silverman wollte wissen, wie man 1 - n Personen in ein Formular packt und wie
dieses Formular serverseitig verarbeitet wird. Eine mögliche Lösung dazu habe ich geschrieben, die funktioniert
auch, und fertig. Was erwartest du denn ? Dass ich hier 'ne vollständige Softwarelösung präsentiere ?
Na, da setz' dich mal selber dran
Wenn weitere Fragen bezüglich der o.g. Themen seitens Silverman auftauchen, sehen wir mal weiter.
Ansonsten: Schönes, SQL-Injection-freies Wochenende.
Apropos SQL-Injection: Die ganzen Beispiele über SQL-Injection, zu denen hier immer wieder gern in Kommentaren verlinkt wird,
erscheinen mir etwas zu konstruiert. Hier haben wohl die Autoren selber in ihrer eigenen PHP/MySQL-Umgebung Tür und Tor
geöffnet, damit ihre Beispiele funktionieren.
Gruß
Günni
So, was ist denn bitte an:
deiner Meinung nach konstruiert?
Den Code findet man in haufenweise Anfänger-Anwendungen, und sobald ich als Passwort
Das einzige was viele dieser Programmierfehler davon abhält auseinander zufliegen ist derzeit magic_quotes und das fliegt bald raus...
SQL-Injection und XSS gehören zu den Top 5 der am meisten ausgenutzten Sicherheitslücken in Webapps.
mysql_query("SELECT * FROM user WHERE username = '".$_POST['user']."' AND password = '".$_POST['pass']."'");
Den Code findet man in haufenweise Anfänger-Anwendungen, und sobald ich als Passwort
abc' OR 1=1
eingebe kann ich mir Admin-Zugriff erschleichen.Das einzige was viele dieser Programmierfehler davon abhält auseinander zufliegen ist derzeit magic_quotes und das fliegt bald raus...
SQL-Injection und XSS gehören zu den Top 5 der am meisten ausgenutzten Sicherheitslücken in Webapps.