2014-11-20 119 views
0

因此,我有兩個PHP文件應該在用戶註冊期間與對方通話。PHP/Mysql:註冊不會在數據庫中創建新用戶

第一個:register.inc.php應該在MAMP的mysql數據庫中創建一個新用戶,第二個是register.php,它是基本形式,應該將其數據發送到register.inc.php。我沒有收到任何文件中的任何錯誤,但它不想同時創建用戶和重定向到register-success.php頁面。

任何想法是怎麼回事?

register.inc.php:

<?php 
include_once 'db_connect.php'; 
include_once 'psl-config.php'; 

$error_msg = ""; 

//echo var_dump($_POST['username']); 

if (isset($_POST['username'], $_POST['email'], $_POST['p'])) { 
    // Sanitize and validate the data passed in 
    $username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING); 
    $email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL); 
    $email = filter_var($email, FILTER_VALIDATE_EMAIL); 
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
     // Not a valid email 
     $error_msg .= '<p class="error">The email address you entered is not valid</p>'; 
    } 

    $password = filter_input(INPUT_POST, 'p', FILTER_SANITIZE_STRING); 
    if (strlen($password) != 128) { 
     // The hashed pwd should be 128 characters long. 
     // If it's not, something really odd has happened 
     $error_msg .= '<p class="error">Invalid password configuration.</p>'; 
    } 

    // Username validity and password validity have been checked client side. 
    // This should should be adequate as nobody gains any advantage from 
    // breaking these rules. 
    // 

    $prep_stmt = "SELECT id FROM members WHERE email = ? LIMIT 1"; 
    $stmt = $mysqli->prepare($prep_stmt); 

    // check existing email 
    if ($stmt) { 
     $stmt->bind_param('s', $email); 
     $stmt->execute(); 
     $stmt->store_result(); 

     if ($stmt->num_rows == 1) { 
      // A user with this email address already exists 
      $error_msg .= '<p class="error">A user with this email address already exists.</p>'; 
         $stmt->close(); 
     } 
       $stmt->close(); 
    } else { 
     $error_msg .= '<p class="error">Database error Line 39</p>'; 
       $stmt->close(); 
    } 

    // check existing username 
    $prep_stmt = "SELECT id FROM members WHERE username = ? LIMIT 1"; 
    $stmt = $mysqli->prepare($prep_stmt); 

    if ($stmt) { 
     $stmt->bind_param('s', $username); 
     $stmt->execute(); 
     $stmt->store_result(); 

       if ($stmt->num_rows == 1) { 
         // A user with this username already exists 
         $error_msg .= '<p class="error">A user with this username already exists</p>'; 
         $stmt->close(); 
       } 
       $stmt->close(); 
     } else { 
       $error_msg .= '<p class="error">Database error line 55</p>'; 
       $stmt->close(); 
     } 

    // TODO: 
    // We'll also have to account for the situation where the user doesn't have 
    // rights to do registration, by checking what type of user is attempting to 
    // perform the operation. 

    if (empty($error_msg)) { 
     // Create a random salt 
     //$random_salt = hash('sha512', uniqid(openssl_random_pseudo_bytes(16), TRUE)); // Did not work 
     $random_salt = hash('sha512', uniqid(mt_rand(1, mt_getrandmax()), true)); 

     // Create salted password 
     $password = hash('sha512', $password . $random_salt); 

     // Insert the new user into the database 
     if ($insert_stmt = $mysqli->prepare("INSERT INTO members (username, email, password, salt) VALUES (?, ?, ?, ?)")) { 
      $insert_stmt->bind_param('ssss', $username, $email, $password, $random_salt); 
      // Execute the prepared query. 
      if (! $insert_stmt->execute()) { 
       header('Location: ../error.php?err=Registration failure: INSERT'); 
      } 
     } 
     header('Location: ./register_success.php'); 
    } 
} 

register.php:

<?php 
include_once 'includes/register.inc.php'; 
include_once 'includes/functions.php'; 
?> 
<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="UTF-8"> 
     <title>Secure Login: Registration Form</title> 
     <script type="text/JavaScript" src="js/sha512.js"></script> 
     <script type="text/JavaScript" src="js/forms.js"></script> 
     <link rel="stylesheet" href="styles/main.css" /> 
    </head> 
    <body> 
     <!-- Registration form to be output if the POST variables are not 
     set or if the registration script caused an error. --> 
     <h1>Register with us</h1> 
     <?php 
     if (!empty($error_msg)) { 
      echo $error_msg; 
     } 
     ?> 
     <ul> 
      <li>Usernames may contain only digits, upper and lower case letters and underscores</li> 
      <li>Emails must have a valid email format</li> 
      <li>Passwords must be at least 6 characters long</li> 
      <li>Passwords must contain 
       <ul> 
        <li>At least one upper case letter (A..Z)</li> 
        <li>At least one lower case letter (a..z)</li> 
        <li>At least one number (0..9)</li> 
       </ul> 
      </li> 
      <li>Your password and confirmation must match exactly</li> 
     </ul> 
     <form action="<?php echo esc_url($_SERVER['PHP_SELF']); ?>" 
       method="post" 
       name="registration_form"> 
      Username: <input type='text' 
       name='username' 
       id='username' /><br> 
      Email: <input type="text" name="email" id="email" /><br> 
      Password: <input type="password" 
          name="password" 
          id="password"/><br> 
      Confirm password: <input type="password" 
            name="confirmpwd" 
            id="confirmpwd" /><br> 
      <input type="button" 
        value="Register" 
        onclick="return regformhash(this.form, 
            this.form.username, 
            this.form.email, 
            this.form.password, 
            this.form.confirmpwd);" /> 
     </form> 
     <p>Return to the <a href="index.php">login page</a>.</p> 
    </body> 
</html> 

回答

0

你有這樣的

if (isset($_POST['username'], $_POST['email'], $_POST['p'])) { 

但你沒有輸入與名稱的形式「 p「 - > $ _POST ['p']

so i SSET總是返回false

我想你想輸入$ _ POST [ '密碼']

+0

我試過了,我正在學習一個教程,以便更好地理解PHP的語法。 'P'在我的js文件中調用一個變量來檢查p是否被填寫,以及它是否足夠長。 – 2014-11-20 20:59:41

+0

爲了嘗試一切,我將它們改爲上述,但它仍然沒有發射任何東西,我完全傻眼了。 – 2014-11-20 21:19:55

+0

ether你可以在問題中添加JavaScript代碼。 – nicolascolman 2017-09-28 12:48:08

0

你只需要改變你的db_connectPSL-配置的順序:

include_once 'psl-config.php'; 
include_once 'db_connect.php';