У меня есть <div>
внутри моего файла onlinestore.html, который является моим меню, которое содержит имя входа / регистрации. То, что я хочу, это после входа в систему успеха, <div>
для входа / регистрации изменится на имя пользователя. То, что я сделал, не отображает ожидаемый результат, который я хочу. Так что-то не так в моем коде?
Вот что я сделал:
onlinestore.html
<li class='active' style='float:right;'> <?php session_start(); if($_SESSION['logged']==true){ echo $_SESSION["username"]; echo '<a href="logout.php"><span>Logout</span></a></li>'; } elseif($_SESSION['logged']==false) echo '<a href="registerform.html"><span>Login/Register</span></a></li>'; ?>
Вот еще один файл checklogin.php:
if($count==1){ session_start(); $_SESSION['logged']=true; $_SESSION ['username']=$myusername; header("refresh:1;url=onlinestore.html"); } else{ $_SESSION['logged']=false; header("refresh:2;url=login.html");}
Вот ожидаемый результат:
Перед входом
После входа в систему
Вот что я получаю с кодом выше:
Либо вам нужно переименовать ваши файлы onlinestore.html
и login.html
в файлы .php, чтобы PHP работал в них, либо используйте параметр addtype в вашем файле htaccess.
В вашем onlinestore.html
выполните следующее:
<?php session_start(); // Right at the top of your script ?> <li class='active' style='float:right;'> <?php if($_SESSION['logged']==true) { echo $_SESSION["username"]; echo '<a href="logout.php"><span>Logout</span></a></li>'; } elseif($_SESSION['logged']==false) { echo '<a href="registerform.html"><span>Login/Register</span></a></li>'; } ?>
В вашем checklogin.php
выполните следующее:
<?php session_start(); // Right at the top of your script ?> if($count==1) { $_SESSION['logged']=true; $_SESSION['username']=$myusername; header("Location: onlinestore.html"); exit(); } else { $_SESSION['logged']=false; header("Location: login.html"); exit(); }
Если вышеуказанное не работает, пожалуйста, сообщите мне, что произойдет.
У вас есть html-файлы для анализа кода PHP?
Или файл htaccess с:
AddType application/x-httpd-php .htm .html
?
Попробуйте это для отладки:
В вашем checklogin.php
выполните следующее:
<?php session_start(); // Right at the top of your script ?> if($count==1) { $_SESSION['logged']=true; $_SESSION['username']=$myusername; echo "Login worked"; exit(); } else { $_SESSION['logged']=false; echo "Login failed"; exit(); }
Это покажет вам, будет ли вход работать. Если это не так, и вы получите «login failed», то именно поэтому вы получаете ссылку «Войти / Зарегистрироваться» на своей странице.
Если он показывает «Вход в систему», затем верните код, как он был, а затем на странице onlinestore.html
, сделайте это в верхней части файла:
echo "This is working"; exit();
Что происходит? Получаете ли вы сообщение «Это работает» на странице и ничего больше?
В вашем заявлении else
вы не определили session_start()
как вы это делали в вашем операторе if
.
Иначе вместо проверки значения $ _SESSION и определения его значения вы можете использовать следующее:
if (session_status() == PHP_SESSION_NONE) { //Do something if the session is not existing }
Другие опции хранят переменные в $_COOKIE
а затем проверяют, $_COOKIE
или нет ( if(isset($_COOKIE["username"]){}
)
Надеюсь, это помогло вам
Если вы хотите, чтобы имя пользователя отображалось вместо этого, как в примере, вам нужно изменить свой код для onlinestore.html на следующее:
<li class='active' style='float:right;'> <?php session_start(); if($_SESSION['logged']==true){ echo '<a href="logout.php"><span>' + $_SESSION["username"] + ' (Logout)</span></a></li>'; } elseif($_SESSION['logged']==false) echo '<a href="registerform.html"><span>Login/Register</span></a></li>'; ?>
Я думаю, что ваш PHP должен выглядеть примерно так:
<?php session_start(); username = $_SESSION["username"] if($_SESSION['logged'] == true) { echo '<a href="logout.php"><span>' . username. 'Logout</span></a></li>'; } else { echo '<a href="registerform.html"><span>Login/Register</span></a></li>'; } ?>
Используйте либо скобки как в if, так и в другом или используйте none. Кстати, вам не нужен elseif, если вы только проверяете логическое значение. (есть только 2 возможности)
Ну, есть много недостающего кода.
Где ваш скрипт входа?
Во-первых, вам нужна <form>
с полями ввода (логин и пароль) и кнопкой отправки.
Например:
<form action='login.php' method='post'> <input type='text' name='loginname'></input> <input type='password' name='loginpassword'></input> <input type='submit'>Submit</input> </form>
Ваш login.php
<?php session_start(); // Dont forget to check your variables $loginname = $_POST["loginname"]; $password = $_POST["loginpassword"]; // Check the correct login (for example with a database) if ($login_correct) { $_SESSION["username"] = $loginname; $_SESSION["logged"] = true; header("index.html"); exit; else { $_SESSION["logged"] = false; header("registerform.html"); exit; } } ?>
В вашем index.html вы можете сделать:
<?php session_start(); if($_SESSION['logged'] == true){ echo $_SESSION["username"]; echo '<a href="logout.php"><span>Logout</span></a></li>'; } else { echo '<a href="registerform.html"><span>Login/Register</span></a></li>'; } ?>
<div class="msg"><?php echo $msg;?></div> <form type="submit"> <input type="text" name="Email"> <input type="password" name="Password"> <button type="submit" name="Login">Login</button> </form> <?php require 'connection.php'; if (isset($_POST['Login'])) { $email = $_POST['Email']; $password = $_POST['Password']; $user = "SELECT username FROM table_name WHERE email = '".$email."' and password = '".$password."'"; $user = mysqli_query($con, $user); if (mysqli_num_rows($user) > 0) { while ($row = mysqli_fetch_array($user)) { $username = $row['username']; } } else { $msg = "Can't Log in"; } } echo $username; ?>