我开始学习一些MYSQLi& PHP今天,但我有点卡在这一点上。我已经尝试了几种方法,但似乎没有什么对我有用,因为我对它并不是很了解。我正在尝试为已经拥有帐户的用户创建登录功能,但这似乎不起作用。
另外,我知道我目前的密码加密很弱,但我只是在我深入了解安全问题之前,先尝试学习基础知识。
无论如何,这是我的代码:
形式:
<form method="POST" action="login.php" name="login">
Email <input type="email" name="email">
Password <input type="password" name="password">
<input type="submit" name="login" value="Login">
</form>
PHP: require_once( '芯/的init.php'); //通过新的mysqli连接到数据库
session_start();
if($_SESSION['user'] != ''){
header('Location: profile.php');
}
if (isset($_POST['submit'])){
$email = mysqli_real_escape_string( $_POST['email'] );
$password = mysqli_real_escape_string( $_POST['password'] );
$hash = md5($password);
$query = "SELECT * FROM users WHERE email='$email' AND password='$hash'";
$result = mysqli_query($db,$query)or die(mysqli_error());
$num_row = mysqli_num_rows($result);
if( $num_row == 1 ) {
echo "Does work";
while ($row = mysqli_fetch_array($result) ){
$_SESSION['user'] = $row['id'];
}
} else {
echo "Does not work.";
return false;
}
return true;
}
提前谢谢
答案 0 :(得分:1)
您需要将数据库连接参数传递给POST数组
您未执行的mysqli_real_escape_string($connection, $var)
必需 ,同时确保所有表单元素都包含匹配的名称属性,包括POST方法。
来自手册:
string mysqli_real_escape_string(mysqli $ link,string $ escapestr)
另外,我建议您在标题后添加exit;
。否则,代码可能会继续执行。
您的条件声明
if (isset($_POST['submit']))
与您的提交按钮输入
不匹配<input type="submit" name="login" value="Login">
^^^^^^^^^^^^
应该命名为&#34;提交&#34;而不是&#34;登录&#34;
该条件语句中的任何内容都将执行 。
将其更改为:
<input type="submit" name="submit" value="Login">
将error reporting添加到文件的顶部,这有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:错误报告应仅在暂存时完成,而不是生产。
答案 1 :(得分:0)