我正在为我的网站设置php登录。我在一个单独的php文件中有php代码,我正在为该php文件调用表单操作。html中的所有名称都与php中的名称相匹配。当我单击"登录"时,无论它是否有任何输入,它都会将我重定向到一个地址为"mywebsite.com/Login.php?username=&password="的空页面。当它应该响应用户名或密码无效时。
><?php
session_start();
//Creates connection
$con = mysqli_connect("my info and stuff") or die("Error " . mysqli_error($con));
$db = mysqli_select_db($con,"users");
if(isset($_POST["Login"])){
$username = mysqli_real_escape_string($connect, $_POST["username"]);
$password = mysqli_real_escape_string($connect, CRYPT_MD5($_POST["password"]));
$query = mysqli_query("SELECT id, username FROM users WHERE username = '$username' AND password = '$password' ");
$result = mysqli_query($query);
$row = mysqli_num_rows($result);
if($row == 1){
session_register("username");
session_register("password");
header("location: profile.php");
}
else {
echo ("Wrong Username or Password");
}
}
?>
如果有更有效的方法,我们将不胜感激。php还是很新的。
这是由于您没有将form
method
属性值设置为POST
,因此将其设置为post
,不使用method
属性将其改为GET
,并且您的代码块将被忽略,因为您正在使用if(isset($_POST['Login']) {}
,因此没有Login
isset
,if
条件内的代码将被跳过。
此外,您的代码中还有很多问题,您调用了两次查询,这是不必要的,没有净化您的输入,使用mysqli_real_escape_string()
是不够的。请考虑学习更多的基础知识,而不是开始您的项目。
此外,您还告知自己是PHP新手,因此考虑使用PDO
而不是mysqli_()
,这样您就不必太担心处理用户输入了。。。
这里有一个很好的PDO教程,从这里开始。。第一次尝试时肯定会有反弹,但不要离开。
这是问题之一,您正在尝试执行sql两次,
$query = mysqli_query("SELECT id, username FROM users WHERE username = '$username' AND password = '$password' ");
$result = mysqli_query($query);
您已经执行了查询,在这里直接使用$query变量,
$row = mysqli_num_rows($query);
之后的更改
$query = mysqli_query("SELECT id, username FROM users WHERE username = '$username' AND password = '$password' ");
$result = mysqli_query($query);
$row = mysqli_num_rows($result);
至
$result = mysqli_query("SELECT id, username FROM users WHERE username = '$username' AND password = '$password' ");
$row = mysqli_num_rows($result);
mysqli_query
用于执行查询
这是一个简单的登录示例
<?php
//for login.php page
session_start();
if(isset($_POST['login']))
{
$username=$_REQUEST['username'];
$password=$_REQUEST['password'];
$password=md5($password);
//1st query whish will fetch record and then count tham
$query="select * from users where username='$username' and password='$password'";
$rs= mysqli_query($query);
@$n=mysqli_num_rows($rs);
or
//2nd query which will fetch only quantity it is very usefull
$query="select count(*) from users where username='$username' and password='$password'";
$n=mysqli_query($query);
if($n==1)
{
$_SESSION['username']=$username;
$_SESSION['password']=$password;
header("location: profile.php");
}
else
{
echo ("Wrong Username or Password");
}
}
?>
<?php
//for profile.php page
session_start();
$username=$_SESSION['username'];
$password=$_SESSION['password'];
echo $username."<br />".$password;
?>