Username und eMail schon vorhanden?


Loddar1

Erfahrenes Mitglied
#1
Ich habe ein Objekt orientiertes register Script, was den usernamen überprüft ob er schon vorhanden ist,
funktioniert wunderbar.

Bei mysql habe ich ein Script was usernamen und eMail auf vorhanden überprüft, funktionierte wunderbar.

Da mein Provider auf php ver. 7.xx umgestellt hat muß ich ja mysqli nutzen.

Hier mal ein auszug aus dem neuem Script:
PHP:
if(empty(trim($_POST["username"])))

     {
    
    $username_err = "Benutzernamen fehlt.";
    
     }  else  {
              
    $sql = "SELECT * FROM dbtable WHERE username = ?";
    if($stmt = $mysqli->prepare($sql))
    
              {
              
     $stmt->bind_param("s", $param_username);
      $param_username = trim($_POST["username"]);
      
      if($stmt->execute())
      
            {
      
     $stmt->store_result();
  if($stmt->num_rows == 1)
 
         {
        
    $username_err = "Benutzername ist vergeben.";
    
         }  else  {
        
   $username = trim($_POST["username"]);
  
      }
      
    }  else  {
    
echo "Fehler";

     }
    
   }
  
 }
Meine Versuche usernamen und eMail zu prüfen sind nicht Optimal, weil ich noch nicht so viel von Objekt orientiertes programmieren verstehe.

Hier mal mein Versuch:
PHP:
if(empty(trim($_POST["username"])))

  {
 
    $username_err = "Benutzernamen fehlt.";
    
  } 
 
      elseif(empty(trim($_POST["email"])))
 
  {
 
    $email_err = "eMail fehlt.";
    
  } else {
              
    $sql = "SELECT * FROM dbtable WHERE username = ? and mail = ?";
    if($stmt = $mysqli->prepare($sql))
    
           {
          
     $stmt->bind_param("ss", $param_username, $param_mail);
      $param_username = trim($_POST["username"]);
        $param_mail = trim($_POST["email"]);
      
      if($stmt->execute())
      
             {
      
     $stmt->store_result();
  if($stmt->num_rows > 0)
 
               {
              
    $username_err = "Benutzername ist vergeben.";
     $email_err = "eMail ist vergeben.";
    
               }  else  {
              
   $username = trim($_POST["username"]);
   $email = trim($_POST["email"]);
       }
      
     }  else  {
    
echo "Fehlermeldung";

   }
  
  }
 
 }
Ich weis das ich irgend etwas falsch mache, aber ich weis nicht was?

Und Ja ich möchte auf alle Fälle usernamen und eMail auf vorhanden sein überprüfen.

Hat einer eine Idee was ich falsch mache?

Besten Dank im voraus Gruß Loddar1
 
#2
Sieht grob gut aus. Aber da die Formatierung des Codes mit dem Zufallsgenerator gemacht wurde, kann ich nicht erkennen was in welcher Schleife drin ist, welcher if wo endet etc.
Ist also gut möglich, dass du ein Strukturfehler drin hast.

Und ich geh mal davon aus, dass du $mysqli auch vor diesem Code generierst
PHP:
/* Open a connection */
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}
 
#4
Ich würde sowieso das Zählen der DB überlassen. ALso mit einem COUNT().
Zudem würde ich Username und EMail auf Kleinbuchstaben umwandeln, damit es keine doppelten gibt.

PHP:
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');

/* check connection */
if (mysqli_connect_errno()) {
    printf('Connect failed: %s\n', mysqli_connect_error());
    exit();
}

$user = strtolower(trim($_POST['username']));
$email = strtolower(trim($_POST['email']));

if(empty($user)){
    $username_err = 'Benutzernamen fehlt.';
}elseif($email)){
    $email_err = 'eMail fehlt.';
} else {
    $sql = 'SELECT COUNT(*) FROM dbtable WHERE username = ? and mail = ?';
    if($stmt = $mysqli->prepare($sql)){
        $stmt->bind_param('ss', $param_username, $param_mail);
        
        $param_username = $user;
        $param_mail = $email;
        
        if($stmt->execute()){
            $stmt->bind_result($cnt);
            $stmt->fetch();
        }else{
            echo $stmt->errno;
            echo $stmt->error;
            
        }
        $stmt->close();

    if($cnt > 0){
        $username_err = 'Benutzername ist vergeben.';
        $email_err = 'eMail ist vergeben.';
    }else{
        //TODO User eintragen
    }
}

$mysqli->close();
 

Loddar1

Erfahrenes Mitglied
#5
Danke Yaslaw für deine prompte Hilfe,
aber so funktioniert es bei mir nicht, oder ich bin zu blöd.

Habe es jetzt so gelöst:
PHP:
if(empty(trim($_POST["username"])))

     {
    
    $username_err = "Benutzernamen fehlt.";
    
     }  else  {
              
    $sql = "SELECT * FROM dbtable WHERE username = ?";
    if($stmt = $mysqli->prepare($sql))
    
              {
              
     $stmt->bind_param("s", $param_username);
      $param_username = trim($_POST["username"]);
      
      if($stmt->execute())
      
            {
      
     $stmt->store_result();
  if($stmt->num_rows == 1)
 
         {
        
    $username_err = "Benutzername ist vergeben.";
    
         }  else  {
        
   $username = trim($_POST["username"]);
  
      }
      
    }  else  {
    
echo "Fehler";

     }
    
   }
  
   $mail = stripslashes($_POST['email']);
  
     $sqlm = "SELECT * FROM locuser WHERE mail = ?";
    
        if($stmm = $mysqli->prepare($sqlm)){
        
         $stmm->bind_param("s", $param_mail);
        
           $param_mail = trim($_POST["email"]);
          
             if($stmm->execute()){
            
              $stmm->store_result();
              
          if($stmm->num_rows > 0){
          
           $email_err = "Diese eMail ist bereits vergeben.";

     }  else  {
    
        $mail = trim($_POST["email"]);
     }
   }
}else{

//TODO User eintragen
Es funktioniert.
 

Bratkartoffel

gebratene Kartoffel
Premium-User
#8
Hi,

ich denke, dass deine SQL-Abfrage das Problem war:
SQL:
SELECT COUNT(*) FROM dbtable WHERE username = ? and mail = ?
Du hast die Einträge gezählt, bei denen "username" und "mail" das gesucht waren. Ich denke aber, dass du hier vom Kontext her eher ein oder machen wolltest?

Grüsse,
BK
 

Neue Beiträge