PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SQL-Abfrage klappt auf dem lokalen Server aber nicht beim Provider


jonathan
16.01.2006, 13:22:51
Folgender Code klappt ohne Probleme auf dem lokalen Sever aber beim Provider nicht:
...
$email=$HTTP_POST_VARS["email"];
$sql="SELECT COUNT( email ) FROM users WHERE email='$email'";
$rs=mysql_query($sql,$dbref);
$anzahl=mysql_fetch_row($rs);
if($anzahl[0]>0){
$sql="UPDATE users SET name='$name',vorname='$vorname',strasse='$strasse',plz='$plz',stadt='$ ort',land='$land',telefon='$telefon' WHERE email='$email'";
}else{
$sql="INSERT INTO users (name, vorname ,email,strasse,plz,stadt,land,telefon) VALUES ('$name','$vorname','$email','$strasse','$plz','$ort','$land','$telefo n')";
}

Ich habe die Einstellungen für mysql in der php.ini beim Provider und auf dem lokalen Sever verglichen. Sie sind identisch!!!
kann mir jemand vielleicht helfen?
Danke!

xabbuh
16.01.2006, 13:59:33
Was heißt "geht nicht"? Was sagt mysql_error()? Lass dir die Abfragen mal anzeigen. Sieht die Ausgabe wie erwartet aus? Außerdem benutze bitte die php-Tags des Boards, um deinen Quellcode farblich darzustellen.

jonathan
16.01.2006, 14:33:12
1.ich bekomme keine Error-Meldungen
2.auf dem lokalen Server wird bei gleichen Bedingungen (email in der tabelle bereits vorhanden) UPDATE-Befehl ausgeführt, beim Provider der I NSERT-BEfehl.
d.H. im ersten Fall gibt COUNT 1 zurück im zweiten aber 0.

3. die Abfragen habe ich mir ausgeben lassen. Die Ausgaben sehen wie erwartet aus.

DickerRon
16.01.2006, 15:47:58
Dieses Problem hatte ich auch mal, seit dem schreibe ich alle Tabellen- und Feldnamen mit einem ` eingeschlossen. In deinem Fall würde folgende Zeile so aussehen:

$sql="INSERT INTO `users` (`name`, `vorname`, `email`, `strasse`, `plz`, `stadt`, `land`, `telefon`) VALUES ('$name', '$vorname', '$email', '$strasse', '$plz', '$ort', '$land', '$telefon')";
Ob es nun wirklich daran liegt, kann ich dir aber leider auch nicht sagen.

xabbuh
16.01.2006, 16:17:19
2.auf dem lokalen Server wird bei gleichen Bedingungen (email in der tabelle bereits vorhanden) UPDATE-Befehl ausgeführt, beim Provider der I NSERT-BEfehl.
d.H. im ersten Fall gibt COUNT 1 zurück im zweiten aber 0.
Dann lass dir mal die SELECT-Abfrage, mit der du prüfst, ob ein Datensatz existiert, ausgeben. Hat dieser die erwartete Form? Ist die Variable, die die E-Mailadresse enthalten soll möglicherweise leer? Möglicherweise hat dein Provider die veralteten $_HTTP_*_VARS deaktiviert (register_long_arrays (http://www.php.net/manual/en/ini.core.php#ini.register-long-arrays)). Stattdessen solltest du besser die superglobalen Arrays verwenden.

jonathan
16.01.2006, 16:39:02
Die "SELECT"-Abfrage sieht wie erwartet aus. Die Email-Variable ist nicht leer (SELECT COUNT( email ) FROM users WHERE email='user@test.de').
$_HTTP_POST_VARS habe ich gegen $_POST ausgetauscht. Klappt trotzdem nicht.
Gibt es irgendwelche Einstellungen bei php.ini oder bei der Datenbank, die hier mitspielen können??????

xabbuh
16.01.2006, 17:03:33
Und welche Ausgabe erhälst du mit print_r($anzahl)?

jonathan
16.01.2006, 17:07:39
haqt sich erledigt.
Der Grund lag darin, dass die länge beim Feld email auf dem Provider-Server zu kurz eingestellt wurde und die Email-Adresse wahnsinnig lang war (34 zeichen). Die 4 letzten zeichen wurden abgeschnitten und die Email aus dem Formular natürlich nicht gefunden.
Shame on me!
Danke für die Mühe und Unterstützung.