Php 在索引页上实现登录
我正在尝试在我的索引页中实现登录。代码运行时没有错误。我的问题是用户提交后,他们没有登录。我很感谢大家的评论,我是stackoverflow新手,而不是编码新手,所以我仍在努力了解社区及其工作方式Php 在索引页上实现登录,php,html,sql,Php,Html,Sql,我正在尝试在我的索引页中实现登录。代码运行时没有错误。我的问题是用户提交后,他们没有登录。我很感谢大家的评论,我是stackoverflow新手,而不是编码新手,所以我仍在努力了解社区及其工作方式 <?php session_start() if($_POST['submit']=='Login') { //Login form submitted?? $err = array(); //Hold errors if(!$_POST['username'] || !$_POST[
<?php
session_start()
if($_POST['submit']=='Login')
{
//Login form submitted??
$err = array();
//Hold errors
if(!$_POST['username'] || !$_POST['password'])
$err[] = 'All the fields must be filled in!';
if(!count($err))
{
$_POST['username'] = mysql_real_escape_string($_POST['username']);
$_POST['password'] = mysql_real_escape_string($_POST['password']);
//Data escaping
$row = mysql_fetch_assoc(mysql_query("SELECT id,usr FROM tz_members WHERE usr='{$_POST['username']}' AND pass='".md5($_POST['password'])."'"));
if($row['usr'])
{
//If kosher, Login
$_SESSION['usr']=$row['usr'];
$_SESSION['id'] = $row['id'];
//Session storing data
setcookie('tzRemember');
}
else $err[]='Wrong username and/or password!';
}
if($err)
$_SESSION['msg']['login-err'] = implode('<br />',$err);
//Save errors in session
header("Location: login.php/");
exit;
}
您的代码中有许多错误(对我来说)。首先,如果不打开session_start(),sessions将永远无法工作。第二,“如果”的条件我认为是不正确的,因为没有比较法。我希望它能帮助你
<?php
if($_POST['submit']=='Login')
{
//Login form submitted??
$err = array();
// Hold errors
if(!$_POST['username'] || !$_POST['password'])
$err[] = 'All the fields must be filled in!';
if(!count($err))
{
$_POST['username'] = mysql_real_escape_string($_POST['username']);
$_POST['password'] = mysql_real_escape_string($_POST['password']);
//Data escaping
$row = mysql_fetch_assoc(mysql_query("SELECT id,usr FROM tz_members WHERE usr='{$_POST['username']}' AND pass='".md5($_POST['password'])."'"));
if(!empty($row['usr']))
{
// If kosher, Login
session_start();
$_SESSION['usr']=$row['usr'];
$_SESSION['id'] = $row['id'];
//Session storing data
setcookie('tzRemember');
}
else $err[]='Wrong username and/or password!';
}
if(!empty($err)){
session_start();
$_SESSION['msg']['login-err'] = implode('<br />',$err);
}
//Save errors in session
header("Location: login.php/");
exit;
}?>
尽管你没有提出一个明确的问题,而只是要求进行代码审查(这样做会更好),但我的观点是
你有几个明显的问题
- 首先,就像我说的,你真的需要开始你的会话,否则你的错误报告就没有什么用处了
- 其次,你对所有类型的恶意攻击都持开放态度,这会破坏你的安全登录
虽然并非详尽无遗,但下面包含了一些建议,有助于提高安全性
将变量从后全局变量中分离出来-使其在输入中更加明显
使用PDO数据库连接,因为这是比mysql_connect更安全的数据库连接方法,尤其是在使用绑定参数防止sql注入时(请参阅讨论)
密码
下面是一个快速准备,希望能为您指出正确的方向,并提高一些安全性
// Start the session for storing your errors
session_start();
// Check that the button was clicked on the form
if (isset($post)) {
// Array for storing any errors
$err = array();
// Extract details from POST global
$_username = $_POST['username'];
$_password = $_POST['password'];
/*
You may want to consider some filtering here
*/
// Did the user fill in the username field?
if (empty($_username)) {
$err['username'] = "User name not provided";
}
// Did the user fill in the password field?
if (empty($_password)) {
$err['password'] = "Password not provided";
} else {
// Yes so hash it for the database check
$hashedPassword = md5($_password);
}
if (empty($err)) {
// Establish database connection
try {
$dsn = "mysql:host{$host};port={$port};dbname={$database}";
$connection = new PDO($dsn, $dbUsername, $dbPassword, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
} catch (PDOException $e) {
throw new \Exception("Unable to connect to the Database");
}
// Build SQL query and run on PDO connection
$sql = "SELECT id, usr FROM tz_members WHERE usr = :username AND pass = :hashedPassword";
try {
$stmt = $connection->prepare($sql);
// Bid your parameters to prevent sql injection
$stmt->bindParam(':username', $_username);
$stmt->bindParam(':hashedPassword', $hashedPassword);
$stmt->execute();
} catch (PDOException $e) {
throw new Exception("Error with executing query: {$e->getMessage()}");
}
// Fetch your results
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if (!empty($row)) {
// Fill the session up with users details
$_SESSION['id'] = $row['id'];
$_SESSION['usr'] = $row['usr'];
// Head back to the login page - surely you wan to head to your protected page?
header("Location: login.php/");
return;
}
// Login failed
$err['login'] = "Wrong username and/or password!";
}
// Head back to the login page
$_SESSION['errors'] = $err;
header("Location: login.php/");
return;
}
进一步阅读
下面是一些到图坦卡蒙的链接,可能会有所帮助
这是一个图坦卡蒙的优秀杰弗里的方式使用
并研究更详细的方式来保护您的表单
我希望这能有所帮助,如果有什么让你问更多的问题。所以。。。你有什么错误/问题?提交后,用户没有登录。我觉得我忽略了一些简单的事情。我已经推迟了一段时间。你可以尝试在你的评论前面加上/
我的评论前面加了第9行和第10行,我想你的意思是指$\u POST而不是$POST非常感谢你的有用评论。我是一个新手,仍然在学习网站的礼仪。谢谢你的建议。。