php session和while-loop:未定义的索引

时间:2016-03-06 22:24:27

标签: php mysql while-loop session-variables

我正在尝试通过会话传递变量。我使用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{
            }
        }
    }
?>

1 个答案:

答案 0 :(得分:3)

viewController - 您没有在查询中选择SettingsTableViewControllerSELECT ID, USERNAME, PASSWORD FROM Game列。 并且不要使用已弃用的MySQL API。

使用mysqli with prepared statementsPDO 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将无声地失败。