为什么我没有使用此代码在页面上显示我的密码?
我正在尝试制作设置页面,以便我可以更改密码。
我没有任何错误;它什么都不做。
<html>
<head>
<title>Settings</title>
<link rel="stylesheet" href="/static/bootstrap.css">
<link rel="stylesheet" href="/static/firstindex.css">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="favicon.png" rel="icon"/>
</head>
<?php
session_start(); //starts the session
$user = $_SESSION['user'];
$result = mysql_query("SELECT password FROM users WHERE user_id='$user'");
if(isset($_SESSION['user']) && $_SESSION['user']){
echo"
<body>
<h1>Edit Profile</h1>
<p>Hello $user</p>
<p>Password $result</p>
<form action='settings.php' method='post' class='form1'>
<input class='form-control' placeholder='Old Password' type='password' name='password' required='required' /> <br/>
<input class='form-control' placeholder='New Password' type='password' name='newpassword' /> <br/>
<input class='form-control' placeholder='New Password' type='password' name='confirmnewpassword' /> <br/>
<input type='hidden' name='night' value='0'/>
<p><input type='checkbox' name='night' value='1'/> Turn on night theme for account</p>
<input type='submit' class='btn btn-info' value='Change Settings'/>
</form>
";
}
else {
Print '<script>window.location.assign("login.php");</script>';
}
?>
<?php
if($_SERVER["REQUEST_METHOD"] == "POST"){
$password = mysql_real_escape_string($_POST['password']);
$newPassword = mysql_real_escape_string($_POST['newpassword']);
$confirmNewPassword = mysql_real_escape_string($_POST['confirmnewpassword']);
$nightTheme =(int)mysql_real_escape_string($_POST['night']);
mysql_connect("localhost", "root","") or die(mysql_error()); //Connect to server
mysql_select_db("mvstudio") or die("Cannot connect to database"); //Connect to database
$result = mysql_query("SELECT password FROM users WHERE user_id='$user'");
$bool = true;
echo "$result";
}
?>
</body>
</html>
答案 0 :(得分:2)
首先,不推荐使用mysql_ *,切换到mysqli_ *或PDO。
其次,你不应该以明文存储密码,这是一个主要的安全问题,即使你需要在某些时候(例如在密码管理系统中)访问它们,它们也需要安全地进行哈希处理。至少要加密。
第三,$result
包含一个mysql响应资源,而不是一个字符串。您需要这样做才能将其转换为关联数组:
$result = mysql_query("SELECT password FROM users WHERE user_id='$user'");
$password = mysql_fetch_assoc($result);
$password = $password['password'];
$password
现在包含密码。
最后,除非您在执行查询之前建立MySQL连接,否则之前的工作将无法正常工作,目前您的连接是在执行查询后进行的。
答案 1 :(得分:1)
session_start()应该在任何输出之前,通常在你的php文件的第一行,如:
<?php session_start(); //starts the session ?>
<html>
<head>
<title>Settings</title>
<link rel="stylesheet" href="/static/bootstrap.css">
<link rel="stylesheet" href="/static/firstindex.css">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="favicon.png" rel="icon"/>
</head>
<?php /* your remaining php code */
和@Enstage建议一样,从现在开始至少使用mysqli_
。