【发布时间】:2014-12-21 13:54:22
【问题描述】:
我正在尝试使用 PHP 和 MySQL 制作一个基本的登录系统,但它在我的登录表单中不起作用。这是登录表单的代码。:
<!DOCTYPE html>
<html>
<head>
<title>Login</title>
</head>
<body>
<form method="POST" action="verify.php">
<br/>Username:<input type="text" name="username"/>
<br/>Password:<input type="password" name="password"/>
<br/><button type="submit">Submit</button>
</form>
</body>
</html>
这里是verify.php的代码:
<?php
$username = $_POST["username"];
$password = $_POST["password"]; //Not Doing anything with the pass yet
$con=mysqli_connect("","root","mypassword","logins");
//now mySQL is connected, lets extract stuff from the database
$que = mysqli_query($con,"SELECT Pass FROM login WHERE User='" . $username . "'");
$row = mysqli_fetch_array($que);
$myvar = $row[0];
//should echo Test
echo $myvar;
echo "If it returned Test, the mySQL works.";
mysqli_close($con);
?>
当我运行它时,输出完全是空白的。 不过,我可以直接从 MySQL 控制台获取查询:
mysql> SELECT Pass from login WHERE User='Logern';
+------+
| Pass |
+------+
| Test |
+------+
1 row in set (0.01 sec)
mysql>
我也可以通过 PHP 使用硬编码的 SQL 查询来访问它:
$que = mysqli_query($con,"SELECT Pass FROM login WHERE User='Logern'");
那么为什么这不起作用?我的网络服务器是一个带有 Debian 和 lighttpd 的 Raspberry Pi。
【问题讨论】:
-
在查看答案之前,您(以及采用这种方法的任何其他人)应该知道从
$_POST获取普通输入并在 MySQL 查询中使用它会使您的应用程序对 SQL 注入攻击敞开大门: php.net/manual/en/security.database.sql-injection.php -
是的,我知道,但是我以后会担心安全性,反正这只是一个私人网络服务器。
-
好的,那么请确保其他人;另外,您可以通过将
$password = $_POST["password"[;更改为$password = $_POST["password"];来修复示例
标签: php mysql query-string