私のコードに問題があります。これは私がチュートリアルに従って作ったログイン/レジスタスクリプトです。session_start()に問題が発生しました
問題は、ユーザーが正しいログインの詳細を入力したときにのみ「ログイン」しているようにしたいが、ログインの詳細を入力しなくても「ログイン」されているということです。私はそれをチェックし、 "session_start()"関数を削除しても同じことはしませんが、ログインしたいときにセッションにアクセスできなくなります。
これは、データベースとの接続を開始し、いくつかの他の機能を定義するために使用init.phpファイルである:
:これは、データベースへの接続に使用connect.phpファイル、ある<?php
session_start();
require 'database/connect.php';
require 'functions/general.php';
require 'functions/users.php';
$errors = array();
?>
<?php
$connect_error = 'Sorry, we are experiencing connection issues. This will be solved as soon as possible.';
$con=mysqli_connect("localhost","root","","lr") or die ($connect_error);
mysqli_select_db($con,'lr') or die($connect_error);
mysqli_close($con);
?>
general.phpファイルはこの質問では重要ではありません。 これはusers.phpファイルです。私は他のいくつかの機能を持っています。
function user_id_from_username ($username){
$username = sanitise($username);
$mysqli = new mysqli("localhost", "root", "", "lr");
$query = "SELECT * FROM users";
$result = $mysqli->query($query);
while($row=$result->fetch_row()){
if ($row[1]==$username){ //username == $username
return $row[0];//user_id;
}
}
}
function login ($username, $password){
$user_id= user_id_from_username($username);
$mysqli = new mysqli("localhost", "root", "", "lr");
$username = sanitise($username);
$password =md5 ($password);
$query = "SELECT * FROM users";
$result = $mysqli -> query($query);
while ($row =$result -> fetch_row()){
if($row[1]==$username && $row[2]==$password){
return TRUE;
}else {
return FALSE;
}
}
}
これは、ログイン機能を呼び出して、ファイル、上に提示している:
<?php
include 'core/init.php';
if (empty($_POST) === false) {
$username = $_POST['username'];
$password = $_POST['password'];
if (empty($username) ===TRUE || empty ($password) === TRUE) {
$errors[]='You need to enter a username and password!';
} else if (user_exists($username) ===FALSE) {
$errors[]="We can't find that username, have you registered?";
} else if (user_active($username)===FALSE){
$errors[]="You have not activated your account!";
} else{
$login = login($username, $password);
session_start();
if ($login ==false) {
$errors[] ='That username/password combination is incorrect!';
}else if ($login==true) {
//set the user session
$_SESSION['username'] = $login;
//redirect user to homepage
header('Location: index.php');
exit();
}
}
if ($errors){
print_r($errors);
}
}
?>
そして今、私は、たとえ「ログイン」エコーif文を持っているindex.phpファイル、私がログインしていないです:?
<?php
if (empty($_SESSION['username'])) {
echo 'not logged_in';
}else {
echo 'logged in';
}
>今
私は、問題がどこかにいると思うeithe rはusers.php、login.phpまたはindex.phpファイルにあります。あなたが私が達成しようとしていることのアイデアを得ることができるように、私はすべてのファイルを提示しました。このコードは、私が含まれている関数とインターフェイスを持っているので、非常に多くのファイルに広がっています。コードを再利用できるようにしたいので、includeを使用しています。あなたがより良いアイデアを得るためには、私のファイルは十分にあなたを助けなかった場合
、私は、次の午前のチュートリアルのYouTubeのリンクを残す:
を待って、 https://www.youtube.com/watch?v=JUk2e8oqOvI&list=PLE134D877783367C7&index=7#t=6.296979はありがとうご答えは、
敬具、
各ページで、セッションを使用するセッションを開始することを確認してください。 –
$ _SESSIONを使用している各ページでsession_start()を使用し、session_start()をファイルの先頭に挿入する必要があります –