Итак, я новичок в php и mysql, но я нашел регистрационную форму и приспособил ее к моим потребностям, так как у меня нет знаний, чтобы сделать еще одно мое. Я добавил в базу столбцы firstname и surname, и форма регистра добавляет значения в базу данных.
Теперь я хочу, чтобы иметь возможность отображать имя и фамилию на странице с ограниченными правами, причина, по которой мне это нужно, – это то, что я хочу, чтобы она говорила: Welcome Jo Blogs. Ниже приведена регистрационная форма.
<?php session_start(); if( isset($_SESSION['user_id']) ){ header("Location: /"); } require 'database.php'; $message = ''; if(!empty($_POST['email']) && !empty($_POST['password']) && !empty($_POST['firstname']) && !empty($_POST['surname'])): // Enter the new user in the database $sql = "INSERT INTO users (email, password, firstname, surname) VALUES (:email, :password, :firstname, :surname)"; $stmt = $conn->prepare($sql); $stmt->bindParam(':email', $_POST['email']); $stmt->bindParam(':password', password_hash($_POST['password'], PASSWORD_BCRYPT)); $stmt->bindParam(':firstname', $_POST['firstname']); $stmt->bindParam(':surname', $_POST['surname']); if( $stmt->execute() ): $message = 'Successfully created new user'; else: $message = 'Sorry there must have been an issue creating your account'; endif; endif; ?> <!DOCTYPE html> <html> <head> <title>Register</title> <?php include '../header.php'; ?> </head> <body> <?php if(!empty($message)): ?> <p><?= $message ?></p> <?php endif; ?> <h1>Register</h1> <span>or <a href="login.php">login here</a></span> <form action="register.php" method="POST"> <input type="text" placeholder="Enter your email" name="email"> <input type="password" placeholder="and password" name="password"> <input type="password" placeholder="confirm password" name="confirm_password"> <input type="text" placeholder="Enter your first name" name="firstname"> <input type="text" placeholder="Enter your surname" name="surname"> <input type="submit"> </form> </body> </html>
И ниже здесь форма входа в систему, поскольку я не совсем уверен, что вы, ребята, должны мне помочь 🙂
<?php session_start(); if( isset($_SESSION['user_id']) ){ header("Location: /"); } require 'database.php'; if(!empty($_POST['email']) && !empty($_POST['password'])): $records = $conn->prepare('SELECT id,email,password FROM users WHERE email = :email'); $records->bindParam(':email', $_POST['email']); $records->execute(); $results = $records->fetch(PDO::FETCH_ASSOC); $message = ''; if(count($results) > 0 && password_verify($_POST['password'], $results['password']) ){ $_SESSION['user_id'] = $results['id']; header("Location: /"); } else { $message = 'Sorry, those credentials do not match'; } endif; ?> <!DOCTYPE html> <html> <head> <title>Login</title> <?php include '../header.php'; ?> </head> <body> <?php if(!empty($message)): ?> <p><?= $message ?></p> <?php endif; ?> <h1>Login</h1> <span>or <a href="register.php">register here</a></span> <form action="login.php" method="POST"> <input type="text" placeholder="Enter your email" name="email"> <input type="password" placeholder="and password" name="password"> <input type="submit"> </form> </body> </html>
инструктажа<?php session_start(); if( isset($_SESSION['user_id']) ){ header("Location: /"); } require 'database.php'; if(!empty($_POST['email']) && !empty($_POST['password'])): $records = $conn->prepare('SELECT id,email,password FROM users WHERE email = :email'); $records->bindParam(':email', $_POST['email']); $records->execute(); $results = $records->fetch(PDO::FETCH_ASSOC); $message = ''; if(count($results) > 0 && password_verify($_POST['password'], $results['password']) ){ $_SESSION['user_id'] = $results['id']; header("Location: /"); } else { $message = 'Sorry, those credentials do not match'; } endif; ?> <!DOCTYPE html> <html> <head> <title>Login</title> <?php include '../header.php'; ?> </head> <body> <?php if(!empty($message)): ?> <p><?= $message ?></p> <?php endif; ?> <h1>Login</h1> <span>or <a href="register.php">register here</a></span> <form action="login.php" method="POST"> <input type="text" placeholder="Enter your email" name="email"> <input type="password" placeholder="and password" name="password"> <input type="submit"> </form> </body> </html>
Кроме того, пока я здесь, я в настоящее время использую javascript для перенаправления на домашнюю страницу после выхода из системы, поскольку я не мог найти никакой информации о том, как это сделать с помощью php
Restricted.php:
<!DOCTYPE html> <html> <head> <title>Restricted Area</title> <link rel="stylesheet" type="text/css" href="../assets/css/style.css"> <link href='http://fonts.googleapis.com/css?family=Comfortaa' rel='stylesheet' type='text/css'> <?php include '../header.php'; ?> </head> <body> <?php session_start(); if(isset($_SESSION['user_id'])) { ?> <h1>Restriced Area</h1> <h2>You have sucessfully logged in with your credentials</h2> <?php } else { ?> <script type="text/javascript"> window.location = "login.php"; </script> <?php exit; } ?> </body> </html>
Просто дайте мне знать, если вам больше нужна информация / код.
Благодарю.
Как предложил Кирель …
Restricted.php должен выглядеть следующим образом:
<?php session_start(); if(!isset($_SESSION['user_id'])){ header("Location: /login.php"); // no need to query } require('database.php'); // assumed to declare $conn=new PDO(...); $loggedin=$conn->prepare('SELECT firstname,surname FROM users WHERE id=?'); $loggedin->execute(array($_SESSION['user_id'])); $results=$loggedin->fetch(PDO::FETCH_ASSOC); if(!$results || count($results)<1){ header("Location: /login.php"); // unsuccessful query } ?> <!DOCTYPE html> <html> <head> <title>Restricted Area</title> <link rel="stylesheet" type="text/css" href="../assets/css/style.css"> <link href='http://fonts.googleapis.com/css?family=Comfortaa' rel='stylesheet' type='text/css'> <?php include '../header.php'; ?> </head> <body> <h1>Restriced Area</h1> <h2>You have successfully logged in with your credentials</h2> <?php echo "Welcome {$results['firstname']} {$results['surname']}"; ?> </body> </html>
Редактировать:
Это утверждение ограничивается слишком серьезным, но я хотел бы упомянуть, особенно для неопытных php-кодеров, что данные SESSION могут быть захвачены (это описано в Pro PHP Security: от принципов безопасности приложений до внедрения XSS Defense). Глава 7: Предотвращение сеанса Hijacking ), и поэтому может быть предложено никогда не хранить личную информацию в $ _SESSION. Это будет наиболее критически включать номера кредитных карт , выданные правительством идентификаторы и пароли ; но также будет распространяться на менее предполагаемые данные, такие как имена пользователей , электронные письма , номера телефонов и т. д., которые позволят хакеру олицетворять / компрометировать законного пользователя.
Интернет по-прежнему очень сильно переживает эпоху «Дикого Запада», и ничто не является на 100% безопасным. … и Internet Security – это кроличья дыра / денежная яма. Каждый кодер должен посвятить некоторое время пониманию известных угроз и предотвращению их, но как далеко продвинуться с этим будет отличаться от человека к человеку.
Может быть, это??
В первом фрагменте после успешного добавления нового пользователя.
if( $stmt->execute() ): $message = 'Successfully created new user'; $_SESSION['firstname'] = $_POST['firstname']; $_SESSION['surname'] = $_POST['surname']; # redirect to login or you could just # have the logged in at this point and.. # redirect to restricted.php.. header("Location: /login.php"); else: $message = 'Sorry there must have been an issue creating your account'; endif;
Затем настройте файл limited.php следующим образом:
<?php session_start(); if (!isset($_SESSION['user_id'])) { header("Location: /login.php"); } ?> <!DOCTYPE html> <html> <head> <title>Restricted Area</title> <link rel="stylesheet" type="text/css" href="../assets/css/style.css"> <link href='http://fonts.googleapis.com/css?family=Comfortaa' rel='stylesheet' type='text/css'> <?php include '../header.php'; ?> </head> <body> <h1>Welcome <?php echo $_SESSION['firstname']; ?> <?php echo $_SESSION['surname']; ?></h1> <h2>You have sucessfully logged in with your credentials</h2> </body> </html>