|
|
User gesamt
|
:
|
2387876
|
User online
|
:
|
6
|
|
KubaSeoTräume, PHP Forum, PHP Community and more ... MyWebsolution.de!
|
|
|
|
MyWebsolution.de Foren » PHP und MYSQL » Fehlermeldung nach Mysql "UPDATE"
Seite:
|
1
|
Posts pro Seite: 5
10
20
|
Autor
|
Thread
|
28.07.2008 01:11 Uhr
|
Fehlermeldung nach Mysql "UPDATE"
|
gensfleisch
|
User
|
|
registriert
|
28.07.2008
|
wohnt in
|
|
Beiträge
|
4
|
|
Hallo,
ich habe folgende Abwandlung des Codes aus dem WS "Loginsystem" im Einsatz:
Code:
<?php
error_reporting(E_ALL);
if(isset($_POST['ID']) AND $_POST['ID'] != 0) {
if(isset($_POST['submit']) AND $_POST['submit']=='Email-Adresse ändern'){
// Fehlerarray anlegen
$errors = array();
// Prüfen, ob alle Formularfelder vorhanden sind
if(!isset($_POST['Email']))
// Ein Element im Fehlerarray hinzufügen
$errors[]= "Bitte benutzen Sie das Formular aus dem User-Menu.";
else{
$emails = array();
$sql = "SELECT
Email
FROM
User
";
$result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
while($row = mysql_fetch_assoc($result))
$emails[] = $row['Email'];
$sql = "SELECT
Email
FROM
User
WHERE
ID = '".mysql_real_escape_string($_POST['ID'])."'
";
$result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
$row = mysql_fetch_assoc($result);
if(trim($_POST['Email'])=='')
$errors[]= "Bitte geben Sie dase Email-Adresse ein.";
elseif(!preg_match('§^[\w\.-]+@[\w\.-]+\.[\w]{2,4}$§', trim($_POST['Email'])))
$errors[]= "Ihre Email Adresse hat eine falsche Syntax.";
elseif(in_array(trim($_POST['Email']), $emails) AND trim($_POST['Email'])!= $row['Email'])
$errors[]= "Diese Email-Adresse ist bereits vergeben.";
}
if(count($errors)){
echo "Die Daten konnten nicht bearbeitet werden.<br>\n".
"<br>\n";
foreach($errors as $error)
echo $error."<br>\n";
}
else{
$sql = "UPDATE
User
SET
Email = '".mysql_real_escape_string(trim($_POST['Email']))."'
";
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
echo "Die Daten wurden erfolgreich gespeichert.<br>\n";
}
}
elseif(isset($_POST['submit']) AND $_POST['submit'] == 'Passwort ändern') {
$errors=array();
if(!isset($_POST['Passwort'],
$_POST['Passwortwiederholung']))
$errors[]= "Bitte benutzen Sie das Formular aus dem User-Menu.";
else {
if(trim($_POST['Passwort'])=="")
$errors[]= "Bitte geben Sie das Passwort ein.";
elseif(strlen(trim($_POST['Passwort'])) < 6)
$errors[]= "Ihr Passwort muss mindestens 6 Zeichen lang sein.";
if(trim($_POST['Passwortwiederholung'])=="")
$errors[]= "Bitte wiederholen Sie das Passwort.";
elseif(trim($_POST['Passwort']) != trim($_POST['Passwortwiederholung']))
$errors[]= "Ihre Passwortwiederholung war nicht korrekt.";
}
if(count($errors)){
echo "Das Passwort konnte nicht gespeichert werden.<br>\n".
"<br>\n";
foreach($errors as $error)
echo $error."<br>\n";
}
else{
$sql = "UPDATE
User
SET
Passwort ='".md5(trim($_POST['Passwort']))."'
WHERE
ID = '".$_POST['ID']."'
";
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
echo "Das Passwort wurde erfolgreich gespeichert.<br>\n";
}
}
else {
$sql = "SELECT
Nickname,
Vorname,
Name,
Email
FROM
User
WHERE
ID = '".mysql_real_escape_string($_POST['ID'])."'
";
$result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
$row = mysql_fetch_assoc($result);
echo "<form ".
" name=\"Daten\" ".
" action=\"index.php?page=user&action=edit\" ".
" method=\"post\" ".
" accept-charset=\"ISO-8859-1\">\n";
echo "<h5>Obligatorische Angaben</h5>\n";
echo "<span>\n".
"Nickname :\n".
"</span>\n";
echo htmlentities($row['Nickname'], ENT_QUOTES)."\n";
echo "<br>\n";
echo "<span>\n".
"Vorname :\n".
"</span>\n";
echo htmlentities($row['Vorname'], ENT_QUOTES)."\n";
echo "<br>\n";
echo "<span>\n".
"Name :\n".
"</span>\n";
echo htmlentities($row['Name'], ENT_QUOTES)."\n";
echo "<br>\n";
echo "<span style=\"font-weight:bold;\" ".
" title=\"Ihre.Adresse@Ihr-Anbieter.de\">\n".
"Email-Adresse:\n".
"</span>\n";
echo "<input type=\"text\" name=\"Email\" maxlength=\"70\" value=\"".htmlentities($row['Email'], ENT_QUOTES)."\">\n";
echo "<br>\n";
echo "<input type=\"submit\" name=\"submit\" value=\"Email-Adresse ändern\">\n";
echo "<input type=\"hidden\" name=\"ID\" value=\"".$_POST['ID']."\">\n";
echo "</form>\n";
echo "<form ".
" name=\"Passwort\" ".
" action=\"index.php?page=user&action=edit\" ".
" method=\"post\" ".
" accept-charset=\"ISO-8859-1\">\n";
echo "<span style=\"font-weight:bold;\" ".
" title=\"min.6\">\n".
"Neues Passwort :\n".
"</span>\n";
echo "<input type=\"password\" name=\"Passwort\">\n";
echo "<br>\n";
echo "<span style=\"font-weight:bold;\" ".
" title=\"min.6\">\n".
"Neues Passwort wiederholen:\n".
"</span>\n";
echo "<input type=\"password\" name=\"Passwortwiederholung\">\n";
echo "<br>\n";
echo "<input type=\"submit\" name=\"submit\" value=\"Passwort ändern\">\n";
echo "<input type=\"hidden\" name=\"ID\" value=\"".$_POST['ID']."\">\n";
echo "</form>\n";
}
}
else {
$sql = "SELECT
ID,
Nickname
FROM
User
ORDER BY
Nickname ASC
";
$result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
if(!mysql_num_rows($result))
echo "Es befinden sich keine User in der Datenbank\n";
else {
echo "<form ".
" action=\"index.php?page=user&action=edit\" ".
" method=\"post\" ".
" accept-charset=\"ISO-8859-1\">";
echo "<select name=\"ID\">\n";
echo " <option value=\"0\">Bitte einen User wählen</option>\n";
while($row = mysql_fetch_assoc($result)) {
echo " <option value=\"".$row['ID']."\">\n";
echo $row['Nickname']."\n";
echo " </option>\n";
}
echo "</select>\n";
echo "<input type=\"submit\" name=\"submit\" value=\"User auswählen\">";
echo "</form>\n";
}
}
?>
Theoretisch sollte das ja so hinhauen als Admin die Email-Adresse zu ändern. Nur wenn ich nun die edit.php ausführe erscheint im Browser folgende Fehlermeldung:
Zitat:
UPDATE
User
SET
Email = 'haenschen@klein.de'
Duplicate entry 'haenschen@klein.de' for key 3
Hab mich auf Fehlersuche gemacht nur leider bisher nichts gefunden.
Über phpmyadmin habe ich direkt auf die Datenbank zugegriffen und mir die Einträge anzeigen lassen. Die alte Email-Adresse wurde, wie gewünscht, durch die neue ersetzt. Nach dem Neuladen der Seite im Browser, erscheint diese auch im input-Feld des Formulars.
Leider bin ich in der Hinsicht total ratlos. Ich würde mich um Anregungen und Lösungsvorschläge freuen.
Gruß, Max
|
|
|
28.07.2008 11:52 Uhr
|
|
splasch
|
Forenposter
|
|
registriert
|
21.04.2008
|
wohnt in
|
|
Beiträge
|
67
|
|
Das bedeuted das du versucht mehrmals die selbe Mail Adresse in die Tabelle einzutragen.
Die Fehlermeldung sagt nix anderes aus als das es die Mail Adresse schon in der Tabelle gibt.
Endere dementsprechen deinen Sql befehl bwz prüfe vorher ob es die Mail bereits gibt.
Mfg Splasch
|
|
|
28.07.2008 17:48 Uhr
|
|
gensfleisch
|
User
|
|
registriert
|
28.07.2008
|
wohnt in
|
|
Beiträge
|
4
|
|
Vielen Dank für die schnelle Antwort, aber mir ist das ganze noch nicht klar.
Es gibt diesen User bereits in der Tabelle mit einer Email-Adresse, z.B mustermann@test.de.
Ich möchte jetzt diese Adresse ändern und tippe eine anderslautende ein, z. B. haenschen@klein.de ein und klicke auf "Email-Adresse ändern". Daraufhin durchläuft dieser Vorschlag ja schon eine Prüfung.
Code:
$emails = array();
$sql = "SELECT
Email
FROM
User
";
$result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
while($row = mysql_fetch_assoc($result))
$emails[] = $row['Email'];
$sql = "SELECT
Email
FROM
User
WHERE
ID = '".mysql_real_escape_string($_POST['ID'])."'
";
$result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
$row = mysql_fetch_assoc($result);
if(trim($_POST['Email'])=='')
$errors[]= "Bitte geben Sie dase Email-Adresse ein.";
elseif(!preg_match('§^[\w\.-]+@[\w\.-]+\.[\w]{2,4}$§', trim($_POST['Email'])))
$errors[]= "Ihre Email Adresse hat eine falsche Syntax.";
elseif(in_array(trim($_POST['Email']), $emails) AND trim($_POST['Email'])!= $row['Email'])
$errors[]= "Diese Email-Adresse ist bereits vergeben.";
Da die beiden Emaiadressen ja unterschiedlich sind, dürfte keine Fehlermeldung kommen. Also wird sie eingetragen.
Doch in meinem Fall kommt eben folgende Meldung:
Code:
UPDATE
User
SET
Email = 'haenschen@klein.de'
Duplicate entry 'haenschen@klein.de' for key 3
Wenn man sich aber die Inhalte der Tabelle in der Datenbank anzeigen lässt, wurde die Email-Adresse wie gewünscht geändert.
Könnte es sein, dass er die Fehlermeldung anzeigt, weil schon ein Eintrag in der Tabelle vorhanden ist?
Ich werde daraus einfach nicht schlau.
Dieser Beitrag wurde am 28.07.2008 um 17:51:58 Uhr von gensfleisch zum 1. Mal editiert.
|
|
|
28.07.2008 19:37 Uhr
|
|
splasch
|
Forenposter
|
|
registriert
|
21.04.2008
|
wohnt in
|
|
Beiträge
|
67
|
|
Sql Grundkentnisse!!!!
PHP:
$sql = "UPDATE
User
SET
Email = '".mysql_real_escape_string(trim($_POST['Email']))."'
";
Und was passiert da?
Ja richtig alle Mail adressen werden überschrieben
Somit haben wir einen mehrfachen versuch doppelt die Mail adresse einzutragen.
Da er versucht alle Datensätze mit der Mail Adresse zu belegen.
Um das zu verhindern mußt du den Datensatz eindeutig ansprechen (Where klausel)
Mfg Splasch
Dieser Beitrag wurde am 28.07.2008 um 19:39:00 Uhr von splasch zum 1. Mal editiert.
|
|
|
28.07.2008 20:15 Uhr
|
|
gensfleisch
|
User
|
|
registriert
|
28.07.2008
|
wohnt in
|
|
Beiträge
|
4
|
|
Vielen Dank für den Hinweis! Das hab ich heute Nacht um 1:11 Uhr einfach überlesen dieses Quellcode-Zeile. Ist ja klar, dass es ohne WHERE-Klausel nicht funktioniert.
Ich sollte nicht so spät arbeiten.
Gruß, Max
|
|
|
Seite:
|
1
|
|
|
Powered by
|
Pascal Landau
|
© 2006
|
MyWebsolution.de
|
Designed by
|
Pascal Landau
|
© 2006
|
MyWebsolution.de
|
|
|
|
|
|