我正在尝试通过 session 传递一个变量。我使用 while 循环来运行数据库,效果很好。如果 $username
和 $password
正确,我总是会收到这些错误通知:
Notice: Undefined index: GELD in login.php on line
Notice: Undefined index: NIVEAU in login.php on line
为什么我会收到这些错误通知,我该如何解决?
index.html
<form id="loginform" method="post" action="login.php">
<img src="afbeelding/logo.png">
<label for="username">
Username
</label>
<input id="username" type="text" name="username"/>
<label for="password">Password</label>
<input id="password" type="password" name="password"/>
<input type="submit" value="Login">
</form>
登录.php
<?php
session_start();
$_SESSION['username'] = $_POST['username'];
$_SESSION['password'] = $_POST['password'];
$dbhost = 'sql7.xxx.net';
$dbuser = 'xxx';
$dbpass = 'xxx';
$db = 'xxx';
$username = $_SESSION['username'];
$password = $_SESSION['password'];
$con = mysql_connect($dbhost, $dbuser, $dbpass);
$db_found = mysql_select_db($db, $con);
$result = mysql_query("SELECT ID, USERNAME, PASSWORD FROM Game");
$username = $_SESSION['username'];
$password = $_SESSION['password'];
while ($row = mysql_fetch_array($result)) {
if($row{'USERNAME'} == $username){
if($row{'PASSWORD'} == $password){
$_SESSION['geld'] = $row{'GELD'};
$_SESSION['niveau'] = $row{'NIVEAU'};
}
else{
}
}
}
?>
最佳答案
SELECT ID, USERNAME, PASSWORD FROM Game
- 您没有在查询中选择 GELD
和 NIVEAU
列。
并且不要使用已弃用的 MySQL API。
使用mysqli
with prepared statements , 或 PDO with prepared statements .
密码
如果您对此感到满意或打算继续使用纯文本密码,请到此为止。
对于密码存储,使用 CRYPT_BLOWFISH或 PHP 5.5 的 password_hash()
功能。
对于 PHP < 5.5 使用 password_hash() compatibility pack
.
另请参阅有关password_verify()
的手册。
关于使用 password_hash()
和列长度的旁注。
如果您决定使用 password_hash()
或 crypt,请务必注意,如果您当前的密码列的长度低于 60,则需要将其更改为(或更高)。手册建议长度为 255。
您需要更改列的长度并使用新的散列重新开始才能生效。否则,MySQL 将无提示地失败。
关于php session 和 while 循环 : undefined index,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35833382/