PHP or die variabel festlegen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
benutzername
code
dank
datenbank
datensatz
eintrag
email
fehler
fehlermeldung
frage
http
index
problem
server
tabelle
trigger
url
verbindung
zweite tabelle
-
hackyourlife schrieb:
philippkern schrieb:
Das wurde schon mal erwähnt.
Und nicht vergessen etwas gegen SQL-Injections einzubauen!
Ja ich dachte auch ich hätte das hier schon gelesen gehabt, aber der Beitrag scheint weg zu sein.
Oder ich bin blind ... -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Erstmal an philippkern:
philippkern schrieb:
hackyourlife schrieb:
philippkern schrieb:
Das wurde schon mal erwähnt.
Und nicht vergessen etwas gegen SQL-Injections einzubauen!
Ja ich dachte auch ich hätte das hier schon gelesen gehabt, aber der Beitrag scheint weg zu sein.
Oder ich bin blind ...
Wenn du blind bist, sind wir gemeinsam blind, denn ich find es grad auch nicht mehr, aber egal, denn ich werde daran denken.
Jetzt an hackyourlife:
hackyourlife schrieb:
Die Lösung würde sicher einige hier interessieren...
Gut, ok. Ich habe es jetzt folgendermaßen gelößt:
Zuerst wird der erste Datensatz an die erste Tabelle übermittelt. Erst auf einer späterern Seite wird dann der Eintrag in die zweite Tabelle gemacht, wenn sie noch nicht vorhanden ist, falls sie schon vorhanden ist, wird nichts gemacht, hier mal der Code:
$Verbindung = mysql_connect("server", "benutzer", "passwort"); //Die verbindung zur Datenbank mysql_select_db("name"); //Die auswahl der Tabelle $vorhanden = 0; //wird spaeter interessant $eMail = mysql_real_escape_string($eMail); //Gegen MySQL Injections $Abfrage = "SELECT eMailAdresse FROM tabelle1 WHERE eMailAdresse = '$eMail'"; //Auswahl der eMail Adresse $ErgebnisseMail = mysql_query($AbfrageeMail); while($RoweMail = mysql_fetch_object($ErgebnisseMail)) { $vorhanden = 1; //wird ausgeführt, wenn die eingegebene eMail Adresse schon vorhanden sein sollte } if($vorhanden == 1) { //wenn die eMail Adresse bereits vorhanden ist, dann... echo "Die gewählte eMail Adresse ist bereits registriert": } else { //...sonst... $eMail = mysql_real_escape_string($eMail); //gegen die SQL Injection $Eintrag = INSERT INTO tabelle1 //eintrag in die MySQL Datenbank wird vorbereitet, die ID wird ueber AUTO_INCREMENT festgelegt. (eMail) VALUES ('$eMail')"; $Eintragen = mysql_query($Eintrag); //Eintrag in die Tabelle if($Eintragen == true) { //Abfrage, ob etwas schiefgelaufen ist echo "Vielen Dank für die Registrierung"; } else { echo "Uups, da ist was schiefgelaufen.... Bitte versuche es in ein paar Minuten erneut!"; } }
Und jetzt die zweite Tabelle
$Verbindung mysql_connect("server", "benutzer", "passwort");//Wieder die Verbindung zur Datenbank mysql_select_db("datenbank"); $Abfrage = "SELECT BenutzerID FROM Tabelle2 WHERE BenutzerID = '$BenutzerID'"; $Ergebnis = mysql_query($Abfrage); if(mysql_num_rows($Ergebnis) == 0) { //Abfrage, ob der Datensatz schon vorhanden ist $Eintrag = "INSERT INTO tabelle2 (BenutzerID) VALUES ('$BenutzerID')"; //Die Benutzer ID habe ich zuvor schon in die SESSION geschrieben, und von da aus wieder ausgelesen $Eintragen = mysql_query($Eintrag); }
Beitrag zuletzt geändert: 15.9.2012 20:15:17 von thwbm -
Bei deinem Code kommt mir das Grauen ... :S
Zum 1. Teil:
Genau für sowas gibt es das UNIQUE-Constraint.
Damit würdest du dir das 1. SELECT sparen.
Weiters:
Unten verwendest du mysql_num_rows zum Überprüfen, warum machst du das dann nicht auch oben?
Es bringt nicht viel wenn du unten ein
machst, aber oben bereits $eMail ungefiltert an die Datenbank sendest ...mysql_real_escape_string($eMail);
Außerdem solltest du nicht mehr mysql sondern mysqli oder PDO_MySQL verwenden.
Edit:
thwbm schrieb:
//Der rest kommt spaeter, ich gehe jetzt erstmal ins Bett
Und den Rest konntest du nicht gleich reinkopieren?
Hätte das so lange gedauert?
Edit2:
Natürlich bringt dein
auch nichts hätte es oben gestanden...mysql_real_escape_string($eMail);
Richtig wäre$eMail = mysql_real_escape_string($eMail);
Beitrag zuletzt geändert: 15.9.2012 10:08:15 von philippkern -
philippkern schrieb:
Unten verwendest du mysql_num_rows zum Überprüfen, warum machst du das dann nicht auch oben?
Weil ich mysql_num_rows am Anfang noch nicht kannte, es aber jetzt verwende.
philippkern schrieb:
Es bringt nicht viel wenn du unten ein
machst, aber oben bereits $eMail ungefiltert an die Datenbank sendest ...mysql_real_escape_string($eMail);
Danke, ist jetzt gefixst
philippkern schrieb:
thwbm schrieb:
//Der rest kommt spaeter, ich gehe jetzt erstmal ins Bett
Und den Rest konntest du nicht gleich reinkopieren?
Hätte das so lange gedauert?
Nein, aber da ich den Quellcode nocheinmal etwas ausführlicher kommentiert habe, brauchte ich etwas länger. Auserdem wollte ich sichergehen, dass ich kein Datenbankpasswort mehr drin habe.
philippkern schrieb:
Natürlich bringt dein
auch nichts hätte es oben gestanden...mysql_real_escape_string($eMail);
Richtig wäre$eMail = mysql_real_escape_string($eMail);
Erneut ein Danke an dich, ist gefixt
Beitrag zuletzt geändert: 16.9.2012 17:13:40 von thwbm -
Kein Problem.
thwbm schrieb:
Nein, aber da ich den Quellcode nocheinmal etwas ausführlicher kommentiert habe, brauchte ich etwas länger.
Also für uns brauchst du nichts extra Kommentieren. :)
Wobei es in der Softwareentwicklung eigentlich sowieso immer empfehlenswert ist seinen Code zu Kommentieren.
Jedoch sinnvoll und nicht jede Zeile extra. ;)
Wenn du fertig bist, dann kannst du ja deinen Code wieder hier veröffentlichen. Ich werd ihn dann nochmal durchschaun. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage