| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

11-12-2008, 18:47
|
|
quantumfire
Newbie
|
|
Registriert seit: Dec 2008
Beiträge: 7
|
|
Doppelten Email-Eintrag in mysql verhindern
Hallo Zusammen und einen schönen guten Abend.
Ich bin neu hier und hoffe mal, das ich mit meiner Anfrage hier richtig bin.
Ich habe ein kleines Problem und da ich noch relativer Anfänger bin, wäre es toll, wenn mir einer von euch mit helfen könnte.
Ich versuche hier mal das Problem so verständlich wie möglich zu beschreiben.
Ich habe ein Formular (siehe unten), mit dem Anrede, Vorname, Name und Email in eine mySql DB mittels der Datei work.php (siehe unten) eingetragen werden.
Diese soll die Daten in die DB speichern, sofern diese Emailadresse noch nicht vorhanden ist. Ist diese bereits vorhanden, wird eben nichts gespeichert.
Leider tut es das nicht. Es kommt eine Fehlermeldung (siehe unten) und er speichert die Daten dennoch ab.
Kann mir bitte jemand sagen, was zum einen diese Fehlermeldung bedeutet und vor allem, wo genau der Fehler liegt und wie es richtig gemacht werden muss?
Vielen herzlichen Dank jetzt schon an Euch.
Formular:
PHP-Code:
<form action="work.php" method=post> Anrede<br>
<input type=text name="Array[anrede]" size= 5> <br> <br>
Vorname<br> <input type=text name="Array[vorname]" size= 20>
<br> <br> Name<br> <input type=text name="Array[name]" size= 20>
<br> <br> Email<br>
<input type=text name="Array[email]" size= 40> <br> <br>
<input type=submit name="SUBMIT" value="ok"> </form>
Ausführung: (work.php)
PHP-Code:
$sql = "SELECT count(*) AS anzahl FROM $tabelle WHERE email = '".$Array[email]."'";
$query = mysql_query($sql);
$row = mysql_fetch_object($query);
if($row->anzahl > 0)
echo "E-Mail-Adresse schon vorhanden";
else { //es folgt der Eintrag in die Datenbank
$dbanfrage = "INSERT into $tabelle values ('0', '$Array[email]', '$Array[anrede]', '$Array[vorname]', '$Array[name]')";
if (mysql_db_query ($dbname, $dbanfrage, $dbverbindung)) {
print ("Datenbankeintrag erfolgreich.");
} else { print ("Es traten Probleme auf.");
}
}
Fehlermeldung:
PHP-Code:
Warning: mysql_fetch_object(): supplied argument is not a
valid MySQL result resource in /var/kunden/webs/user171/html/kontakt/datenbank/work_2.php on line 25
Datenbankeintrag erfolgreich.
|

11-12-2008, 19:08
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Wo soll man da anfangen? Da ist einiges falsch ...
register_globals in deiner php.ini ausschalten!
error_reporting(E_ALL), siehe unsere Regeln!
<input name="foo" ... > statt <input name="Array[foo]" ... >
passend dazu $_POST['foo'] statt $Array[foo].
<form method="post" ...> statt <form method=post ...>
<input size="20" ... > statt <input size= 20 ... >
oder allgemein <tag parameter="value" ...>
Dann mal bitte echo $sql; vor mysql_query().
|

11-12-2008, 19:13
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.308
|
|
legt die spalte für die mail als unique fest und dann kannst du mit mysql_affected_rows prüfen.
peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

11-12-2008, 19:31
|
|
quantumfire
Newbie
|
|
Registriert seit: Dec 2008
Beiträge: 7
|
|
Zitat:
Original geschrieben von onemorenerd
Wo soll man da anfangen? Da ist einiges falsch ...
register_globals in deiner php.ini ausschalten!
error_reporting(E_ALL), siehe unsere Regeln!
|
Ich verstehe im Moment nur BAHNHOF. Ich dachte, das Forum wäre für Angänger geignet?
Zitat:
Original geschrieben von onemorenerd
<input name="foo" ... > statt <input name="Array[foo]" ... >
passend dazu $_POST['foo'] statt $Array[foo].
<form method="post" ...> statt <form method=post ...>
<input size="20" ... > statt <input size= 20 ... >
oder allgemein <tag parameter="value" ...>
|
OK. Das habe ich verstanden und stimme dir vollkommen zu. Auch wenn es mein eigentliches Problem nicht löst.
Zitat:
Original geschrieben von onemorenerd
Dann mal bitte echo $sql; vor mysql_query().
|
Hier verstehe ich wieder nur BAHNHOF.
Könntest du mir statt dessen nicht den richtigen CODE posten?
|

11-12-2008, 20:02
|
|
krel
Registrierter Benutzer
|
|
Registriert seit: Nov 2006
Ort: Osnabrück
Beiträge: 424
|
|
Um Code betteln kommt hier nicht gut, dass musste ich damals auch schon feststellen, ist aber ja auch nicht verwunderlich, schließlich will man nciht für zig Leute den Code schreiben, man muss ihn schließlich verstehen..
also:
1.) error_reporting(E_ALL); hast du in dein Script eingefügt?
2.) das echo $sql; dient dazu die eigentlich query die du abschickst dir vorher anzugucken und uns evt mitzuteilen; dabei wird dir dann auffallen, dass da was falsch sein muss, daher wahrscheinlich deine Fehlermeldung.
3.) mysql_db_query ist deprecated, nimm lieber mysql_query und zu jedem mysql_query gehört in der Entwicklungsphase ein OR die(mysql_error());
4.) das mit dem $_POST['foo'] hast du ja verstanden, musst es dann nur in deine Query einbauen, desweiteren merke: Arrays spricht man so an $array['foo'] und nicht $array[foo]
|

11-12-2008, 23:58
|
|
quantumfire
Newbie
|
|
Registriert seit: Dec 2008
Beiträge: 7
|
|
Hallo Krel,
vielen herzlichen Dank für deine kontruktive Antwort.
NIchts liegt mir ferner als hier um einen Code zu betteln. Ich hatte mich zuletzt vor 5 Jahren mit PHP und mySql beschäftigt und habe ansonsten wenig damit zu tun. Ich benötige diese kleine Hilfe, weil ich einfach nicht die Zeit habe mich erst lange in die Thematik neu einzuarbeiten wegen dieses kleinen Codes. Und wenn ich als Anfänger nicht hier fragen kann, wo dann.
Nun, wie dem auch sei. Ich habe die Änderungen so weit ich sie verstanden habe umgesetzt, aber immer noch Probleme.
Zitat:
Original geschrieben von krel
1.) error_reporting(E_ALL); hast du in dein Script eingefügt
|
Habe ich ins Script eingefügt
Zitat:
Original geschrieben von krel
2.) das echo $sql; dient dazu die eigentlich query die du abschickst dir vorher anzugucken und uns evt mitzuteilen; dabei wird dir dann auffallen, dass da was falsch sein muss, daher wahrscheinlich deine Fehlermeldung.
|
Ich hoffe, ich habe das richtig verstanden und eigefügt. (Sie Code unten 2. Zeile)
Zitat:
Original geschrieben von krel
3.) mysql_db_query ist deprecated, nimm lieber mysql_query und zu jedem mysql_query gehört in der Entwicklungsphase ein OR die(mysql_error());
|
Das habe ich nicht ganz verstanden. Wie muss die entsprechende Zeile genau ausehen und wo muss diese stehen?
Zitat:
Original geschrieben von krel
4.) das mit dem $_POST['foo'] hast du ja verstanden, musst es dann nur in deine Query einbauen, desweiteren merke: Arrays spricht man so an $array['foo'] und nicht $array[foo]
|
Ich hoffe, das ich dies richtig verstanden und eingebaut habe.
Ich wäre dir wirklich sehr dankbar, wenn du mir bei der Lösung des Problems weiterhin helfen könntest.
Vielen Dank
Überarbeiteter Code:
PHP-Code:
$sql = "SELECT count(*) AS anzahl FROM $tabelle WHERE email = '".$_POST['email']."'";
echo $sql;
$query = mysql_query($sql);
$row = mysql_fetch_object($query); // Zeile 28 Siehe Fehlermeldung
if($row->anzahl > 0) // Zeile 29 Siehe Fehlermeldung
echo "E-Mail-Adresse schon vorhanden";
else {
//es folgt der Eintrag in die Datenbank
$dbanfrage = "INSERT into $tabelle values ('0', '$_POST[email]', '$_POST[anrede]', '$_POST[vorname]', '$_POST[name]')";
if (mysql_db_query ($dbname, $dbanfrage, $dbverbindung)) { print ("Datenbankeintrag erfolgreich.");
} else { print ("Es traten Probleme auf."); } }
Fehlermeldung:
PHP-Code:
SELECT count(*) AS anzahl FROM kontakt WHERE email = 'test@meinedomain.de'
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in
/var/kunden/webs/user171/html/kontakt/datenbank/work_2.php on line 28
Notice: Trying to get property of non-object in
/var/kunden/webs/user171/html/kontakt/datenbank/work_2.php on line 29
Datenbankeintrag erfolgreich.
|

12-12-2008, 00:09
|
|
krel
Registrierter Benutzer
|
|
Registriert seit: Nov 2006
Ort: Osnabrück
Beiträge: 424
|
|
PHP-Code:
$sql = "SELECT count(*) AS anzahl FROM $tabelle WHERE email = '".$_POST['email']."'";
echo $sql;
$result = mysql_query($sql) OR die(mysql_error()); // <--- wichtig, denn dann bekommen wir den mysql_error..
$row = mysql_fetch_object($result); // Zeile 28 Siehe Fehlermeldung
if($row->anzahl > 0) {
echo "E-Mail-Adresse schon vorhanden";
} else {
$sql = "INSERT INTO
$tabelle VALUES (0, //<--- ist wahrscheinlich ein int in der DB dann ohne ' '
'".$_POST['email']."',
'".$_POST['anrede']."',
'".$_POST['vorname']."',
'".$_POST['name']."')";
mysql_query($sql) OR die(mysql_error());
if (mysql_affected_rows() > 0){
print ("Datenbankeintrag erfolgreich.");
} else {
print ("Es traten Probleme auf.");
}
}
|

12-12-2008, 00:56
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Gibt es irgendwo in deinem Code ein mysql_connect()?
|

12-12-2008, 14:08
|
|
quantumfire
Newbie
|
|
Registriert seit: Dec 2008
Beiträge: 7
|
|
Zitat:
Original geschrieben von onemorenerd
Gibt es irgendwo in deinem Code ein mysql_connect()?
|
Hallo onemorenerd.
Ja den gibt es. Bevor ich die Abfrage nach der email auf
Vorhandensein eingefügt habe, hat das speichern funktioniert.
Die Fehler traten erst danach auf.
Zumindest bekomme ich jetzt dank der Hilfe von "krel" diese
Fehlermeldung:
PHP-Code:
SELECT count(*) AS anzahl FROM kontakt WHERE email = 'test@meinedomain.de'No database selected
Ich vermute mal, das es, wie du wahrscheinlich vermutest, daran liegt.
Vielleicht könntest du mir da weiterhelfen. Das wäre super.
Hier nochmal mein kompletter Code:
PHP-Code:
<?php
ini_set('error_reporting', E_ALL);
$host = "localhost";
$user = "user***";
$password = "*********";
$dbname = "usr_user******";
$tabelle ="kontakt";
$dbverbindung = mysql_connect ($host, $user, $password);
$sql = "SELECT count(*) AS anzahl FROM $tabelle WHERE email = '".$_POST['email']."'";
echo $sql;
$result = mysql_query($sql) OR die(mysql_error());
$row = mysql_fetch_object($result);
if($row->anzahl > 0) {
echo "E-Mail-Adresse bereits vorhanden";
} else {
$sql = "INSERT INTO $tabelle VALUES (0,
'".$_POST[email]."',
'".$_POST[anrede]."',
'".$_POST[vorname]."',
'".$_POST[name]."')";
mysql_query($sql) OR die(mysql_error());
if (mysql_affected_rows() > 0){
print ("Datenbankeintrag erfolgreich.");
} else { print ("Es traten Probleme auf.");
}
}
mysql_close ($dbverbindung); ?>
|

12-12-2008, 14:54
|
|
lennart
PHP Junior
|
|
Registriert seit: May 2007
Ort: Hamburg
Beiträge: 565
|
|
mysql_select_db()
|

12-12-2008, 15:04
|
|
quantumfire
Newbie
|
|
Registriert seit: Dec 2008
Beiträge: 7
|
|
Zitat:
Original geschrieben von lennart
mysql_select_db()
|
Toll. Und wo muss das in meinem Code hin?
Ich bin Anfänger.
|

12-12-2008, 15:04
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.308
|
|
und vielleicht mal das hier lesen
peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

12-12-2008, 15:05
|
|
lennart
PHP Junior
|
|
Registriert seit: May 2007
Ort: Hamburg
Beiträge: 565
|
|
Zitat:
Original geschrieben von quantumfire
Toll. Und wo muss das in meinem Code hin?
Ich bin Anfänger.
|
Heieiei. Da wo du die Datenbank auswählen willst.
|

12-12-2008, 16:03
|
|
quantumfire
Newbie
|
|
Registriert seit: Dec 2008
Beiträge: 7
|
|
Zitat:
Original geschrieben von Kropff
und vielleicht mal das hier lesen
peter
|
Super. Das war genau das, was ich gebraucht habe.
Konnte das Problem lösen. Funktioniert jetzt.
P.S. Deine Seite mit dem Tutorial ist sehr gut verständlich.
Vielen Dank.
|

12-12-2008, 16:13
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.308
|
|
Zitat:
Original geschrieben von quantumfire
Konnte das Problem lösen. Funktioniert jetzt.
|
dann bitte auch für die anderen den fehler und die lösung posten. falls mal einer ein ähnliches problem hat.
peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|