2009-08-14 14 views
-3

Ich mache ein All-in-one-Registrierung/Login-Skript, das zuerst das Anmeldeformular anzeigen wird, wenn $ _POST nicht festgelegt ist. Wenn dies der Fall ist, aber die erforderlichen Felder nicht ausgefüllt sind, wird erneut auf die Seite umgeleitet, wobei $ _POST erneut festgelegt wird. Wenn alle Felder ausgefüllt sind und der Name der Übermittlungsschaltfläche $ _POST ["login"] festgelegt ist, bestätigt das Formular die Anmeldung und legt einen Textblock fest, bei dem es sich um eine Seite handelt, die den Benutzer in seinen Einkaufskorb umleitet zurück zum Laden. Wenn die Übergabeschaltfläche $ _POST ["register"] gesetzt ist, möchte der Benutzer sich registrieren und eine Einfügeabfrage wird erstellt und übermittelt. Wenn diese Abfrage keine betroffenen Zeilen zurückgibt, überprüft das Skript, ob der Benutzer bereits registriert ist. Wenn dies der Fall ist, loggt sie sich ein und zeigt ihnen die Weiterleitungsseite wie bei der normalen Anmeldung an. Andernfalls, wenn das Skript 1 betroffene Zeile zurückgibt, nehme ich an, dass die Einfügung erfolgreich war (ich habe die Skriptumschaltung, wenn die Abfragen fehlschlagen).All-in-One PHP/MySQL Registrierung/Login-Formular funktioniert nicht

Anmeldung funktioniert, wenn Sie Login treffen, und wenn Sie ein erforderliches Feld verpassen, funktionieren die Weiterleitungen, aber das ist es. Ich kann das Problem nicht sehen und bekomme keine Fehler - ich bekomme nur einen leeren Bildschirm im Falle der anderen Umstände. Es ist ein großes Stück Code, ich habe Angst ...

<?php 
if(!$_POST) { 
    //hasn't seen the registration form 
    //display registration form 
     $display_block = " 
     <form method=\"POST\" action=\"".$_SERVER["PHP_SELF"]."\"> 
     <p>Please fill in the registration field (required fields marked with <span class=\"req\"><</span>)<br /> 
     First name: <input type=\"text\" name=\"f_name\" size=\"25\" maxlength=\"50\" /><span class=\"req\"><</span><br /> 
     Last name: <input type=\"text\" name=\"l_name\" size=\"25\" maxlength=\"50\" /><span class=\"req\"><</span><br /> 
     Address: <input type=\"text\" name=\"address\" size=\"50\" maxlength=\"150\" /><br /> 
     Town: <input type=\"text\" name=\"town\" size=\"50\" maxlength=\"150\" /><br /> 
     City: <input type=\"text\" name=\"city\" size=\"50\" maxlength=\"150\" /><br /> 
     Post Code: <input type=\"text\" name=\"postcode\" size=\"10\" maxlength=\"10\" /><br /> 
     Username: <input type=\"text\" name=\"username\" size=\"25\" maxlength=\"25\" /><span class=\"req\"><</span><br /> 
     Confirm username: <input type=\"text\" name=\"usernameConfirm\" size=\"25\" maxlength=\"25\" /><span class=\"req\"><</span><br /> 
     Password: <input type=\"password\" name=\"password\" size=\"25\" maxlength=\"25\" /><span class=\"req\"><</span><br /> 
     Confirm password: <input type=\"password\" name=\"passwordConfirm\" size=\"25\" maxlength=\"25\" /><span class=\"req\"><</span><br /> 
     <br /> 
     <input type=\"submit\" name=\"register\" value=\"Register\" /><br /><br /> 
     Already a member? <input type=\"submit\" name=\"login\" value=\"Login\" /> 
     </p>"; 

} else if ((!isset($_POST["username"])) || (!isset($_POST["usernameConfirm"])) || (!isset($_POST["password"])) || (!isset($_POST["passwordConfirm"]))) { 
    //hasn't filled out all the fields 
    header("Location: ".$_SERVER["PHP_SELF"].""); 
    exit; 
} else if($_POST["login"]) { 

    //user is logging in, so connect to server and select database, check they are registered and their details are right 
      $mysqli = mysqli_connect(hostname,username,pass,dbname); 

    //create and issue the query 
    $sql = "SELECT f_name, l_name FROM auth_users WHERE username='".$_POST["username"]."' AND password=PASSWORD('".$_POST["password"]."')"; 
    $sql_res =mysqli_query($mysqli, $sql) or die(mysqli_error($mysqli)); 

    //get the number of rows in the result set; should be 1 if a match 
    if(mysqli_num_rows($sql_res) == 1) { 
     //if authorized, get the values of f_name, l_name 
     while($info = mysqli_fetch_array($sql_res)) { 
     $f_name = stripslashes($info["f_name"]); 
     $l_name = stripslashes($info["l_name"]); 
     } 
     //set authorization cookie 
     setcookie("auth", "1", 0, "/", "sinaesthesia.co.uk", 0); 

     //create display string 
     $display_block = "<p>".$f_name." ".$l_name." is authorized.</p> 
     <p>You are now logged in.</p> 
     <a href=\"basket.php5\">View Basket</a> | <a href=\"home.php5\">Continue Shopping</a>"; 

    } else if($_POST["register"]) { 

     //connect to db and issue registration query 
      $mysqli = mysqli_connect(hostname,username,pass,dbname); 

      $register_sql = "INSERT INTO aromaMaster (username, password, date_registered) VALUES ('".$_POST["username"]."',PASSWORD('".$_POST["password"]."'),now())"; 
      $register_res = mysqli_query($mysqli, $register_sql) or die(mysqli_error($mysqli)); 

      if (mysqli_num_rows($register_res) != 1) { 
      //registration failed - perhaps duplicate account 

      $check_sql = "SELECT username, password FROM aromaMaster WHERE username='".$_POST["username"]."' AND password=PASSWORD('".$_POST["password"]."')"; 
      $check_res = mysqli_query($mysqli, $check_sql) or die(mysqli_error($mysqli)); 

      if(mysqli_num_rows($check_res) == 1) { 
       //already a member 

       //set cookie 
        //set authorization cookie 
     setcookie("auth", "1", 0, "/", "sinaesthesia.co.uk", 0); 

       $display_block = " 
       <p>You are already registered.</p> 
     <a href=\"basket.php5\">View Basket</a> | <a href=\"home.php5\">Continue Shopping</a>"; 
      } 
      } else { 
      //success 
      $display_block = " 
      <p>You are registered!</p> 
     <a href=\"basket.php5\">View Basket</a> | <a href=\"home.php5\">Continue Shopping</a>"; 
      } 


    } 
    mysqli_close($mysqli); 
    } 
?> 
<html> 
<head> 
<title>Login/Register</title> 
</head> 
<body> 
<?php echo "$display_block"; ?> 
</body> 
</html> 
+2

Keine Antwort auf Ihre Frage, aber Ihr Code wird davon profitieren, HTML-Layout so weit wie möglich vom Code zu trennen. – koen

+2

Deshalb sehen viele Leute PHP als eine schreckliche Sprache. – Duroth

+0

Ich habe das komplett abgeschafft und es ist ein ganz separates Skript! – user97410

Antwort

1

Sie nicht wollen, Strings vom Benutzer in Ihre Anfragen direkt setzen. http://php.net/manual/en/security.database.sql-injection.php

+0

Hai, ich weiß, aber das ist nur in der Entwicklungsphase - ich will arbeiten Mechanik, bevor ich böswillige Benutzer in Betracht ziehen. – user97410

+3

"Sicherheit, wie die Korrektheit, ist kein Add-On-Feature." - Andrew Tanenbaum. –

Verwandte Themen