Zur Navigation

Formularwerte in einer Datenbank speichern

1 Stefanie (Gast)

Hallo!

Habe da ein Problem und zwar bekomme ich auf Biegen und Brechen die Daten, die in einem Formular eingegeben werden, nicht in die Mysql-Datenbank.
Das Formular befindet sich in der Datei index.php, als action ist dort angegeben "submit.php".
Ein Auszug aus der index.php:
<form name="form1" method="post" action="submit.php">

    <hr align="left" width="600">
    <font face="Verdana, Arial, Helvetica, sans-serif"><strong>    <font size="2">Die Meldung erfolgt durch (Name):</font></strong>      
      <font size="2">
    <input name="Name" type="text" size="30" maxlength="50">

Ein Auszug aus der submit.php:
$query = "INSERT INTO zbw 
	   		(ID,Name,GNR1,RNR1,Abt,Tel,Date,GNR2,RNR2,RDESCR,Message,Technik,Firma,Staff,Bericht,Ready,Date2,ERLEDIGT)
	  	 VALUES
	   			('".addslashes(htmlspecialchars($_POST['ID']))."',
				'".addslashes(htmlspecialchars($_POST['Name']))."',
                '".addslashes(htmlspecialchars($_POST['GNR1']))."',
                '".addslashes(htmlspecialchars($_POST['RNR1']))."',
                '".addslashes(htmlspecialchars($_POST['Abt']))."',
			    '".addslashes(htmlspecialchars($_POST['Tel']))."',
                '".addslashes(htmlspecialchars($_POST['Date']))."',
                '".addslashes(htmlspecialchars($_POST['GNR2']))."',
			    '".addslashes(htmlspecialchars($_POST['RNR2']))."',
                '".addslashes(htmlspecialchars($_POST['RDESCR']))."',
                '".addslashes(htmlspecialchars($_POST['Message']))."',
				'".addslashes(htmlspecialchars($_POST['Technik']))."',
				'".addslashes(htmlspecialchars($_POST['Firma']))."',
				'".addslashes(htmlspecialchars($_POST['Staff']))."',
				'".addslashes(htmlspecialchars($_POST['Bericht']))."',
				'".addslashes(htmlspecialchars($_POST['Ready']))."',
				'".addslashes(htmlspecialchars($_POST['Date2']))."',
				'".addslashes(htmlspecialchars($_POST['ERLEDIGT']))."',
                NOW())";
	mysql_query($query);

Wäre wirklich super wenn mir jemand helfen könnte!
Ich komm da nämlich nicht mehr weiter!

Viele Grüße,
Stefanie

10.08.2005 15:01

2 C)-(iLL@

Hi Stefanie,

Was genau ist denn der Fehler, der auftritt? Gibt es eine Fehlermeldung?

Du könntest das Ganze etwas einfacher machen, indem Du am Anfang sowas einfügst:
$cleanposts = array();
foreach($_POST as $par => $val) $cleanposts[$par] = addslashes(htmlspecialchars($val));

Dann wird die Query einfacher.

$query = "INSERT INTO zbw (ID,Name,GNR1,RNR1,Abt,Tel,Date,GNR2,RNR2,RDESCR,Message,Technik,Firma,Staff,Bericht,Ready,Date2,ERLEDIGT) VALUES ($cleanposts['ID'], ..)"

Füge am Ende, nachdem Du mysql_query augerufen hast, ein:

if (mysql_errno()) {
  print(mysql_error());
}

So wird der aufgetretene MySQL-Fehler ausgegeben.

Wie sieht die Fehlermeldung aus?

10.08.2005 15:20 | geändert: 10.08.2005 15:23

3 Stefanie (Gast)

Vielen Dank für deine Hilfe!

Klar, an die Codeoptimierung mache ich mich noch, erstmal wollte ich halt sehen wie das generell geht die Formularwerte der Datenbank zu übergeben!

Die Fehlermeldung lautet:
[

Column count doesn't match value count at row 1
Also da passt angeblich was nicht mit der Anzahl der Werte in der Tabelle - aber ich habe überall 18, versteh das nicht so ganz.
Ich glaube das könnte daran liegen, dass ich die ID evtl. falsch angelegt habe?? Könntest du mir evtl. sagen, wie genau man eine ID per phpmyadmin (oder gern auch den sql-Befehl) anlegt, die dann halt der Schlüsselwert ist und automatisch hochzählt? Man soll die ID später anschauen, aber nicht verändern können.
Nur wie übergebe ich da dann einen Wert in dem Formular? Müsste man ja leerlassen, da sie automatisch erzeugt wird...
Ich hoffe du konntest jetzt meinen gedanklichen Ausflüchten folgen :)

11.08.2005 06:53

4 Stefanie (Gast)

Okay und das nächste Problem ist:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use

Die Codezeile:
$query = "INSERT INTO zbw(ID,Name,GNR1,RNR1,Abt,Tel,Date,GNR2,RNR2,RDESCR,Message,Technik,Firma,Staff,Bericht,Ready,Date2,ERLEDIGT) VALUES($ID,$Name,$GNR1,$RNR1,$Abt,$Tel,$Date,$GNR2,$RNR2,$RDESCR,$Message,$Technik,$Firma,$Staff,$Bericht,$Ready,$Date2,$ERLEDIGT)";
	   		       
	mysql_query($query);

11.08.2005 09:25

5 C)-(iLL@

Der Fehler ist klar - alle Felder, deren Werte alphanumerische Zeichen enthalten, müssen in einfache Hochkommas. Leider weiß ich nicht, was bei Dir Zahlen sind und was Strings. Bei den Zahlenwerten kannst Du auf die Hochkommas auch verzichten.

$query = "INSERT INTO zbw(ID, Name, GNR1, RNR1, Abt, Tel, Date, GNR2, RNR2,  RDESCR, Message, Technik, Firma, Staff, Bericht, Ready, Date2, ERLEDIGT) VALUES($ID, '$Name', '$GNR1', '$RNR1', '$Abt', '$Tel', '$Date', '$GNR2', '$RNR2', '$RDESCR', '$Message','$Technik', '$Firma', '$Staff', '$Bericht', '$Ready', '$Date2', '$ERLEDIGT')";
Poste doch mal die Tabellenstruktur von zbw, dann lässt sich die Query weiter vereinfachen.


11.08.2005 09:56 | geändert: 11.08.2005 09:58

6 C)-(iLL@

Moment mal, hast Du nun etwa die Variablen nach dem Post in submit.php dank register_globals verwendet und greifst nicht direkt auf den Superglobal-Array zu? In diesem Fall würe ich am Anfang hierzu raten:

foreach($_POST as $par => $val) $$par = addslashes(htmlspecialchars($val));

Sonst ist das eine ganz unsaubere Methode. Es wird dann nämlich egal, ob die Variablen als Post oder Get übergeben werden, das macht das System angreifbar.

11.08.2005 10:05

7 Stefanie (Gast)

Super, dankeschön!
Jetzt funktioniert es endlich!
Deinen Tipp werd ich umsetzen, hast nämlich recht ... da register_globals on ist war das erstmal die bequemere Methode :) Aber ich ändere das noch bevor das Script verwendet wird!

11.08.2005 12:17

8 Stefanie (Gast)

Ok, ein Problem habe ich jetzt doch noch bezügliche einer Suchabfrage:
In einem ganz normalen HTML-formular kann man eine Eingabe machen und nach dieser Eingabe soll dann in allen Werten gesucht werden.
$search = "SELECT ID,Name,Datum,ERLEDIGT,GNR2,RNR2,Staff FROM zbw WHERE Name like '%$eingabe%';
So funktioniert es wunderbar, er sucht nach dem Namen und gibt auch ein richtiges Ergebnis aus.
Wenn ich noch ein Feld hinzufüge, also
WHERE Name OR ID like ... dann funktioniert es auch, aber ab drei Werten läuft gar nichts mehr - woran kann das liegen?
Gibt es einen universellen Platzhalter mit dem ich alle Werte durchsuchen kann?

12.08.2005 08:45

9 Jörg Kruse

Ein Platzhalter für alle Spalten ist das Sternchen *, ich weiß aber nicht, ob dies in einer where Klausel funktioniert. Um die Suchabfrage nicht unnötig zu verlängern, würde ich auch nur die Spalten abfragen, bei denen dies Sinn macht, bei einem Textstring also keine IDs, Datumfelder oder ähnliches

Funktioniert die Abfrage, wenn du die Bedingungen Spalte für Spalte ausschreibst:

 WHERE spalte1 like '%$eingabe%' OR spalte2 like '%$eingabe%' OR spalte3 like '%$eingabe%'

12.08.2005 11:03

10 Stefanie (Gast)

Beim Where funktioniert das mit dem Sternchen leider nicht, hatte ich auch schon versucht.
Aber wenn ich die Bedingungen Spalte für Spalte ausschreibe, klappt es!
Super, vielen Dank!!

12.08.2005 11:21

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]