2015-07-09 3 views
1

Я пытаюсь создать регистрационную форму и перейти по адресу mysqli_real_escape_string и salt на мою форму. Однако по каким-то причинам мои коды не будут продолжаться. Даже если я введу правильную информацию о моей форме, она не будет обрабатывать ее правильно. В основном я создал функцию, которая будет выполнять проверку.My PHP Регистрационная форма не работает

Вот мои коды:

<?php 
session_start(); 
require("new-connection.php"); 

    global $connection; 
    $first_name = mysqli_real_escape_string($connection, $_POST['first_name']); 
     $last_name = mysqli_real_escape_string($connection, $_POST['last_name']); 
     $email = mysqli_real_escape_string($connection, $_POST['email']); 
     $password = mysqli_real_escape_string($connection, $_POST['password']); 
     $salt = bin2hex(openssl_random_pseudo_bytes(22)); 
     $encrypted_password = md5($password . '' . $salt); 

if(isset($_POST['action']) && ($_POST['action']) == 'register'){ 
    //call to function 
    register_user($_POST); //use the ACTUAL POST 
} 

elseif(isset($_POST['action']) && ($_POST['action']) == 'login'){ 
     login_user($_POST); 
}else{ 
    session_destroy(); 
    header('Location: homepage.php'); 
    die(); 
} 

function register_user(){ //just a parameter called post 
    $_SESSION['errors'] = array(); 

    if(empty($first_name)){ 
     $_SESSION['errors'][] = "first name can't be blank!"; 
    } 

    if(empty($last_name)){ 
     $_SESSION['errors'][] = "last name can't be blank!"; 
    } 

    if(empty($password)){ 
     $_SESSION['errors'][] = "password is required!"; 
    } 

    if($password != $post['confirm_password']){ 
     $_SESSION['errors'][] = "passwords must match!"; 
    } 

    if(!filter_var($email, FILTER_VALIDATE_EMAIL)){ 
     $_SESSION['errors'][] = "please use a valid email address!"; 

    } 
    //end of validation 

    //now count errors 
    if(count($_SESSION['errors']) > 0){ 
     header('Location: homepage.php'); 
     die(); 
    }else{  

     $query = "INSERT INTO users(first_name, last_name, password, email, created_at, updated_at) 
        VALUES ('$first_name', '$last_name','$password', '$email', NOW(), NOW())"; 

     $result = run_mysql_query($query); 
     $_SESSION['message'] = "user successfully added"; 
     header('Location: homepage.php'); 
     die(); 
    } 


} 

function login_user($post){ //just a parameter called post 
    $query = "SELECT * FROM users WHERE users.password = '{$post['password']}' 
    AND users.email = '{$post['email']}'"; 

    $user = fetch($query); //go and grab all users on above condition 

    if(count($user) > 0){ 
     $_SESSION['user_id'] = $user[0]['id']; 
     $_SESSION['first_name'] = $user[0]['first_name']; 
     $_SESSION['logged_in'] = true; 
     header('Location: success-homepage.php'); 
     die(); 
    }else{ 
     $_SESSION['errors'][] = "cant find users"; 
     header('Location: homepage.php'); 
     die(); 
    } 

} 

?> 

Любая идея, что пошло не так ???

ПРИМЕЧАНИЕ: оно не будет вставлять запись + ее сообщение об ошибке на $ _SESSION, даже введенные данные верны.

+1

Где 'run_mysql_query' определено? Это не стандартный PHP. – Glorfindel

+1

Функция register_user() не знает, что такое $ first_name и т. Д., Если вы не сделаете их глобальными или не передадите их в качестве параметров. –

+1

Вы не отправили код, который действительно выполняет запрос. Здесь нет никакой попытки проверить какие-либо ошибки в вызове MYSQL, поэтому я предполагаю, что код тот же. Без правильной проверки ошибок вы не сможете узнать, что случилось не так. –

ответ

0

Что это за ошибка? Если у вас есть белая страница, вставка в верхней части страницы:

error_reporting (E_ALL); 
ini_set('display_errors',1); 
-1

Пожалуйста, проверьте это:

<?php 
session_start(); 
require("new-connection.php"); 

    global $connection; 
    $first_name = mysqli_real_escape_string($connection, $_POST['first_name']); 
    $last_name = mysqli_real_escape_string($connection, $_POST['last_name']); 
    $email = mysqli_real_escape_string($connection, $_POST['email']); 
    $password = mysqli_real_escape_string($connection, $_POST['password']); 
    $salt = bin2hex(openssl_random_pseudo_bytes(22)); 
    $encrypted_password = md5($password . '' . $salt); 

if(isset($_POST['action']) && ($_POST['action']) == 'register'){ 
    //call to function 
    register_user($firstname, $last_name, $email, $password, $salt, $encrypted_password); //use the ACTUAL POST // Cant only use post because isn't escaped 
} 

elseif(isset($_POST['action']) && ($_POST['action']) == 'login'){ 
     login_user($email, $password); 
}else{ 
    session_destroy(); 
    header('Location: homepage.php'); 
    die(); 
} 

function register_user($firstname, $last_name, $email, $password, $salt, $encrypted_password){ // Pass all escaped variables here becasue the $_POST isn't escaped 
    $_SESSION['errors'] = array(); 

    if(empty($first_name)){ 
     $_SESSION['errors'][] = "first name can't be blank!"; 
    } 

    if(empty($last_name)){ 
     $_SESSION['errors'][] = "last name can't be blank!"; 
    } 

    if(empty($password)){ 
     $_SESSION['errors'][] = "password is required!"; 
    } 

    if($password != $post['confirm_password']){ 
     $_SESSION['errors'][] = "passwords must match!"; 
    } 

    if(!filter_var($email, FILTER_VALIDATE_EMAIL)){ 
     $_SESSION['errors'][] = "please use a valid email address!"; 

    } 
    //end of validation 

    //now count errors 
    if(count($_SESSION['errors']) > 0){ 
     header('Location: homepage.php'); 
     die(); 
    }else{  

     // Add backticks around column and table names to prevent mysql reserved words error 
     $query = "INSERT INTO `users` (`first_name`, `last_name`, `password`, `email`, `created_at`, `updated_at`) 
        VALUES ('$first_name', '$last_name','$password', '$email', NOW(), NOW())"; 

     $result = mysqli_query($connection, $query); 
     $_SESSION['message'] = "user successfully added"; 
     header('Location: homepage.php'); 
     die(); 
    } 


} 

function login_user($email, $password){ //just a parameter called post 
    // No need to add table name 
    $query = "SELECT * FROM `users` WHERE `password` = '$password' 
    AND `email` = '$email'"; 

    $result = mysqli_query($connection, $query); 

    if(mysqli_num_rows($result) >= 1) { 
     $user = mysqli_fetch_assoc($result); //go and grab all users on above condition 
     // Check if there was atleast 1 user with the specified credentials 
     if(count($user) >= 1){ 
      $_SESSION['user_id'] = $user['id']; 
      $_SESSION['first_name'] = $user['first_name']; 
      $_SESSION['logged_in'] = true; 
      header('Location: success-homepage.php'); 
      die(); 
     }else{ 
      $_SESSION['errors'][] = "cant find users"; 
      header('Location: homepage.php'); 
      die(); 
     } 
    } else { 
    echo 'no user was found'; 
    } 

} 

?> 
+0

Возможно, это работает, может быть, нет. Это всего лишь свалка кода без каких-либо попыток объяснить, что вы изменили (если вообще) или почему. –

+0

Тогда у вас еще нет комментариев – SuperDJ

Смежные вопросы