注意:未定义的变量:[value]

时间:2016-01-15 11:27:52

标签: php html database login web

我在stackoverflow上搜索了有关未经修饰的变量,我找不到任何可以解决我问题的东西。

这是我的PHP代码:

if(isset($_POST['login'])){

    $username =mysql_real_escape_string( $_POST['naam']);
    $password =md5( $_POST['wacht']);

    $check_user = "select * from users where gebruikersnaam='$gebruikersnaam' AND wachtwoord='$wachtwoord'";

    $run =mysql_query($check_user);

    if(mysql_num_rows($run)>0){

    $_SESSION['naam']=$gebruikersnaam;

        echo "<script>window.open('welkom.php','_self')</script>";
    }

这是我的HTML代码:

<div id=content>
    <form method='POST' action='login.php'>
        Gebruikersnaam:<br>
        <input type='text' name='naam' />
        <br>
        <br>
        Wachtwoord:<br>
        <input type='password' name='wacht' />
        <br>
        <br>
        <input type='submit' name='login' value='Inloggen' />
    </form>
    <br>
    Niet geregistreerd? <a href='registratie.php'>Klik hier.</a>
</div>  

我看不出我的问题在哪里,它说我在这一行上有一个未定义的变量:$check_user = "select * from users where gebruikersnaam='$gebruikersnaam' AND wachtwoord='$wachtwoord'";

我使用的名字来自我的数据库,所以我不会错误地使用这些名称。

你能帮助我吗?这将是一个真正的节省时间,因为我找不到问题。

2 个答案:

答案 0 :(得分:2)

我认为这只是一个错误,您创建了2个名为$username$password的变量,但您没有在查询中使用它们,查询使用$gebruikersnaam和{{1} },当然还没有定义。

所以将查询修改为此

$wachtwoord

附加说明:

  

请不要使用if(isset($_POST['login'])){ $username =mysql_real_escape_string( $_POST['naam']); $password =md5( $_POST['wacht']); $check_user = "SELECT * FROM users WHERE gebruikersnaam='$username' AND wachtwoord='$password'"; $run =mysql_query($check_user); if(mysql_num_rows($run)>0){ $_SESSION['naam']=$gebruikersnaam; echo "<script>window.open('welkom.php','_self')</script>"; } 数据库扩展,不推荐使用(在PHP7中永远不会使用)   特别是如果您只是学习PHP,请花时间学习mysql_PDO数据库扩展,   and here is some help to decide which to use

答案 1 :(得分:0)

在分配之前,不检查是否设置了以下变量。

$_POST['naam']
$_POST['wacht']

$_POST['login']一样,您可以在分配前使用isset检查它们是否存在。

if (isset($_POST['naam'] && isset($_POST['wacht']) {
    // Do something...
}

除了查询中的这个,您使用的变量$gebruikersnaam$wachtwoord在其他地方似乎没有引用?因此,经过一些谷歌翻译,我猜测你打算使用这段代码:

$username =mysql_real_escape_string( $_POST['naam']);
$password =md5( $_POST['wacht']);

如下:

$gebruikersnaam = mysql_real_escape_string($_POST['naam']);
$wachtwoord     = md5($_POST['wacht']);

希望这有点帮助,但是,我会建议阅读http://www.phptherightway.com/并熟悉PHP的一些最佳实践。

在您的代码中,我会尝试重构它并使用password_hash()mysqli_*,因为MD5()不安全且mysql_扩展名已在最新版本中删除PHP并在此之前弃用。