Я выяснил, как создать рабочую регистрационную форму и форму для входа. У меня также есть викторина, которая публикует баллы в базе данных, когда пользователь входит в систему. Теперь я пытаюсь понять, как записать имя пользователя пользователя, который зарегистрировался и сделать его доступным на других страницах моего сайта.
Судя по обсуждению @ Как мне выполнить эхо-имя пользователя на странице профиля с помощью PHP? похоже, что я должен просто написать простой запрос базы данных на первой странице каждого раздела. Но есть ли более эффективный способ?
Чтобы проиллюстрировать, мои регистрационные формы и формы входа находятся в mysite / admin, а мои тесты – в mysite / test.
Вот код с моей страницы входа:
<?php if( !isset( $_SESSION['user_id'] ) ): ?> <h2>Login Here</h2> <form action="/admin/login/login-submit.php" method="post"> <fieldset> <label for="username">Username</label> <input type="text" id="username" name="username" value="" maxlength="20" /> <br> <label for="password">Password</label> <input type="text" id="password" name="password" value="" maxlength="20" /> <br> <input type="submit" value="→ Login" /> </fieldset> </form>
И вот код от login-submit.php:
if(isset( $_SESSION['user_id'] )) { $message = 'Users is already logged in'; } /*** check that both the username, password have been submitted ***/ if(!isset( $_POST['username'])) { $message = 'Please enter a valid username and password'; } /*** check the username has only alpha numeric characters ***/ elseif (ctype_alnum($_POST['username']) != true) { /*** if there is no match ***/ $message = "Username must be alpha numeric"; } /*** check the password has only alpha numeric characters ***/ elseif (ctype_alnum($_POST['password']) != true) { /*** if there is no match ***/ $message = "Password must be alpha numeric"; } else { /*** if we are here the data is valid and we can insert it into database ***/ $username = filter_var($_POST['username'], FILTER_SANITIZE_STRING); $password = filter_var($_POST['password'], FILTER_SANITIZE_STRING); /*** now we can encrypt the password ***/ $password = sha1( $password ); // $phpro_password = sha1( $phpro_password ); // DATABASE CONNECTION try { $dbh = new PDO("mysql:host=$mysql_hostname;dbname=$mysql_dbname", $mysql_username, $mysql_password); /*** $message = a message saying we have connected ***/ /*** set the error mode to excptions ***/ $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); /*** prepare the select statement ***/ $stmt = $dbh->prepare("SELECT user_id, username, password FROM g1_members WHERE username = :username AND password = :password"); /*** bind the parameters ***/ $stmt->bindParam(':username', $username, PDO::PARAM_STR); $stmt->bindParam(':password', $password, PDO::PARAM_STR, 40); /*** execute the prepared statement ***/ $stmt->execute(); /*** check for a result ***/ $user_id = $stmt->fetchColumn(); /*** if we have no result then fail boat ***/ if($user_id == false) { $message = 'Login Failed'; } /*** if we do have a result, all is well ***/ else { /*** set the session user_id variable ***/ $_SESSION['user_id'] = $user_id; /*** tell the user we are logged in ***/ $message = 'You are now logged in'; } } catch(Exception $e) { /*** if we are here, something has gone wrong with the database ***/ $message = 'We are unable to process your request. Please try again later.'; } }
Я добавил этот простой запрос, который фиксирует имя пользователя в $ Username:
$stm = $pdo->prepare("SELECT username FROM g1_members WHERE user_id = :user_id"); $stm->execute(array( 'user_id'=>$user_id )); while ($row = $stm->fetch()) { $Username = $row['username']; }
-$stm = $pdo->prepare("SELECT username FROM g1_members WHERE user_id = :user_id"); $stm->execute(array( 'user_id'=>$user_id )); while ($row = $stm->fetch()) { $Username = $row['username']; }
Так что мне нужно добавить один и тот же запрос в каждом разделе – например, mysite / themes, mysite / people и т. Д. – или есть лучший способ сделать это?