php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


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! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 11-12-2008, 19:47
quantumfire
 Newbie
Links : Onlinestatus : quantumfire ist offline
Registriert seit: Dec 2008
Beiträge: 7
quantumfire ist zur Zeit noch ein unbeschriebenes Blatt
Standard 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=postAnrede<br>
<
input type=text name="Array[anrede]" size5> <br> <br
Vorname<br> <input type=text name="Array[vorname]" size20
<
br> <brName<br> <input type=text name="Array[name]" size20
<
br> <brEmail<br>
<
input type=text name="Array[email]" size40> <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:
Warningmysql_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

Mit Zitat antworten
  #2 (permalink)  
Alt 11-12-2008, 20:08
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

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().
Mit Zitat antworten
  #3 (permalink)  
Alt 11-12-2008, 20:13
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

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
Mit Zitat antworten
  #4 (permalink)  
Alt 11-12-2008, 20:31
quantumfire
 Newbie
Links : Onlinestatus : quantumfire ist offline
Registriert seit: Dec 2008
Beiträge: 7
quantumfire ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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?
Mit Zitat antworten
  #5 (permalink)  
Alt 11-12-2008, 21:02
krel
 Registrierter Benutzer
Links : Onlinestatus : krel ist offline
Registriert seit: Nov 2006
Ort: Osnabrück
Beiträge: 424
krel ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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]
Mit Zitat antworten
  #6 (permalink)  
Alt 12-12-2008, 00:58
quantumfire
 Newbie
Links : Onlinestatus : quantumfire ist offline
Registriert seit: Dec 2008
Beiträge: 7
quantumfire ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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' 
Warningmysql_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

Mit Zitat antworten
  #7 (permalink)  
Alt 12-12-2008, 01:09
krel
 Registrierter Benutzer
Links : Onlinestatus : krel ist offline
Registriert seit: Nov 2006
Ort: Osnabrück
Beiträge: 424
krel ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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."); 
 }

Mit Zitat antworten
  #8 (permalink)  
Alt 12-12-2008, 01:56
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Gibt es irgendwo in deinem Code ein mysql_connect()?
Mit Zitat antworten
  #9 (permalink)  
Alt 12-12-2008, 15:08
quantumfire
 Newbie
Links : Onlinestatus : quantumfire ist offline
Registriert seit: Dec 2008
Beiträge: 7
quantumfire ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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);  ?>
Mit Zitat antworten
  #10 (permalink)  
Alt 12-12-2008, 15:54
lennart
 PHP Junior
Links : Onlinestatus : lennart ist offline
Registriert seit: May 2007
Ort: Hamburg
Beiträge: 565
lennart ist zur Zeit noch ein unbeschriebenes Blatt
Standard

mysql_select_db()
Mit Zitat antworten
  #11 (permalink)  
Alt 12-12-2008, 16:04
quantumfire
 Newbie
Links : Onlinestatus : quantumfire ist offline
Registriert seit: Dec 2008
Beiträge: 7
quantumfire ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von lennart
mysql_select_db()
Toll. Und wo muss das in meinem Code hin?
Ich bin Anfänger.
Mit Zitat antworten
  #12 (permalink)  
Alt 12-12-2008, 16:04
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

und vielleicht mal das hier lesen

peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #13 (permalink)  
Alt 12-12-2008, 16:05
lennart
 PHP Junior
Links : Onlinestatus : lennart ist offline
Registriert seit: May 2007
Ort: Hamburg
Beiträge: 565
lennart ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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.
Mit Zitat antworten
  #14 (permalink)  
Alt 12-12-2008, 17:03
quantumfire
 Newbie
Links : Onlinestatus : quantumfire ist offline
Registriert seit: Dec 2008
Beiträge: 7
quantumfire ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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.
Mit Zitat antworten
  #15 (permalink)  
Alt 12-12-2008, 17:13
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

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
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
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.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni


 

Aktuelle PHP Scripte

HeidiSQL - kostenloses MySQL front-end Editor für Windows ansehen HeidiSQL - kostenloses MySQL front-end Editor für Windows

HeidiSQL - ist ein Windows-Editor für die bekannt open Source Datenbank mySQL

10.12.2018 Berni | Kategorie: MYSQL/ Management
piwik Open-Source Webanalyse-Software ansehen piwik Open-Source Webanalyse-Software

piwik ist eine gute Alternative zu Google Analytics. Viele Features und ein modernes Erscheinungsbild mit aussagefähigen Statistiken in Echtzeit

10.12.2018 phpler | Kategorie: PHP/ Besucherzaehler
jQuery Mobile ansehen jQuery Mobile

Touch-Optimized Web Framework für Smartphones & Tablets

09.12.2018 phpler | Kategorie: AJAX/ Framework
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:55 Uhr.