2016-08-01 2 views
1

Недавно я узнал, как создавать системы входа с PHP и MYSQL. Я решил сделать один для своего сайта. Пользователь регистрируется по электронной почте, паролю, имени и фамилии. Я хотел, чтобы приветствие произносило «Мои приветствия», а затем их имя. Я мог бы сохранить имена в сеансе, но мне интересно, почему мой метод не работает полностью. Он работает каждый раз, ЗА ИСКЛЮЧЕНИЕМ сразу после регистрации. Это полный код Регистрация:Почему база данных не возвращает данные о пользователе после регистрации?

$error = ""; 

include("loginsession.php"); 


    if(array_key_exists("id", $_SESSION)){ 

     header("Location: index.php"); 

    } 

if(array_key_exists("submit", $_POST)){ 

    include("connection.php");//database connection 



    $email = $_POST['email']; 

    $password = $_POST['password']; 

    $firstName = $_POST['firstname']; 

    $lastName = $_POST['lastname']; 

    $query = "SELECT * FROM users WHERE email='".mysqli_real_escape_string($link, $email)."'"; 

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

    if(mysqli_num_rows($result) > 0){ 

     $error = "<div class='alert alert-danger' role='alert'><strong>Error:<br><br></strong>This email already exists.<hr></div>"; 

    }else{ 

     $query = "INSERT INTO users(firstname, lastname, email, password) VALUES('".mysqli_real_escape_string($link, $firstName)."', '".mysqli_real_escape_string($link, $lastName)."', '".mysqli_real_escape_string($link, $email)."', '".mysqli_real_escape_string($link, $password)."')"; 

     mysqli_query($link, $query); 

     $query = "UPDATE users SET password = '".md5(md5(mysqli_insert_id($link)).$password)."' WHERE id=".mysqli_insert_id($link).""; 

     mysqli_query($link, $query); 


    $_SESSION['id'] = mysqli_insert_id($link);//where the issue originates 
    if(isset($_POST['check']) && $_POST['check']=='true'){ 

     setcookie("id", mysqli_insert_id($link), time() + 60*60*24*365); 

    } 
    header("Location: index.php"); 

    }   

} 

На индексной странице, это то, что я делаю:

session_start(); 
    if(array_key_exists('id', $_COOKIE)){ 

     $_SESSION['id'] = $_COOKIE['id']; 

    } 


    $greeting = ""; 

     if(array_key_exists('id', $_SESSION)){ 

      include("connection.php");//just the login to the database 

      $query = "SELECT * FROM users WHERE id = ".$_SESSION['id']; 

      $results = mysqli_query($link, $query); 

      $row = mysqli_fetch_array($results); 

     $greeting = "My greetings, ".$row['firstname']." ".$row['lastname'];//add name to greeting variable 

     } 

Позже в коде:

<p id="greeting"> 
    <?php echo $greeting; ?> 
</p> 

Право имя показывает вверх после того, как вход в систему, но никогда после регистрации, даже если я перезагружаю страницу. То, что появляется вместо «Мои приветствия, имя первого имени», это «Мои приветствия». Это похоже на то, что в базе данных не было имени для данного идентификатора.

Как я могу получить правильный результат сразу после регистрации. Если вам нужен какой-либо другой код из процесса регистрации или входа в систему, скажите мне, и я отправлю его. Если кто-то хочет попробовать это для себя, мой сайт here.

+0

@ chris85 Это не mysqli_insert_id? Исправьте меня, если я ошибаюсь - он хранит идентификатор последнего добавленного пользователя. Я сохраняю последний идентификатор сеанса. Я мог бы делать сеансы для имени, если то, что я делаю сейчас, не работает. –

+1

Да, пропустил способ, которым этот код был структурирован при первом чтении. Тем не менее, я не уверен, что все это получаю. Однако это открыто для SQL-инъекций. Пользователь может изменять все файлы cookie. – chris85

+0

Каково значение, которое было вставлено в db и по сравнению с тем, что у вас есть в вашем первом тексте кода, который вы разместили, то какое значение для массива сеансов для другого? опубликуйте var_dump для обоих, проверьте наличие ошибок с помощью отчетов об ошибках и, возможно, MySQL. –

ответ

1

Я не тестировал ваш код, но я думаю, что это потому, что сеанс еще не запущен, когда после регистрации. Попробуйте добавить session_start(); в первую строку вашего первого кода.

+1

хорошо, я думаю, что проблема - это значение, возвращаемое 'mysqli_insert_id'. В соответствии с инструкциями руководства PHP, _it возвращает автоматически сгенерированный идентификатор, используемый в последнем запросе_. Проверьте другие запросы, выполненные после вставки данных в базу данных. – someone

+1

Plese прочитал [этот] (http://stackoverflow.com/questions/15332250/why-is-mysqli-insert-id-always-returning-0) также. – someone

+0

Я разместил полный регистрационный код. Кажется, я установил id для сеанса сразу после ввода пароля пользователя в инструкции обновления. У меня нет проблем с первым insert_id, но второй не работает. –

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