Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Problem mit Eintragung in MySQL via Formular

Frage Entwicklung PHP

Mitglied: flowerent

flowerent (Level 1) - Jetzt verbinden

24.01.2009, aktualisiert 15:45 Uhr, 3610 Aufrufe, 13 Kommentare

Hallo erstmal,
ich arbeite seit einiger Zeit an einem Projekt und habe heute ein Formular zum eintragen von Daten in die Datenbank gemacht. Da ich noch relativ neu bin, hab ich verschiedenste Tutorials als Hilfe genommen, doch irgendwie werden die Werte nicht eingetragen.
Wenn man das Formular ausgefüllt hat, kommt man ohne Probleme zur location_save.php doch die Daten werden nicht gespeichert.

Hier meine 2 Dateien:

location_form.php
01.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
02.
<html xmlns="http://www.w3.org/1999/xhtml"
03.
<head> 
04.
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
05.
<title>Titel</title> 
06.
</head> 
07.
 
08.
<body> 
09.
<form name="location" action="location_save.php" method="post"
10.
<table width="620" border="0"
11.
  <tr> 
12.
    <td width="70"><font size="2">Name</font></td> 
13.
    <td width="213"><input type="text" name="name" size="35"></td> 
14.
    <td width="57" rowspan="5">&nbsp;</td> 
15.
    <td width="70" rowspan="5"><font size="2">Beschreibung</font></td> 
16.
    <td width="173" rowspan="5"><textarea rows="7" name="description" cols="26"></textarea></td> 
17.
  </tr> 
18.
  <tr> 
19.
    <td width="70"><font size="2">Breite</font></td> 
20.
    <td width="213"><input type="text" name="lat" size="35"></td> 
21.
  </tr> 
22.
  <tr> 
23.
    <td width="70"><font size="2">Länge</font></td> 
24.
    <td width="213"><input type="text" name="lon" size="35"></td> 
25.
  </tr> 
26.
  <tr> 
27.
    <td width="70"><font size="2">Typ</font></td> 
28.
    <td width="213"><select size="1" name="type"
29.
	<option value="Bar/Pub">Bar/Pub</option> 
30.
	<option value="Club/Disco">Club/Disco</option> 
31.
	</select></td> 
32.
  </tr> 
33.
  <tr> 
34.
    <td width="70"><font size="2">Gruppe</font></td> 
35.
    <td width="213"><select size="1" name="group"
36.
	<option value="smoker">Raucher</option> 
37.
	<option value="nonsmoker">Nichtraucher</option> 
38.
	</select></td> 
39.
  </tr> 
40.
</table> 
41.
<p> 
42.
  <input type="submit" value="Absenden" name="send" style="float: left"></p> 
43.
<p> 
44.
  <input type="reset" value="Zurücksetzen" name="clear" style="float: left"/> 
45.
</p> 
46.
</form> 
47.
</body> 
48.
</html> 
49.
 

location_save.php
01.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
02.
<html xmlns="http://www.w3.org/1999/xhtml"
03.
<head> 
04.
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
05.
<title>Titelt</title> 
06.
 
07.
<? 
08.
$host = 'localhost';  
09.
$user = '';  
10.
$password = '';  
11.
$db = '';  
12.
 
13.
mysql_connect($host, $user, $password);  
14.
mysql_select_db($db); 
15.
 
16.
$lat= $_POST["lat"];  
17.
$lon= $_POST["lon"];  
18.
$name= $_POST["name"];  
19.
$description= $_POST["description"];  
20.
$typ= $_POST["typ"]; 
21.
$group= $_POST["group"];  
22.
 
23.
$submit = "INSERT INTO map (lat, lon, name,  
24.
description, typ, group) VALUES ('$lat', '$lon',  
25.
$name', '$description','$typ', '$group')";  
26.
 
27.
$send = mysql_query($submit);  
28.
 
29.
mysql_close();  
30.
?> 
31.
</head> 
32.
<body> 
33.
</body> 
34.
</html> 
35.
 
Gruß
Mitglied: Spackenbremse
24.01.2009 um 15:56 Uhr
Hallo...
Zitat von flowerent:
$send = mysql_query($submit);

mysql_close();

Würde ich so machen, um zumindest eine Fehlermeldung zu erzeugen:

01.
<? 
02.
mysql_query($submit) OR die (mysql_error()); 
03.
?>
mfg
Bitte warten ..
Mitglied: flowerent
24.01.2009 um 16:08 Uhr
Also mit der Fehlermeldung da hätt ich auch selber draufkommen können

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 'group) VALUES ('40.7560', '-73.9869', Name', 'Beschreibung','', 'smoker')' at line 2

wird mir angezeigt, sind eigentlich fast alle Werte die ich als Testzweck eingegeben habe.
Bitte warten ..
Mitglied: Arano
24.01.2009 um 16:12 Uhr
Moin

füge doch mal in die "location_save.php" folgendes VOR das mysql_close() ein:
01.
<?php 
02.
 $send = @mysql_query($submit); 
03.
 if($send===TRUE){ 
04.
  echo '<p>Daten gespeichert !</p>'; 
05.
 } else { 
06.
  echo '<p>Datenbankfehler: #'.mysql_errno().'<br>'.mysql_error().'</p>' 
07.
08.
?>
Dann bekommste jedenfalls noch eine Fehlermeldung !

Die Fehlerbehandlung ist sowieso ein wichtiger Teil, sowie beim herstellen der Verbingung, dem wählen der Datenbank, der Eingabeprüfung oder bem sendedn des Querys !

~Arano
Bitte warten ..
Mitglied: Arano
24.01.2009 um 16:18 Uhr
Ohman, das habe ich auch glatt übersehen !

Fehlerauslöse ist in deinem fall das Wort "group" !
"GROUP" ist eines der von MySQL reservierten Wörtern (um Datensätze zu Gruppieren) darum darfst du es so nicht verwenden.
Wenn du es aber in backticks "´" setzt geht es wieder !
01.
<?php 
02.
 $query = "INSERT INTO `map` (`lat`, `lon`, `name`, `description`, `typ`, `group`) 
03.
VALUES ('$lat', '$lon', '$name', '$description', '$typ', '$group')"; 
04.
?>
So sollte es funktionieren !
Bitte warten ..
Mitglied: flowerent
24.01.2009 um 16:25 Uhr
Also hab das jetzt geändert, wenn ich nun die Daten abschicke dann kommt "Query was empty".
Bitte warten ..
Mitglied: dog
24.01.2009 um 16:37 Uhr
Gehen wir doch mal ein paar grundsätzliche Fehler hier durch:

01.
<? 
Du verwendest Short Open Tags. Diese sind optional (im Sinne von: nicht immer aktiviert) und werden evtl. in einer der nächsten Versionen von PHP ganz rausfliegen. Immer <?php verwenden

Fehlerbehandlung:

Auf deinem Entwicklungsserver sollte jedes Script mit

01.
error_reporting(E_ALL | E_STRICT); 
02.
ini_set('display_errors','On');
beginnen. Auf deinem Produktionsserver hingegen muss display_errors auf Off stehen.

01.
$lat= $_POST["lat"];  
02.
$lon= $_POST["lon"];  
03.
$name= $_POST["name"];  
04.
$description= $_POST["description"];  
05.
$typ= $_POST["typ"]; 
06.
$group= $_POST["group"]; 
Hier gehst du davon aus, dass ein Benutzer wirklich alle Felder ausgefüllt hat - das muss nicht der Fall sein!
Immer prüfen ob ein erforderliches Feld wirklich ausgefüllt ist - Dazu gibt es die empty(), isset() und strlen() Funktionen.

01.
$submit = "INSERT INTO map (lat, lon, name,  
02.
description, typ, group) VALUES ('$lat', '$lon',  
03.
$name', '$description','$typ', '$group')"; 
Ganz böser Fehler: Du erzeugst eine SQL-Abfrage ohne zu überprüfen was ein Benutzer denn eingegeben hat.
Dazu empfehle ich mal folgende Lektüre: http://de.wikipedia.org/wiki/SQL-Injection
Benutzereingaben müssen entweder auf ihr Format geprüft werden oder/und escapt werden
Dazu gibt es preg_match und mysql_real_escape (Vorsicht vor magic_quotes_gpc)

@Arano

01.
<?php 
02.
 $send = @mysql_query($submit); 
03.
 if($send===TRUE){ 
04.
  echo '<p>Daten gespeichert !</p>'
05.
 } else
06.
  echo '<p>Datenbankfehler: #'.mysql_errno().'<br>'.mysql_error().'</p>' 
07.
08.
?>
Dieses Beispiel ist leider grundsätzlich falsch (Auch wenn die PHP-Dokumentation es nicht anders macht)!
Durch solche übermäßig kommunikativen Fehlermeldungen haben es Hacker sehr viel leichter.
Nie detaillierte Fehlermeldungen per echo ausgeben
Hierzu gibt es von PHP entweder error_log (das gleich ins Serverlog schreibt) oder trigger_error mit dem man Fehlermeldungen erzeugen kann, die von display_errors gesteuert werden können.
Noch besser ist die Verwendung von Exceptions in Kombination mit error logging.

Grüße

Max
Bitte warten ..
Mitglied: flowerent
24.01.2009 um 16:43 Uhr
Also ich danke dir für die Sicherheitshinweise, bin grade dabei alle Scripts mit einem neuen Beginn zu versehen.

Das mit der Sicherheit hatte ich mich schon durch den Kopf gehen lassen, nur hilft mir der ganze Sicherheitsschnickschnack nichts, wenn der Benutzer zwar alles schön ausfüllt aber die Werte nie in der Datenbank ankommen.

Gruß
Bitte warten ..
Mitglied: Arano
24.01.2009 um 16:46 Uhr
HEHE

Das mit dem PHP-Tags und den prüfungn der Benutzereingaben wollt ich auch erst noch sagen ^^

Ja, du hast Recht, meine gezeigte Fehlerbehandlung ist definitive nicht die besste ! Ich hielt es so nur für besser als keine bzw. eine vernünftige möglichkeit mit Exceptions und zeilenlangen Klassen dir für einen Anfänger in sachen PHP und MySQL sichr nur viel mehr verriren würden.

Dog hat da schon Recht, die Ausgabe der Fehlermeldungen zeigt offtmals den Bösen den Weg wie sie rein kommen können. Daher dann die angesprochenen Wege die Fehlermeldungen zu Protokollieren und dennoch für den Benutzer unsichtbar zu halten.
Bitte warten ..
Mitglied: Arano
24.01.2009 um 16:52 Uhr
Wie seiht denn deine Tabellendefinition aus ?
Sind alle Spalten mit "NOT NULL" erstellt worden ?

Deine Fehlermeldung zeigt folgenden Teil des Querys:
'group) VALUES ('40.7560', '-73.9869', Name', 'Beschreibung','', 'smoker')'
Hier seihst du zwischen "Beschreibung" und "smoker" eine leeren Wert (query was emtpy)
Fülle diese doch auch mit einem Wert und probiere es noch einmal.
(Bin mir nicht mal sicher obs dan funktioniert, hatte diesen Fehler noch nicht ^^).

Bei dem erstellen der Spalten der Tabelle kannst du bestimmen ob diese "NULL" oder "NOT NULL" sein dürfen. Somit wird bestimmt, ob beim hinzufügen eines neuen Datensatzes diese Spalte leer sein darf (NULL) oder einen Wert haben muss (NOT NULL)

~Arano
Bitte warten ..
Mitglied: flowerent
24.01.2009 um 17:00 Uhr
Hab eg alles auf NOT NULL.

Kanns vll daran liegen, dass ich zwei Dropdowns verwende?
Bitte warten ..
Mitglied: Arano
24.01.2009 um 17:10 Uhr
Nein, das glaube ich nicht !
Aussederm heist das eine "type" und das andere "group", das ist soweit in Ordnung.

Lass dir deinen Query doch mal vor dem "Speichern" per echo ausgeben, vielleicht entdeckst du dann einen Fehler oder einen Wert der nicht dem entspriche was er eigentlich sollte

Oder Testweise einfach mal alle Variablen durch feste Werte ersetzten und dann nach und nach wieder durch die Variablen austauschen.

~Arano
Bitte warten ..
Mitglied: flowerent
24.01.2009 um 19:29 Uhr
Also hab nun beide Dateien komplett überarbeitet und aufeinmal geht es. Keine Ahnung was ich jetzt genau gemahct habe, aber danke für die rasche Hilfe.

Gruß
Bitte warten ..
Mitglied: Razalduria
24.01.2009 um 20:30 Uhr
Fehler liegt da:

$submit = "INSERT INTO map (lat, lon, name, description, typ, group) VALUES ('$lat', '$lon', $name', '$description','$typ', '$group')";

Da fehlt ein ' vor $name.


Wenn man die Fehlermeldung ganz genau liest, sticht das sofort ins Auge...

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 'group) VALUES ('40.7560', '-73.9869', Name', 'Beschreibung','', 'smoker')' at line 2
Bitte warten ..
Ähnliche Inhalte
PHP
PHP Problem mit Formular
gelöst Frage von vServerPHP6 Kommentare

Hallo, ich habe ein Formular jedoch ein Problem das später nicht alle Felder weitergegeben werden? und hier hab ich ...

PHP
Problem mit php und mysql
Frage von gamerffPHP6 Kommentare

Hallo Forum ich hab ein Problem beim Update eines Datensatzes Kann mir jemand sagen wo mein Fehler liegt

Rechtliche Fragen
Webseiten Erstellung als Kleinunternehmer - Eintragung bei IHK bzw. Handwerkskammer?
Frage von obliteratorRechtliche Fragen2 Kommentare

Hallo zusammen, ich habe ein Gewerbe als Kleinunternehmer / Nebenerwerb (so auch eingetragen beim Finanzamt). Ich erstelle für Freunde ...

Datenbanken
MySQL Profiler - MySQL Profiling
Frage von fckoelleDatenbanken

Hallo zusammen, ich möchte zu Analysezwecken gerne herausfinden welche Befehle auf einen MySQL Server abgesetzt werden. Von Microsoft kenne ...

Neue Wissensbeiträge
Internet

EU-DSGVO: WHOIS soll weniger Informationen liefern

Information von sabines vor 4 StundenInternet3 Kommentare

Wegen der europäische Datenschutzgrundverordnung stehen die Prozesse um die Registierunf von Domains auf dem Prüfstand. Sollte die Forderungen umgesetzt ...

Verschlüsselung & Zertifikate

19 Jahre alter Angriff auf TLS funktioniert immer noch

Information von BassFishFox vor 11 StundenVerschlüsselung & Zertifikate1 Kommentar

Interessant zu lesen. Der Bleichenbacher-Angriff gilt unter Kryptographen als Klassiker, trotzdem funktioniert er oft noch. Wie wir herausgefunden haben, ...

Windows 10

Windows 10 Fall Creators Update - Neue Funktion Hyper-V Standardswitch kann ggf. Fehler bei Proxy Configs verursachen

Erfahrungsbericht von rzlbrnft vor 22 StundenWindows 103 Kommentare

Hallo Kollegen, Da wir die Gefahr lieben, haben wir bei einigen Usern nun mittlerweile das Creators Update drauf. Einige ...

Sicherheit

TLS-Zertifikat und privater Schlüssel von Microsofts Dynamics 365 geleakt

Information von Penny.Cilin vor 1 TagSicherheit

Microsoft hat versehentlich das TLS-Zertifikat inklusive dem privaten Schlüssel seiner Business-Anwendung Dynamics 365 geleakt. TLS-Zertifikat und privater Schlüssel von ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

Netzwerkmanagement
NAS über zwei weitere Ethernet Anschlüsse verbinden
gelöst Frage von Sibelius001Netzwerkmanagement16 Kommentare

Sorry - ich bin hier wahrscheinlich als kompetter IT Trottel unterwegs. Aber eventuell kann mir jemand ganz einfach helfen: ...

LAN, WAN, Wireless
Von rj11 auf rj45
Frage von jensgebkenLAN, WAN, Wireless16 Kommentare

Hallo Gemeinschaft, könnt ihr mir vielleicht bei der anfertigung eines Kabels helfen - habe ein rj 11 stecker und ...

LAN, WAN, Wireless
Häufig Probleme beim Anmelden in WLAN
Frage von mabue88LAN, WAN, Wireless15 Kommentare

Hallo zusammen, in einem Netzwerk gibt es relativ häufig (1-2 mal pro Woche) Probleme mit der WLAN-Verbindung. Zunächst mal ...