2016-07-18 8 views
-2

Ich bin ein wenig verwirrt, nicht weil ich dieses Programm nicht arbeiten. Mails vergleicht eine Datenbank mit einer Variablen.Beratung Programmierung während und wenn verschachtelt

$correo = "[email protected]"; 

$compruebaCorreo=mysqli_query($link, "SELECT * FROM email WHERE email='$correo'"); 


while($imprimeCorreo=mysqli_fetch_array($compruebaCorreo)) 
{ 
    if($imprimeCorreo['email']==$correo) 
    { 
     echo "Ya recibió los tps por su suscripción al Boletín de Todopolicia.com"; 
    } 
    if($imprimeCorreo['email'] != $correo) 
    { 
     echo "Registramos el correo"; 
    } 
    echo $imprimeCorreo['email']; 
} 

Das Problem ist, dass, wenn gleich, ob es die erste erfüllt, wenn und während Echo, aber wenn es nicht, nichts tun, nichts gedruckt ist, oder auch die zweite Miss. Wo ist der Fehler?

+3

wie könnte es immer sein '='!? Ihre Abfrage gibt nur Datensätze zurück, bei denen die E-Mail ** IS ** "$ correo" ist, daher ist es unmöglich, dass eines der Ergebnisse ** NICHT ** das gleiche "$ correo" ist. Du gehst in einen Laden, verlangst rote Äpfel und fragst dich, warum du keine grünen bekommen hast. –

+1

** WARNUNG **: Wenn Sie 'mysqli' verwenden, sollten Sie [parametrisierte Abfragen] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) und [' bind_param'] (http://php.net/manual/en/mysqli-stmt.bind-param.php), um Benutzerdaten zu Ihrer Abfrage hinzuzufügen. ** Verwenden Sie ** NICHT ** manuelles Escapen und String-Interpolation oder Verkettung, um dies zu erreichen, weil Sie schwerwiegende [SQL-Injektionsfehler] (http://bobby-tables.com/) erstellen werden, wenn Sie jemals vergessen, etwas richtig zu entkommen. – tadman

+0

Sie können anstelle von 'if ($ imprimeCorreo ['email']! = $ Correo)' 'else' verwenden. Ich bin nicht klar, was dein aktuelles Problem ist. – chris85

Antwort

0

Wenn Sie überprüfen möchten, ob die E-Mail in Ihrer Datenbank ist, können Sie es so machen.

  • prepare Ihre select-Anweisung

    • von Prepared Statements Ihrer SQL-Abfrage verwendet, wird immer gut formatiert werden, egal ob es ‚seltsam‘ charakter in Ihren Parametern ist, die die SQL-Syntax sonst brechen könnten
  • binden die Parameter an die Anweisung, und führen sie es

  • speichern das Ergebnis der Anweisung

    • diese Art und Weise können wir mysqli_stmt_num_rows($stmt) im nächsten Schritt
  • Verwendung mysqli_stmt_num_rows($stmt) zu überprüfen, verwenden, wenn die resultset mindestens 1 Zeile

    • wenn ja: Ihre E-Mail-Adresse ist in der Datenbank
    • wenn nein: es ist nicht

Code:

/** 
* define your select-statement and your parameter(s) 
* let the database prepare the statement and bind the parameters 
*/ 
$stmt = mysqli_prepare($link, 'SELECT * FROM email WHERE email = ?'); 
mysqli_stmt_bind_param($stmt, "s", $correo); 
$correo = "[email protected]"; 

/** 
* execute the statement and storing the result 
*/ 
mysqli_stmt_execute($stmt); 
mysqli_stmt_store_result($stmt); 

/** 
* check the resultset and react accordingly 
*/ 
if(mysqli_stmt_num_rows($stmt) > 0){ 
    echo "Ya recibió los tps por su suscripción al Boletín de Todopolicia.com"; 
}else{ 
    echo "Registramos el correo"; 
} 
+0

Ich bevorzuge PDO über mysqli, also kann es bessere Wege geben, mit den vorbereiteten Statesmen umzugehen, froh über jeden Hinweis – Philipp