Username und eMail schon vorhanden?

Loddar1

Erfahrenes Mitglied
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
 
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();
}
 
Ja selbstverständlich, wie geschrieben der erste auschnitt funktioniert,
der 2te ausschnitt überprüft keine eMail.
 
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();
 
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.
 
Sorry, ich kann den Code so nicht lesen. Und zum sauber LESBAR formatieren habe ich grad keine Lust.
Schön dass es geht.
 
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
 
Zurück