我创建了一个登录,以便用户可以登录到一个站点,我使用php和phphmyadmin来创建登录,我使用相同的代码为我正在做的另一个项目,它工作正常,但它现在不会工作,不似乎喜欢第15行,我做错了什么.
这是我的代码
<?php
session_start();
?>
<header id="page_header">
<?php
include "connect.php";
if (isset($_POST['username']) and isset($_POST['password'])){
$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM users WHERE username='$username' and password='$password'";
$result = mysqli_query($con, $query) or die(mysqli_error());
$count = mysqli_num_rows($result);
if ($count == 1){
$_SESSION['username'] = $username;
}else {
echo "Invalid Login Credentials.";
}
}
?>
<div id = "menu">
<nav>
<ul>
<li><img src="../img/buzz_party.png"></li>
<li><a href="index.php">Home</a></li>
<li><a href="aboutus.php">About Us</a></li>
<li><a href="advertising.php">Supplies</a></li>
<li><a href="items.php">Party Supplies</a></li>
<li><a href="contact.php">Contact Us</a></li>
</nav>
</div>
<div id = "login_details">
<?php
if (isset($_SESSION['username'])){
$username = $_SESSION['username'];
echo "Hello " . $username . " ";
}
echo "<a href='logout.php'>Logout</a>";
?>
</div>
<div id="login">
<form action="index.php" method="post">
<label for="username" class="uname" data-icon="u" >Username:</label>
<input id="username" name="username" required="required" type="text" size="10" placeholder="Username"/>
<label for="password" class="youpasswd" data-icon="p">Password:</label>
<input id="password" name="password" required="required" type="password" size="10" placeholder="Password" />
<input type="submit" value="Login" />
</form>
</div>
</header>
Run Code Online (Sandbox Code Playgroud)
mysqli_error() 要求将连接作为参数传递
mysqli_error($con)
程序风格
string mysqli_error ( mysqli $link )
Run Code Online (Sandbox Code Playgroud)
关于密码
我注意到您可能以纯文本格式存储密码.
使用以下之一:
crypt()bcrypt()scrypt()password_hash()功能.其他链接:
旁注:您现在的代码对SQL注入开放.mysqli与准备好的陈述一起使用,或PDO与准备好的陈述一起使用,它们更安全.
编辑:
"有人知道如何在用户登录后使登录表单消失吗?"
奖金回答:
您可以使用重定向到另一个页面header().
但是,您已经使用了输出,<header id="page_header">因此您需要将其放在当前PHP代码下面.否则,它将抛出已发送标头的警告.使用ob_start();有时可行,但并非总是如此.
你现在的位置:
if ($count == 1){
$_SESSION['username'] = $username;
}
Run Code Online (Sandbox Code Playgroud)
添加标题和退出:
if ($count == 1){
$_SESSION['username'] = $username;
header("Location: http://www.example.com");
exit;
}
Run Code Online (Sandbox Code Playgroud)
或者,exit;如果您不想重定向,则可以使用.