Antworten auf deine Fragen:
Neues Thema erstellen

Fehler beim speichern in Datenbank

Reb00t

Aktives Mitglied

Hey Leute!

Da ich relativ unbeholfen mit php bin und mich eigentlich seit heute erst
intensiver mit der Materie beschäftige wende ich mich jetzt dann doch an euch!

Ich habe also 2 Scripts. Zum einem Ein script das mich mit der Datenbank
verbindet:
PHP:
<?php 
    // Konstanten für die Verbindung definieren 
    define ('MYSQL_HOST', '127.0.0.3'); 
    define ('MYSQL_USER', 'dbXXXXXX_222'); 
    define ('MYSQL_PASS', 'XXXXXXXXX'); 
    define ('MYSQL_DATA', 'dbXXXXXX_222'); 
    // Verbindung zu MySQL öffnen 
    $connid = @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die("Error: ".mysql_error());
    // MySQL-Datenbank auswählen 
    @mysql_select_db(MYSQL_DATA) OR die("Error: ".mysql_error()); 
?>

und eines, welches mir die Datensätze schreibt:

PHP:
include 'db_connect.php';
	
	//Datensätze
	$vorname = $_POST[vorname];
	$nachname = $_POST[nachname];
	$land = $_POST[land];
	$plz = $_POST[plz];
	$stadt = $_POST[stadt];
	$strasse = $_POST[strasse];
	$telefon = $_POST[telefon];
	$email = $_POST[email];
	$loesung = $_POST[solution_str];
	
	$adddata = "INSERT INTO  Gewinnspiel (
'ID' ,
'Vorname' ,
'Nachname' ,
'Land' ,
'PLZ' ,
'Stadt' ,
'Strasse' ,
'E-Mail' ,
'Telefon' ,
'Lösung'
)
VALUES (NULL ,  '$vorname',  '$nachname',  '$land',  '$plz',  '$stadt',  '$strasse',  '$email',  '$telefon',  '$loesung'
)";
	
	$eintragen = mysql_query($adddata);
	
	if($eintragen == true)
   {
   echo "Eintrag war erfolgreich";
   }
else
   {
   echo "Fehler beim Speichern";
   }

Die Verbindung funktioniert zum Beispiel schonmal (erhalte keinen Fehler!)

Wenn ich jedoch das erste Formular abschicken will, Erhalte ich prompt die
Fehlermeldung "Fehler beim speichern".
Woran kann das liegen?

Ich habe in der Datenbank eine Tabelle "Gewinnspiel" definiert und da die
Spalten hinzugefügt und checke einfach gar nichts mehr!

Hoffentlich könnt ihr mich aus der Situation retten :)

lg, Reb00t
 

Duddle

Posting-Frequenz: 14µHz

AW: Fehler beim speichern in Datenbank

Ich nehme an, du hast die beiden Scripts nicht selbst geschrieben. Wenn ja, dann wüsstest du bereits, dass mysql_error() dir den zuletzt von MySQL verursachten Fehler anzeigt.

Ersetz die Zeile
PHP:
    $eintragen = mysql_query($adddata);
mit
PHP:
    $eintragen = mysql_query($adddata) or die(mysql_error());
und debugge dann weiter.


Duddle
 

Feedback

Noch nicht viel geschrieben

AW: Fehler beim speichern in Datenbank

Es könnte vielleicht am Feld "Lösung" liegen, denn wenn Datenbankverbindung, Editor und Webserver eventuell abweichende Zeichensätze verwenden, dann kann es sein, dass am Datenbankserver nicht "Lösung" ankommt, sondern "Lsung" oder etwas ganz anderes, da das "ö" falsch kodiert ist. Dann geht der INSERT natürlich nicht, da es kein Feld namens "Lsung" o.ä. gibt.

Kleiner Tipp am Rande: Ich gehe davon aus, dass das Feld "ID" ein auto_increment Feld ist. Wenn dem so ist, lass doch das Feld "ID" im SQL einfach weg, dann musst du da auch nicht so tun als würdest du da "NULL" reinschreiben und MySQL ignoriert bei AI Feldern sowieso die Daten, die man ihm übergibt. Also mach es so:
PHP:
$adddata = "INSERT INTO  Gewinnspiel ( 
'Vorname' , 
'Nachname' , 
'Land' , 
'PLZ' , 
'Stadt' , 
'Strasse' , 
'E-Mail' , 
'Telefon' , 
'Lösung' 
) 
VALUES ('$vorname',  '$nachname',  '$land',  '$plz',  '$stadt',  '$strasse',  '$email',  '$telefon',  '$loesung' 
)";

Und ein weiterer Tipp: Bevor du die Werte aus dem $_POST Array in die Datenbank schreibst, solltest du sie auch auf Richtigkeit prüfen, sonst könnte deine Seite eventuell schnell Opfer einer SQL-Injection werden, und dass kann unangenehm enden!
 

Reb00t

Aktives Mitglied

AW: Fehler beim speichern in Datenbank

SQL Injection kenn ich. Alles schon erlebt und selbst auch mal gemacht aber vielen dank für den Hinweis! Daran denkt man natürlich gar nicht am Anfang :)

Ich probier mal den Lösungsansatz und schreib mal Loesung anstatt Lösung!

lg, Reb00t
 

Feedback

Noch nicht viel geschrieben

AW: Fehler beim speichern in Datenbank

Ich würde generell versuchen in jeglichem PHP, SQL oder ähnlichem Code auf Umlaute, Akzente usw. zu verzichten, da diese ständig Ärger machen und man die Fehler manchmal ewig sucht, denn im Editor ist ja alles richtig, nur eben auf dem Server nicht...
 

Reb00t

Aktives Mitglied

AW: Fehler beim speichern in Datenbank

Habe das mit den Umlauten geändert.

Der Fehler bleibt bestehen. Mir ist ausserdem aufgefallen, dass wenn ich mich bei PHPMyAdmin einlogge, dass dann da steht:

Code:
Neue Datenbank anlegen: 
Keine Rechte

Hängt das damit zusammen? Oder vielleicht doch an was anderem?

lg, Reb00t

//Edit sagt: Allerdings kann ich bei PHPMyAdmin neue Datensätze erstellen. Nur über die PHP halt nicht...


//Edit 2 sagt:
Code:
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 ''Vorname' , 'Nachname' , 'Land' , 'PLZ' , 'Stadt' , 'Strasse' , 'E-Mail' , 'Tele' at line 2

Hä? Das '' bei Vorname steht im QC aber nicht drinnen?
 
Zuletzt bearbeitet:

Feedback

Noch nicht viel geschrieben

AW: Fehler beim speichern in Datenbank

Was spuckt denn mysql_error() für nen Fehler aus? (siehe Antwort von Duddle) Außerdem könnte ganz interessant sein, wie der Query selbst am Ende aussieht: Schreib also mal vor
PHP:
$eintragen = mysql_query($adddata) or die(mysql_error());
noch bitte
PHP:
echo $adddata;
und poste die Ausgabe im Browser hier, ggf. lässt sich der Fehler so ganz einfach sehen (falls es am Query liegen sollte).

An den fehlenden Rechten zum Datenbank anlegen liegt das nicht. Die hast du auf gemieteten Servern normalerweise nie, da du ja eine gewisse Anzahl an Datenbanken im Paket mietest (meistens 1 oder 2) und diese dann verwenden darfst. Alle anderen Rechte, also zum Erstellen und Bearbeiten von Tabellen und Datensätzen hast du aber trotzdem.


EDIT: Grad noch mal in meinem tollen PHP Lehrbuch nachgeschaut. Die Namen der Felder schreibt man im SQL ohne Anführungszeichen. Also schreib mal bitte das hier:
PHP:
$adddata = "INSERT INTO  Gewinnspiel (  
Vorname ,  
Nachname ,  
Land ,  
PLZ ,  
Stadt ,  
Strasse ,  
E-Mail ,  
Telefon ,  
Loesung  
)  
VALUES ('$vorname',  '$nachname',  '$land',  '$plz',  '$stadt',  '$strasse',  '$email',  '$telefon',  '$loesung'  
)";


EDIT 2: Das '' ist auch kein " sondern 2x ', das äußere kommt von der Fehlermeldung (der fragliche Teil des Querys wird in ' eingeschlossen) und das innere kommt aus deinem Query, welches genau der Fehler ist, den ich oben beschrieben habe.
 
Zuletzt bearbeitet:

Reb00t

Aktives Mitglied

AW: Fehler beim speichern in Datenbank

Also dein Ding scheint zu funktionieren AAAAAAABER (Und das ist ein großes Aber ;) )

Code:
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 '-Mail, Telefon, Loesung ) VALUES ('Name', 'Nachname', 'Land', '0000', ' at line 8

lg, Reb00t

//Edit LOOOOOOOOOOOOOOL habs geschafft :D

EMail statt E-Mail :D hahahahaha!
 

Feedback

Noch nicht viel geschrieben

AW: Fehler beim speichern in Datenbank

Keine Sonderzeichen in Tabellen- oder Spaltennamen, das gilt auch für den "-", da in SQL auch gerechnet werden kann und "-" halt "Minus" und nicht "Bindestrich" bedeutet. Nimm den mal weg (schreib also "EMail") und dann sollte es klappen.


EDIT: Ok, das hat sich dann wohl erledigt ;)
 
Zuletzt bearbeitet:

Reb00t

Aktives Mitglied

AW: Fehler beim speichern in Datenbank

Vielen Dank an alle!
Jetzt läuft es genauso wie ich es wollte! Schwere Geburt :)


lg, Reb00t
 

saila

Moderatorle

AW: Fehler beim speichern in Datenbank

Hi,

Umlaute oder Sonderzeichen als auch Operatoren verursachen überhaupt bei INSERT's in eine SQL-Datenbanktabelle überhaupt keine Probleme, wenn man weis mit der Maskierung von den zu schreibenden Werten umzugehen!!!

Also künftig Wissen anstatt Halbwissen verbreiten - das hilft letztlich weiter.
 

Feedback

Noch nicht viel geschrieben

AW: Fehler beim speichern in Datenbank

Sorry, aber solche Beiträge machen mich manchmal etwas aggressiv:

1. Dann lass uns doch bitte an deinem Wissen teilhaben, anstatt nur einen Beitrag à la "Ihr wisst nicht wie es geht, ich schon => Ich toll, ihr nicht" zu schreiben.

2. Du redest von "zu schreibenden Werten", hier ging es aber um Umlaute und Operatoren in Tabellennamen, was für mich durchaus ein Unterschied zu "zu schreibenden Werten" ist:
INSERT INTO tabellenname (feld1, feld2) VALUES ('zu schreibender Wert 1', 'zu schreibender Wert 2');

Fazit: Verbreite doch jetzt bitte ein wenig "Wissen" und kläre uns auf, was du mit "der Maskierung von den zu schreibenden Werten" meinst und wie sie funktioniert. Denn so wie jetzt, bleibt mein "Halbwissen" bestehen und wird sich wohl nicht in "Wissen" umwandeln.


PS: Ein "!" reicht auch, drei "!" sind unnötig.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Keine Mitglieder online.

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben