online 1
gast (50)

/ Forum / Skripte(PHP,ASP,Perl...)

Skripte(PHP,ASP,Perl...)Skripte(PHP,ASP,Perl...)

Fragevon Misantrophe vom 28.04.2020, 09:34 Options

Formulardaten -> array -> MySQL DB

Hi,

ich habe ein HTML-Formular erstellt mit vorname, name, ort ect..

Bsp.:
<input name='Adresse[ort]' type='text' maxlength='30' size='30' value='' >
Das Formular wird dynamisch per schleife und echo erstellt, dewegen nur die einfachen ' . Wenn Das Formular augefüllt ist sollen die Daten in Array Adresse stehen.

Nun möchte ich die Daten in die DB schreiben:

$db = mysql_connect("", "", "");

$sqlab='insert into tbl_technik ('.array_keys($_POST[adresse).') values ('.implode("','",$_POST[adresse).')';

mysql_db_query("***", "$sqlab");


$num = mysql_affected_rows();
if ($num>0)
echo "Der Datensatz wurde erfolgreich in die Datenbank eingetragen<p>";
else
echo "Es ist ein Fehler aufgetreten: <br> ".mysql_error()."; <p><br>";
mysql_close($db);

Fehlermeldung:

Parse error: syntax error, unexpected ')', expecting ']' in C:\xampp\htdocs\new\adresse_db.php on line 13

Wo liegt der Fehler? Bin für jede Hilfe dankbar...


Antwort schreiben

Antwort 1 von Misantrophe vom 28.04.2020, 09:38 Options

Hallo,

sorry das war die falsche Fehlermeldung.

Nun die richtige:

Es ist ein Fehler aufgetreten:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '','Ja','','1)' at line 1;

Antwort 2 von son_quatsch vom 28.04.2020, 10:34 Options

 $sqlab='insert into tbl_technik ('.array_keys($_POST[adresse).') values ('.implode("','",$_POST[adresse).')';


...muss mindestens zu dem hier werden:

 $sqlab= 'insert into tbl_technik ('. array_keys( $_POST['adresse'] ). ') values (\''. implode('\', \'', $_POST['adresse']. '\')';

Antwort 3 von son_quatsch vom 28.04.2020, 10:37 Options

(nochmal, diesmal nur das richtige - und übersichtlicher):
 
$sqlab= 'insert into tbl_technik ('
      . array_keys( $_POST['adresse'] )
      . ') values (\''
      . implode('\', \'', $_POST['adresse'])
      . '\')';

Antwort 4 von Misantrophe vom 28.04.2020, 11:06 Options

Danke son_quatsch

Die nun folgende Fehlermeldung:

Column count doesn't match value count at row 1;

Was hat die zu bedeuten?

Antwort 5 von gast08154 vom 28.04.2020, 11:42 Options

Hallo Misantrophe,

überprüfe mal ob die Anzahl der eingegebenen Werte mit der Anzahl der Spalten in deiner DB überein stimmen.

Antwort 6 von son_quatsch vom 28.04.2020, 12:03 Options

...weil du als Spaltennamen ein Feld übergibst, statt dessen Elemente.
Lösung:

$sqlab= 'insert into tbl_technik ('
      . implode(', ', array_keys( $_POST['adresse'] ) )
      . ') values (\''
      . implode('\', \'', $_POST['adresse'])
      . '\')';


Zur Sicherheit kannst du danach ja mal folgende Zeile einfügen:
die( $sqlab );

und überprüfen, ob das SQL-Kommando syntaktisch korrekt ist.


Und danach machst du dir am besten gedanken, was passiert, wenn ein Element der POST-Daten folgende Inhalte annehmen könnte:
  • McDonald's
  • ; DROP DATABASE; ##

Antwort 7 von Misantrophe vom 28.04.2020, 12:20 Options

danke son_quatsch,

so langsam komme ich voran. Allerdings eine Frage habe ich noch:

Beim INSERT - Befehl müssen doch genau die Feldnamen aus der DB angegeben werden. Wie mache ich das hier? Denn es wird nichts in die DB geschrieben.



Zitat:
und überprüfen, ob das SQL-Kommando syntaktisch korrekt ist.


Und danach machst du dir am besten gedanken, was passiert, wenn ein Element der POST-Daten folgende Inhalte annehmen könnte:

McDonald's

; DROP DATABASE; ##


Ist zweifels ohne ein ganz wichtiger Punkt den du da ansprichst, aber darum kümmere ich mich das Skript das macht was es soll

Antwort 8 von son_quatsch vom 28.04.2020, 13:31 Options

Dann überprüfe mal, ob

print_r( array_keys( $_POST['adresse'] );


all die Spaltennamen auflistet, die auch in das INSERT-Statement wandern sollen. Andernfalls schreibst du sie am besten von Hand rein.

Antwort 9 von Misantrophe vom 29.04.2020, 10:03 Options

Hallo son_quatsch

danke für Deine Hilfe es klappt soweit. Jetzt giubt es nur noch ein Problem, und zwar :

Das Array technik[ ] fasst die keys + einem Wert pro key und schreibt diesen in DB. Aber da ich ja nun mehere Zeilen gleichzeitig in die DB schreiben will muss ich noch was ändern.

Meine Idee:

Formular:
Das Array Technik welches ja die Daten (1 Zeile) enthält, muss so geändert werden, dass das Adresse wieder ein Array ist.
z.B.
<input name='Adresse[ort[]]' type='text' maxlength='30' size='30' value='' >

und der SQL-Skript:

bisher: $sqlab= 'insert into tbl_technik ('
. implode(', ', array_keys( $_POST['technik'] ) )
. ') values (\''
. implode('\', \'', $_POST['technik'])
. '\')';

jetzt:

$sqlab='insert into tbl_technik ('
.implode(',', array_keys($_POST['technik']))
.') values (\''
.implode('\',\",(\''
. implode('\', \'', $_POST['technik'])
. '\')';

Aber es klappt nicht so wie ich gedacht habe, was mache ich flalsch?

Antwort 10 von son_quatsch vom 29.04.2020, 10:54 Options

Da überschlägst du dich etwas. Wenn du in deinem Web-Formular mal auf den Senden-Button klickst, dann werden alle POST-Daten entsprechend den Namen aller INPUTs aufbereitet und versandt. Eben diese Daten bekommt auch dein PHP-Skript und kann sie auswerten. Verschachtelte Felder gehören bestimmt nicht zum Standard - im Zweifelsfall würde ich gänzlich auf Feldnamen in INPUTs verzichten.

Daher folgender Ratschlag: schreib in dein PHP-Skript einfach mal

print_r( $_POST );


Füll also dein Web-Formular aus, klick auf Senden, und die Ergebnisseite guckst du dir nicht im Browser an - sondern dessen Quelltext. Dann siehst du in einer schönen Feldhierarchie, wie deine Daten übergeben wurden. Anhand dieser kannst du dann auch prüfen, ob überhaupt und in welcher Struktur sie ankommen, bevor du sie übereilig mit der IMPLODE-Funktion wieder zu einem String zusammenfasst.

Immer schön der Reihe nache :-)

Antwort 11 von Misantrophe vom 29.04.2020, 11:07 Options

Zitat:
Immer schön der Reihe nache :-)


stimmt

Antwort 12 von Misantrophe vom 29.04.2020, 12:51 Options

Array ( [technik] => Array (

[id_1] => Array ( [0] => 14 [1] => 15 [2] => 16 )

[id_2] => Array ( [0] => [1] => [2] => ) [v3] => Array ( [0] => GMA55 [1] => GMA66 [2] => GMA77 )

[v4] => Array ( [0] => Nein [1] => Ja [2] => Nein )

[v5] => Array ( [0] => 23 [1] => 0.86 [2] => 0.20 )

[v6] => Array ( [0] => 1 [1] => 2 [2] => 2 )

[v7] => Array ( [0] => test [1] => test [2] => test ) )
quote

Ausgabe print_r($_POST);

solangsam bekomme ich nen knoten in den Kopf ;)

Antwort 13 von son_quatsch vom 29.04.2020, 13:27 Options

Öhm, wenn dir die Ausgabe gar nicht hilft, dann wird es schwierig.

Wenn du das ganze jetzt in eine Tabelle der Datenbank speichern wollen würdest, müsste es (sinngemäß) so aussehen:

$spalten= '';
foreach ( $_POST['technik'] as $key=> $val ) {
  $spalten= $key. ', ';
}
$spalten= substr( $spalten, 0, -2 );

$anzahl= count( $_POST['technik']['id_1'] );
for ( $i= 0; $i< $anzahl; $i++ ) {
  $teil= '';
  foreach ( $_POST['technik'] as $key=> $val ) {
    $teil.= '\''. $val[$i]. '\', ';
  }
  $teil= substr( $teil, 0, -2 );

  $sql= 'INSERT INTO TABELLE('. $spalten. ') VALUES ('. $teil. ')';
  ...in tabelle einfügen...
}

Ähnliche Themen

Einfache SQL-Abfrage - steh aufm Schlauch!
Richard1000  11.02.2007 - 79 Hits - 1 Antwort

Keine Formulardaten in Firefox
igor  22.07.2007 - 37 Hits - 4 Antworten

Mehrdimensionales Array
gast4  29.11.2007 - 103 Hits - 5 Antworten

Linux in ein onBoard-Raid-Array installieren, aber wie?
LLLLinux  31.12.2007 - 134 Hits - 2 Antworten

Firefox Formulardaten editieren
FFIX  01.06.2008 - 232 Hits - 9 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026