我创建了一个登录名,以便用户可以登录网站,我使用php和phphmyadmin来创建登录,我使用相同的代码进行我正在做的另一个项目,它运行良好,但它赢得了#39;现在工作,似乎不喜欢第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>
答案 0 :(得分:5)
mysqli_error()
要求将连接作为参数传递
mysqli_error($con)
程序风格
string mysqli_error ( mysqli $link )
关于密码
我注意到您可能以纯文本格式存储密码。
使用以下其中一项:
crypt()
bcrypt()
scrypt()
password_hash()
功能。其他链接:
旁注:您目前的代码向SQL injection开放。使用mysqli
with prepared statements或PDO with prepared statements,他们更安全。
修改强>
&#34;有人知道如何在用户登录后使登录表单消失吗?&#34;
奖励回答:
您可以使用header()
重定向到其他页面。
但是,您已经使用<header id="page_header">
输出,因此您需要将其放在当前PHP代码下面。否则,它将抛出已发送标头的警告。使用ob_start();
有时会起作用,但并非总是如此。
你现在的位置:
if ($count == 1){
$_SESSION['username'] = $username;
}
添加标题和退出:
if ($count == 1){
$_SESSION['username'] = $username;
header("Location: http://www.example.com");
exit;
}
或者,如果您不想重定向,可以使用exit;
。
答案 1 :(得分:1)
你需要将连接参数传递给mysqli_error(),如下所示:
$result = mysqli_query($con, $query) or die(mysqli_error($con));
此外,您还没有从$ _POST清理外国数据。您很容易受到SQL注入攻击。
答案 2 :(得分:0)
您需要为mysqli_error()提供参数:
mysqli_error(connection);