Logo - MyWebsolution.de
User gesamt  :  2387876
User online  :  6
KubaSeoTräume, PHP Forum, PHP Community and more ... MyWebsolution.de!
   
   
 
Registrieren Login User F.A.Q Suche Home

eingeloggt bleiben

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
Profil ansehen
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
Profil ansehen
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.
Profil ansehen
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.
Profil ansehen
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
Profil ansehen
Seite: 1 no reply
Powered by Pascal Landau © 2006 MyWebsolution.de
Designed by Pascal Landau © 2006 MyWebsolution.de
 
 
 
 
Home Email Impressum Disclaimer Statistik