我创建了一个简单的登录门户网站但有一些问题,我尝试了几种解决方案。
这是我的login.php
文件。
<!DOCTYPE html>
<html>
<head>
<title>Login Page</title>
<link rel="short icon" href="sopraicon.ico">
<link rel="stylesheet" href="login.css">
<body>
<form method="POST" action="process.php" >
<img src="soprasteria.png" alt="sopra steria" width="20%" align="center">
<img src="share.png" alt="share" id="img1" align="right">
<a href=""> <img src="search.png" id="img1" align="right"></a>
<input type="text" class="search" name="search" placeholder="Search.."><br>
<br> <div class="sidediv"></div>
<p class="data">Sign in to Sopra Steria</p><br>
<h3 class="h3">User Login</h3>
<br><img src="Login.jpg" alt="login iamge" height="150px" width="170px"
align="left" style="padding-left:160px"><br>  <b>Username:</b>
<br>  <input type="text" placeholder="User Name" name="username"
required id="text">
<br>  <b>Password:</b><br>  <input type="password"
placeholder="Enter Password" name="password" required id="text" min="8">
<br>  <button type="submit" id="logbtn"
name="submit">Login</button><br>
<div class="bottomdiv"></div>
</form>
</body>
</head>
</html>
这是我的process.php
文件
<?php
$username = $_POST['username'];
$password = $_POST['password'];
$username = stripcslashes($username);
$password = stripcslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
mysql_connect("localhost","root","");
mysql_select_db("login");
$result = mysql_query("select * from users where username='$username'
and password='$password'") or die("failed to query
database".mysql_error());
$row = mysql_fetch_array(result);
if($row['username']==$username && $row['password']== $password){
echo"login success";
}
else{
echo"failed";
}
?>
但是我在WAMP服务器上遇到错误,如图所示。 请帮帮我..谢谢。
答案 0 :(得分:1)
您必须检查表中是否有任何包含此详细信息的记录,而不是将用户输入与获取数据匹配。 你必须检查
if(mysql_num_rows ==1)
{
return true; //or redirect user to home page
}
else
{
return false;
}
答案 1 :(得分:0)
首先你会收到警告,告诉你放弃mysql *函数,转而使用mysqli函数。
然后,您会收到错误,即使用标准用户连接到数据库,并且没有密码失败。
在使用mysql_real_escape_string 之前连接到数据库。 当使用转义函数时没有建立连接时,php将尝试使用默认用户进行连接,默认用户通常会失败。
- 除此之外:stripslashes是一个不应该需要的函数,因为它试图使用的魔法引用在几年前被删除了。 现在,当它包含en \
时,你会弄乱密码密码:它没有以纯文本形式存储,是吗?
答案 2 :(得分:0)
我测试了你的代码它会正常工作,但你面临的错误是因为你使用PHP 5.4函数mysql_escape_string()已被弃用。所以你需要在mysql驱动文件中做一些更改。转到system \ database \ drivers \ mysql \ mysql_driver.php并找到escape_str函数并用这段代码替换函数代码:
public function escape_str($str, $like = FALSE)
{
if (is_array($str))
{
foreach ($str as $key => $val)
{
$str[$key] = $this->escape_str($val, $like);
}
return $str;
}
$str = is_resource($this->conn_id) ? mysql_real_escape_string($str, $this->conn_id) : addslashes($str);
// escape LIKE condition wildcards
if ($like === TRUE)
{
return str_replace(array($this->_like_escape_chr, '%', '_'),
array($this->_like_escape_chr.$this->_like_escape_chr, $this->_like_escape_chr.'%', $this->_like_escape_chr.'_'),
$str);
}
return $str;
}
答案 3 :(得分:0)
试试这个
$password=$_POST['password'];
$username = stripcslashes($username);
$password = stripcslashes($password);
if(!empty($username)&&!empty($password))
{
$query="SELECT username,password FROM users WHERE username='$username'
AND password='$password' ";
if($query_run= mysqli_query($conn, $query)){
$query_num_rows= mysqli_num_rows($query_run);
if($query_num_rows==NULL){
echo "Invalid Username/password combination";
} elseif($query_num_rows==1){
while ($row=mysqli_fetch_assoc($query_run)) {
$username=$row['username'];
$password=$row['password'];
echo' you are logged in <br>';
echo 'Welcome'.$username;
}
}
}
}else{
echo 'Please fill all fields';
}
}
}