Ankündigung

Einklappen
Keine Ankündigung bisher.

letzten Datenbank Eintrag löschen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • letzten Datenbank Eintrag löschen

    Salüü

    Gibt es die Möglichkeit, den letzten Eintrag aus der DB zu löschen?

    Ich habe das Problem, dass wenn ein Benutzer bereits besteht, erscheint die Meldung, jedoch werden die Daten trotzdem in die DB geschrieben.

    PHP-Code:
    // Aufbau der Datenbankverbindung  
    $connectionid  mysql_connect ("localhost""root""");  
    if (!
    mysql_select_db ("meine_db"$connectionid))  
    {  
      die (
    "Keine Verbindung zur Datenbank");  
    }  
    // Daten eintragen  
    while (list ($key$value) = each ($benutzer))  
    {  
      
    // SQL-Anweisung erstellen  
      
    $sql "INSERT INTO "
        
    "user (name, passwort, email, vorname, nachname, strasse, nummer, wohnort, plz) "
      
    "VALUES ('".$value["name"]."', '"
                           
    md5 ($value["passwort"])."', '"
                           
    $value["email"]."', '"
                                   
    $value["vorname"]."', '"
                                       
    $value["nachname"]."', '"
                                           
    $value["strasse"]."', '"
                                           
    $value["nummer"]."', '"
                                                   
    $value["wohnort"]."', '"
                                                       
    $value["plz"]."')";  
      
    mysql_query ($sql);  

      if (
    mysql_affected_rows ($connectionid) == 0)  
      {  
        
    header ("Location: index.php");
        
    //echo "Benutzer erfolgreich angelegt.<br>\n";  
      
    }
      else if (
    mysql_affected_rows($connectionid) != 0) { 
              echo 
    "Bitte wählen Sie einen anderen Benutzernamen!<br>"
          } 
    Da bei mir die Abfrage mysql_affected_rows($connectionid) !=0 erst nach dem einschreiben der Daten erfolgt, muss ich diese wieder löschen?

    Oder gibt es eine andere Lösung, als diese Abfrage mit mysql_affected_rows?
    affected kann ja erst nach dem INSERT geschehen.

  • #2
    Wieso machst du nicht erst eine Abfrage ob genau dieser User schon existiert? Und dann wenn er existiert kannste ne Fehlermeldung ausgeben. Wenn er nicht existiert kannst du ihn einfügen.

    Kommentar


    • #3
      Ja aber diese Abfrage kann ich nicht mit mysql_affected_rows machen.

      Was gibt es für eine Möglichkeit diese Abfrage vorher durchzuführen?

      Kommentar


      • #4
        Du kannst für den Benutzernamen einen UNIQUE KEY anlegen.
        Wenn ein zweiter Satensatz mit dem selben Wert für dieses Feld eingetragen werden soll, verweigert MySQL dies und liefert statt dessen einen bestimmten Fehlercode zurück.

        Kommentar


        • #5
          Wieso du machst einfach einen Query ...

          SELECT user_id FROM user WHERE name = $value['name']

          so in etwa und dann wenn da ein Wert gefunden wird weißt du dass ein Benutzer schon mit diesem Namen existiert.

          Kommentar


          • #6
            Mit zwei Abfragen ist die Sache nicht mehr atomar. Deshalb muss, um race conditions zu vermeiden, die Tabelle gesperrt werden vor dem SELECT bis nach dem INSERT.

            Kommentar


            • #7
              Hat bei mir geklappt.

              Nur erhalte ich keine Ausgabe von Mysql..
              Was muss ich da in meinem Code vermerken?

              Kommentar


              • #8
                Als Beispiel zum Ausprobieren
                Code:
                CREATE TABLE "user_test" (
                  "id" int(10) unsigned NOT NULL auto_increment,
                  "name" varchar(64) NOT NULL,
                  PRIMARY KEY  ("id"),
                  UNIQUE KEY "name" ("name")
                );
                PHP-Code:
                <?php
                $mysql 
                mysql_connect('..''..''..') or die(mysql_error());
                mysql_select_db('..'$mysql) or die(mysql_error());

                $sql "
                  INSERT INTO
                    user_test
                    (`name`)
                   VALUES
                    ('foo')
                "
                ;

                $result mysql_query($sql);
                echo 
                '#1 : '.mysql_errno(), "<br />\n";

                // und nochmal den selben Datensatz
                $result mysql_query($sql);
                echo 
                '#2 : '.mysql_errno(), "<br />\n";
                if ( 
                false===$result ) {
                  if ( 
                1062==mysql_errno() ) {
                    echo 
                'Benutzername bereits vergeben';
                  }
                  else {
                    echo 
                'DB-Fehler';
                  }
                }
                else {
                  echo 
                'Benutzer hinzugefügt';
                }

                Kommentar

                Lädt...
                X