我正在尝试通过会话传递变量。我使用while循环来运行一个完美的数据库。如果$username
和$password
正确无误,我会收到这些错误通知:
注意:未定义的索引:行上的login.php中的GELD
注意:未定义的索引:行上的login.php中的NIVEAU
为什么我会收到这些错误通知以及如何解决?
的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>
的login.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{
}
}
}
?>
答案 0 :(得分:3)
viewController
- 您没有在查询中选择SettingsTableViewController
和SELECT ID, USERNAME, PASSWORD FROM Game
列。
并且不要使用已弃用的MySQL API。
使用mysqli
with prepared statements或PDO with prepared statements。
<强>密码强>
如果您对此有所了解或打算使用纯文本密码上线,请立即停止。
对于密码存储,请使用CRYPT_BLOWFISH或PHP 5.5的password_hash()
功能。
对于PHP&lt; 5.5使用password_hash() compatibility pack
。
另请参阅GELD
上的手册。
关于使用NIVEAU
和列长度的旁注。
如果您决定使用password_verify()
或隐藏,请务必注意,如果您当前的密码列的长度低于60,则需要将其更改为(或更高)。手册建议长度为255。
您需要更改列的长度并重新开始使用新哈希才能使其生效。否则,MySQL将无声地失败。