【问题标题】:Receiving errors when querying database查询数据库时收到错误
【发布时间】:2014-02-15 15:14:28
【问题描述】:

我正在尝试为我的网站制作一个登录表单,其中用户名和密码已经存储在 mydb 的表用户中。我创建了 checklogin.php 来创建从我的网站到 mydb 的连接,然后检查登录凭据。

这是 checklogin.php 的代码:

<?php
$host="127.0.0.1:3306"; // host name
$username="root"; // mysql usrname
$password=""; // mysql password
$db_name="mydb"; // db name
$tbl_name="user"; // table name

//Connect to server and select database
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die(mysql_error());

//User name and password sent from form
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

if($count==1)
{   // register $myusername, $mypassword and redirect file to loginSuc.php
    session_register("myusername");
    session_register("mypassword");
    header("location:loginSuc.php");
}
else 
{
    echo "wrong username or password";
}
?>

现在我已将缺少的组件添加到之前的代码中,当我运行时,我现在收到指向第 13、14 和 19 行的错误。

错误是:

注意:未定义索引:C:\wamp\www\HTML 5、CSS 3 和 PHP\checklogin.php 中的 myusername 位于 19 年 13 月 14 日行,下方显示字符串“错误的用户名或密码”

再次纠结于如何解决这个问题 -- 已修复

通过添加一些额外代码修复了第 13,14 和 19 行的错误。现在有错误:

“解析错误:语法错误,C:\wamp\www\HTML 5, CSS 3 & PHP\checklogin.php 中的意外 T_IF 在第 27 行”

<?php
$host="127.0.0.1:3306"; // host name
$username="root"; // mysql usrname
$password=""; // mysql password
$db_name="mydb"; // db name
$tbl_name="user"; // table name

//Connect to server and select database
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die(mysql_error());

//User name and password sent from form
$myusername=$_POST["myusername"];
$mypassword=$_POST["mypassword"];

// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result)

if($count==1)
{   // register $myusername, $mypassword and redirect file to loginSuc.php
    session_register("myusername");
    session_register("mypassword");
    header("location:loginSuc.php");
}
else 
{
    echo "wrong username or password";
}
?>

以上固定

现在我得到了 checklogin.php,我现在正在使用没有错误:

<?php

$host="127.0.0.1:3306"; // host name
$username="root"; // mysql usrname
$password=""; // mysql password
$db_name="mydb"; // db name
$tbl_name="user"; // table name

//Connect to server and select databasemysql_connect
mysql_connect($host, $username, $password, $db_name) or die(mysql_error());

if($_POST)
{   
    $myusername=$_POST["myusername"];
    $mypassword=$_POST["mypassword"];

    $sql="SELECT * FROM ".$tbl_name." WHERE myusername=".$myusername." and mypassword=".$mypassword;
    $result=mysql_query($sql);

    // register $myusername, $mypassword and redirect file to loginSuc.php
    session_register("myusername");
    session_register("mypassword");
    header("location:loginSuc.php");

}
else 
{
    echo "wrong username or password";
}

?>

但我仍然遇到问题。每当我尝试通过 loginpage.html 中的表单登录时,它会转到 checklogin.php 但 checklogin.php 只会显示“密码或用户名错误”。当我按下没有用户名或密码的提交按钮时,当我输入不正确的用户名和密码时,甚至当我使用我在 mydb 的用户表中作为示例放置的用户名和密码时,我都会得到这个。 (在用户表中,我有用户 ID、用户名和密码字段)。

这是我 loginpage.html 开头的 php:

<?php 
session_start();
if(!session_is_registered(myusername))
{
header("location:checklogin.php");
}
?> 

这是表单(我使用了 html5 和 twitter 引导网格代码):

<form class="form-horizontal" method="post" action="checklogin.php">
    <div class="form-group">
        <label for="myusername" class="control-label col-xs-3">Username</label>
        <div class="col-xs-6">
            <input type="text" class="form-control" id="myusername" placeholder="Library card number">
        </div>
    </div>
    <div class="form-group">
        <label for="mypassword" class="control-label col-xs-3">Password</label>
        <div class="col-xs-6">
            <input type="password" class="form-control" id="mypassword" placeholder="Password">
        </div>
    </div>
    <div class="form-group">
        <div class="col-xs-6">
        </div>
    </div>
    <div class="form-group">
        <div class="col-xs-offset-2 col-xs-24">
            <button type="submit" class="btn btn-primary">Login</button>
        </div>
    </div>
</form> 

【问题讨论】:

  • 我想你忘记了db_name 上的 $。 mysql_select_db("db_name")
  • 您的$_POST 数组显然缺少触发错误的myusername 字段。您需要在脚本开头使用var_dump($_POST) 检查哪些帖子数据到达您的脚本。
  • 一些关于好问题的提示:首先,请用描述问题的标题,避免诸如“请帮助”、“谢谢”等闲聊信息。无论如何,它们通常在问题中是多余的。此外,这个问题在其生命周期中发生了很大变化,因为您已经修复了一个又一个,因此现在可能过于本地化,无法对其他人有所帮助。如果您可以为每个问题保留一个问题,那么它对其他有相同问题的读者有用的可能性就会增加。

标签: php mysql html twitter-bootstrap-3 wamp


【解决方案1】:

您应该为mysql_select_db 使用变量名而不是文字字符串。

$host="127.0.0.1:3306"; // host name
$username="root"; // mysql usrname
$password=""; // mysql password
$db_name="mydb"; // db name
$tbl_name="user"; // table name

//Connect to server and select database
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db($db_name)or die(mysql_error()); // <-- $db_name instead of 'db_name'

//User name and password sent from form
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

if($count==1)
{   // register $myusername, $mypassword and redirect file to loginSuc.php
    session_register("myusername");
    session_register("mypassword");
    header("location:loginSuc.php");
}
else 
{
    echo "wrong username or password";
}

【讨论】:

  • 感谢大家的快速修复,我现在在第 13、14 和 19 行遇到了更多问题,您知道如何解决这些问题吗?
  • 那么请用您遇到的其他问题更新原始问题。
  • 恐怕你只能指望得到解决你的问题的帮助,不包括性;)
  • 我只是注意到了那个错误,还不够快去改!道歉哈哈
  • 只是附注,当您向原始帖子添加信息时,不要删除原始内容,只需在帖子底部添加您必须添加的内容。否则它会使没有机会阅读原始问题的人感到困惑。这次你可以保持原样。
【解决方案2】:

这里db_name应该是$db_name

 mysql_select_db($db_name)or die(mysql_error());

【讨论】:

    【解决方案3】:

    我认为这应该可行

    <?php
    $host="127.0.0.1:3306"; // host name
    $username="root"; // mysql usrname
    $password=""; // mysql password
    $db_name="mydb"; // db name
    $tbl_name="user"; // table name
    
    //Connect to server and select databasemysql_connect
    mysql_connect($host, $username, $password, $db_name) or die(mysql_error());
    
    //execute when form is submit
    if($_POST)
    {   //set send data into variables
        $myusername=$_POST['myusername'];
        $mypassword=$_POST['mypassword'];
    
    //check if username have been set
        if(is_null($myusername) || empty($myusername))
        {  $alert = "Enter something!";
        }
        else if(isset($myusername))
        {    $sql="SELECT * FROM ".$tbl_name." WHERE username=".$myusername." and password=".$mypassword;
            $result=mysql_query($sql);
    
        //convert data into array
            $data = mysql_fetch_array($result);
        //check if array is not empty
            if($data)
            {   //goto this line if user exist
                //set or register `$myusername` to variable `username` in session
                $_SESSION['myusername']=$myusername;
    
                header("location:loginSuc.php");
            }
            else 
            {   $alert = "wrong username or password"; }
        }
    }
    ?>
    

    您实际上可以使用$_SESSION['myusername']$_SESSION['mypassword'] 使用会话创建变量。 - https://stackoverflow.com/a/3682629/3306059

    还给这些输入一个名称(与您的 php 代码中的名称相同),以便您可以使用 $_POST 调用它们

    <form class="form-horizontal" method="post" action="checklogin.php">
        <div class="alert">
        <?php 
            if(isset($alert))
            {   echo $alert; }
        ?>
        </div>
        <div class="form-group">
            <label for="myusername" class="control-label col-xs-3">Username</label>
            <div class="col-xs-6">
                <input type="text" class="form-control" id="myusername" placeholder="Library card number" name="myusername">
            </div>
        </div>
        <div class="form-group">
            <label for="mypassword" class="control-label col-xs-3">Password</label>
            <div class="col-xs-6">
                <input type="password" class="form-control" id="mypassword" placeholder="Password" name="mypassword">
            </div>
        </div>
        <div class="form-group">
            <div class="col-xs-6">
            </div>
        </div>
        <div class="form-group">
            <div class="col-xs-offset-2 col-xs-24">
                <button type="submit" class="btn btn-primary">Login</button>
            </div>
        </div>
    </form>
    

    【讨论】:

    • 感谢您的评论,不幸的是,这会在第 12 行出现错误:注意:未定义变量:C:\wamp\www\HTML 5、CSS 3 和 PHP\checklogin.php 中的 myusername 在第 12 行和注意:未定义变量:C:\wamp\www\HTML 5、CSS 3 和 PHP\checklogin.php 中的 mypassword 在第 12 行
    • 把你的sql改成SELECT * FROM $tbl_name WHERE username=".$myusername." and password=".$mypassword;
    • 我现在在第 21 行有另一个错误解析错误:语法错误,C:\wamp\www\HTML 5、CSS 3 和 PHP\checklogin.php 中的意外 T_VARIABLE 在第 21 行,即 SELECT * FROM $tbl_name WHERE username=".$myusername."和密码=".$mypassword;
    • 等等!你的表名是错误的。使用我申请变量用户名的相同方法。您还在使用旧代码还是带有额外保护的新代码?
    • 我正在使用您在上面放置的代码以及来自 cmets 的更正,但现在我收到“解析错误:语法错误,C:\wamp\www\HTML 5 中的意外 T_VARIABLE,CSS 3 & PHP\checklogin.php 在第 12 行",第 12 行是 $sql=SELECT * FROM $tbl_name WHERE username=".$myusername."和密码=".$mypassword";
    猜你喜欢
    • 2015-08-13
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 2017-04-13
    相关资源
    最近更新 更多