Nur anlegen fals es noch nicht existiert

unlord

Erfahrenes Mitglied
Ich hab mir ein Script zum registrieren angelegt, welches auch funktioniert. Nur steh ich irgendwie grad aufm Schlauch und hab keine Ahnung, wie man es vollbringen könnte, dass wenn z.B. der User X schon existiert, dass dann keine neue Spalte eingetragen wird, sondern z.B. eine Fehlermeldung kommt. Kann mir da fix jemand helfen? :)

mfg
unlord
 
Naja, du fragst halt die Datenbank ob bereits ein Eintrag mit
diesem Usernamen "xyz" besteht. Wenn nein, dann trägst du
die Daten ein und wenn doch dann gibst du eine Fehlermeldung
aus.

zB.

PHP:
//$username enthält den Namen des neu angelegten Nutzers
$result = mysql_query("SELECT * FROM tabelle WHERE username='".$username."'");
//Wenn das Ergebniss leer ist ist davon auszugehen das der Nutzer noch nicht existiert
if(empty($result)) ... INSERT SQL BLOCK
else echo "Der Nutzer ".$username." existiert bereits, bitte wähle einen anderen Namen";

Verstanden wie der Hase läuft ? :)

Gruß,
Nils
 
Mh... ich habe jetzt deinen Code eingebaut aber irgendwie gibt er mir jetzt immer aus, dass der User schon existieren würde:
PHP:
<?php
  $connectionid  = mysql_connect ("localhost", "unlord", "");
  if(trim($_POST['username']) == "") {
     die("Bitte geben sie einen Benutzternamen an.");
  } elseif(trim($_POST['pw']) == "") {
     die("Bitte geben sie eine Passwort an.");
  } elseif(trim($_POST['repeatpw']) == "") {
     die("Bitte wiederholen sie ihr Passwort.");
  } elseif(trim($_POST['mail']) == "") {
     die("Bitte geben sie eine eMail-Adresse an.");
  } elseif(trim($_POST['repeatmail']) == "") {
     die("Bitte wiederholen sie ihre eMail-Adresse.");
  }
  $user = $_POST['username'];
  $pw = $_POST['pw'];
  $rpw = $_POST['repeatpw'];
  $mail = $_POST['mail'];
  $rmail = $_POST['repeatmail'];
  $result = mysql_query("SELECT * FROM user WHERE Nickname='".$user."'");
  if(empty($result)) {
     if($pw == $rpw AND $mail == $rmail) {
        $user[0]['user'] = $_POST['username'];
        $user[0]['pw'] = $_POST['pw'];
        $user[0]['mail'] = $_POST['mail'];
        while(list($key, $value) = each ($user)) {
              $sql = "INSERT INTO ".
                             "user (Nickname, Password, Mail) ".
                     "VALUES ('".$value['user']."', '".
                             md5($value['pw'])."', '".
                             $value['mail']."')";
              mysql_query($sql);
              if (mysql_affected_rows ($connectionid) > 0) {
                  echo "Benutzer erfolgreich angelegt.<br>";
              } else {
                  echo "Fehler beim Anlegen des Benutzers.<br>";
              }
        }
     } elseif(!($pw == $rpw OR $mail == $rmail)) {
        echo "Ihre wiederholte eMail-Adresse oder ihr wiederholtes Passwort ist falsch.";
     }
  } else {
     echo "Der Benutzter ".$user." existiert bereits, bitte wählen Sie einen anderen Namen.";
  }
?>

plz help :(

mfg
unlord
 
Zuletzt bearbeitet:
Also ich sehe gerade keinen großartigen Fehler in deinem
Code aber vielleicht machen wir beide einfach nur einen
Denkfehler ..

Lass dir den Inhalt von $result bitte mal ausgeben :

print_r(mysql_fetch_assoc($result));

und gib mir das Ergebniss.

Jona
 
Dein Script an sich funktioniert... Wenn ich einen Usernamen angeben, der schon existiert gibt er folgendes aus: Array ( [ID] => 1 [Nickname] => unlord [Password] => 3676ge7667642ggr9786446 [Mail] => finfol@web.de )

und das Script sieht so aus:
PHP:
<?php
  $username = $_POST['username'];
  $result = mysql_query("SELECT * FROM user WHERE Nickname='".$username."'");
  print_r(mysql_fetch_assoc($result));
?>

wenn ich einen Usernamen angeben, der noch nicht existiert, gibt er logischerweise gar nichts aus. Also wo liegt der Fehler?

Ich habe mein Script jetzt nochmal verkürtzt und das ganze überprüf Zeugs rausgenommen (also ob $_POST['x'] leer ist usw.) damit es übersichtlicher ist:
PHP:
  $user = $_POST['username'];  
  $result = mysql_query("SELECT * FROM user WHERE Nickname='".$user."'");
  if(empty($result)) {
     $user['user'] = $_POST['username'];
     $user['pw'] = $_POST['pw'];
     $user['mail'] = $_POST['mail'];
     while(list($value) = each ($user)) {
           $sql = "INSERT INTO ".
                          "user (Nickname, Password, Mail) ".
                  "VALUES ('".$value['user']."', '".
                          md5($value['pw'])."', '".
                          $value['mail']."')";
                          mysql_query($sql);
     }
  } else {
     echo "Der Benutzter ".$user." ist bereits registriert, bitte wählen sie einen anderen Namen.";
  }

trotzdem gibt er mir noch aus: Der Benutzter bla ist bereits registriert, bitte wählen sie einen anderen Namen.

mfg
unlord
 
Zuletzt bearbeitet:
Irgendwie unlogisch: Wenn ich if(!empty mache funktioniert das Script... überprüft empty nicht ob die Variable leer ist? Aber jetzt fügt das Script den neuen Benutzter immer hinzu -.- Hilffeeeee

Ich habe bemerkt, dass die Fehler unteschiedlich sind wenn ich was an "WHERE Nickname='".$username."'");" ändere. In dieser Schreibweise "'.$username."' kommt immer die Fehlermeldung, dass der User schon existieren würde und wenn ich ".$username." mache, dann wird der User immer registriert.

mfg
unlord
 
Zuletzt bearbeitet:
Ok I've got it :)

PHP:
<?php
  if(trim($_POST['username']) == "") {
     die("Bitte geben sie einen Benutzternamen an.");
  } elseif(trim($_POST['pw']) == "") {
     die("Bitte geben sie eine Passwort an.");
  } elseif(trim($_POST['repeatpw']) == "") {
     die("Bitte wiederholen sie ihr Passwort.");
  } elseif(trim($_POST['mail']) == "") {
     die("Bitte geben sie eine eMail-Adresse an.");
  } elseif(trim($_POST['repeatmail']) == "") {
     die("Bitte wiederholen sie ihre eMail-Adresse.");
  }
  $username = $_POST['username'];
  $pw = $_POST['pw'];
  $rpw = $_POST['repeatpw'];
  $mail = $_POST['mail'];
  $rmail = $_POST['repeatmail'];
  if(!($pw == $rpw)) {
       die("Ihre angegebenen Passwörter stimmen nicht überein.");
  } elseif(!($mail == $rmail)) {
       die("Ihre angegebenen eMail-Adressen stimmen nicht überein.");
  }
  $result = mysql_query("SELECT * FROM user WHERE Nickname='".$username."'");
  if(!(mysql_num_rows($result) > 0)) {
     $user[0]['user'] = $_POST['username'];
     $user[0]['pw'] = $_POST['pw'];
     $user[0]['mail'] = $_POST['mail'];
     while(list($key, $value) = each ($user)) {
           $sql = "INSERT INTO ".
                          "user (Nickname, Password, Mail) ".
                  "VALUES ('".$value['user']."', '".
                          md5($value['pw'])."', '".
                          $value['mail']."')";
                          mysql_query($sql);
     }
     echo "Benutzter erfolgreich angelegt. Sie können sich nun <a href=\"index.php?section=user\">HIER</a> einloggen.";
  } else {
     echo "Der Benutzter ".$username." ist bereits registriert, bitte wählen sie einen anderen Namen.";
  }
?>

funktioniert perfekt, trotzdem danke für deine Hilfe ;)

mfg
unlord
 
$anfrage = "SELECT * FROM `benutzer` WHERE 'Name'='".$name."'";
$ergebnis = mysql_query($anfrage);
$anz = mysql_num_rows($ergebnis);

So sieht bei mir der code aus. Leider klappt das nicht, es wird anscheinend nicht nach der variablen ($name) gesucht, sondern nach dem string $name.
Ich versteh auch gar nicht warum man da diese Punkte vor der und nach der Variablen braucht. Ich habe die jetzt einfach nur von diesem Script kopiert.
Was ist denn da falsch?
 
Meine Lösung ist folgende:

$anfrage = "SELECT * FROM `benutzer` WHERE `Name`='$name'";

entscheidend war vor allem die ` ` um Name ...
Muss ich anstatt dem * den namen der Spalte wählen, von der ich etwas auswähle? Aber das steckt doch eigentlich schon in `Name`='$name'" ?!
Und meinst du mit Performanceverlust Geschwindigkeitsverlust?
Achja, und das mit den Punkten in der ersten Lösung habe ich immer noch nicht verstanden...

Danke :)
 
Zurück