gpt4 book ai didi

Php Session和登录页面post问题

转载 作者:可可西里 更新时间:2023-11-01 07:56:14 24 4
gpt4 key购买 nike

好的,所以我们在这里得到了一些基本的 HTML

<form action="main_login.php" method="post" style="text-align:right;">
Username:
<input type="text" name="username" value="" size=20 style="display:inline-block;margin-left:10px"required>
<br>
Password:
<input type="password" name="password" value="" size=20 style="margin-left:12px"required>
<br>
<input type="submit" value="Log In" style="margin-left:75px"=>
</form>

还有 2 个 php 文件,主要是 login.php

<?php
session_start();
$con = mysqli_connect("localhost", "root", "", "complaints");
if (!$con) {
die('Could not connect: ' . mysql_error());
}
$myusername=$_POST["username"];
$mypassword=$_POST["password"];
echo $myusername . "<br>";
echo $mypassword . "<br>";



// MySQL injection
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$sql="SELECT * FROM register WHERE username='$myusername' and password='$mypassword'";
$result=mysqli_query($con,$sql);
// Mysql_num_row is counting table row
$count=mysqli_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){
// Register $myusername, $mypassword and redirect to file "login_success.php"
$_SESSION['username']=$myusername;
$_SESSION['password']=$mypassword;
header("location:login_success.php");
}
else {
echo "Wrong Username or Password";
}
mysqli_close($con);
?>

如果登录成功则重定向到这里 login.php

<?php
session_start();
if ( isset( $_SESSION['username'] ) ){
header("location:main_login.php");
}
?>

<html>
<body>
Login Successful
</body>
</html>

好的,我是 PHP 新手,对 session 了解不多。首先我使用了 session_register 和 session_is_registered 但我发现这些函数不再使用了。所以我转换为 session ,但我的问题一直出现在这里

$myusername=$_POST["username"];
$mypassword=$_POST["password"];

我无法使用 $_POST 从表单中获取数据。我也不知道我是否正确放置了 session 功能。

编辑:html 中的用户名和密码名称与 php 中使用的相同,我只是在这里打错了。

最佳答案

Edit: Username and password names in html are the same which are used in php, i just misstyped here.

编辑:好的,您在表单字段中输入了错误。您仍在混合 MySQL API,请参阅下面有关使用 mysql_real_escape_string() 的混合功能的更多信息.

<罢工>看name="myusername"和你的 POST 任务,以及你的密码。

<罢工>

它们不匹配。

更改 name="myusername"name="username"

name="mypassword"name="password"

根据

$myusername=$_POST["username"];
$mypassword=$_POST["password"];

已使用 error reporting , 会发出未定义索引和标题已发送警告的信号;见下文。

<?php 前还有空格这将导致标题之前的输出。删除它们。

此外,您将 MySQL API 与 mysql_error() 混合使用. mysql_error()应读作 mysqli_error($con)下面是:

$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

应该读作

$myusername = mysqli_real_escape_string($con,$myusername);
$mypassword = mysqli_real_escape_string($con,$mypassword);

$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
  • mysqli_mysql_功能不会混合在一起。

关于安全

我注意到您可能以纯文本形式存储密码。如果是这种情况,非常不鼓励。

我建议您使用 CRYPT_BLOWFISH或 PHP 5.5 的 password_hash() 功能。对于 PHP < 5.5,使用 password_hash() compatibility pack .

此外,关于 SQL 注入(inject),use mysqli with prepared statements , 或 PDO with prepared statements它们更安全


脚注

最好加上exit;在每个标题之后。

header("location:login_success.php");
exit;

以及所有标题。


编辑:

移除

$myusername=$_POST["username"];
$mypassword=$_POST["password"];
echo $myusername . "<br>";
echo $mypassword . "<br>";

然后将其替换为:

$myusername = stripslashes($_POST["username"]);
$mypassword = stripslashes($_POST["password"]);
$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);

编辑#2:

这是我测试了你的代码,并且成功了,所以我不知道你现在的代码有什么问题。

HTML 格式

<form action="main_login.php" method="post" style="text-align:right;">
Username:
<input type="text" name="username" value="" size=20 style="display:inline-block;margin-left:10px"required>
<br>
Password:
<input type="text" name="password" value="" size=20 style="margin-left:12px"required>
<br>
<input type="submit" value="Log In" style="margin-left:75px"=>
</form>

MySQL

<?php

$DB_HOST = 'xxx';
$DB_USER = 'xxx';
$DB_PASS = 'xxx';
$DB_NAME = 'xxx';

$conn = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if($conn->connect_errno > 0) {
die('Connection failed [' . $conn->connect_error . ']');
}

$myusername = stripslashes($_POST["username"]);
$mypassword = stripslashes($_POST["password"]);
$myusername = mysqli_real_escape_string($conn,$_POST['username']);
$mypassword = mysqli_real_escape_string($conn,$_POST['password']);


echo $myusername; // echos
echo "<br>";
echo $mypassword; // echos


$sql="SELECT * FROM register WHERE username='$myusername' and password='$mypassword'";
$result=mysqli_query($conn,$sql);

$count=mysqli_num_rows($result);

if($count==1){
echo "Yep";
}
else{
echo "nope";
}

注意:您还应该清除您的 session ( destroy sessions ),服务器上可能有一些东西缓存了旧的用户名和密码。

还要确保您的列中没有空格,类型正确且长度足以容纳数据。通常VARCHAR(255)绰绰有余,但建议在使用 password_hash() 生成的散列密码时使用,存储密码时应该使用的函数。

另见:

在堆栈上。

关于Php Session和登录页面post问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27627030/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com