如何使用PHP/SQL将输入与MySQL数据进行比较?

3
我对PHP和mySQL数据库的工作还不熟悉。我正在尝试让用户输入他们的用户名(UN),以便进入我的网站的某个部分。我有一个名为“test”的mySQL数据库,其中包含一个名为“test”的用户表。 我知道连接已经成功,因为我创建了一个简单页面来打开数据库并列出所有用户(从UN字段),或选择特定用户。然后我创建了一个名为“input.php”的页面,用于测试获取输入。如下所示:
<html>
 <body>
 <form action="test.php" method="get">
 UN: <input type="text" name="U">
 <input type="submit">
 </form>
 </body>
 </html>
上面的输入被发送到下面的"test.php",在那里它会和我的数据库中的当前数据进行校验。
<?php
$hostname = "test.db.some#.somehost.com";
    $username = "test";
    $dbname = "test";
$password = "password";
$usertable = "test";
$yourfield = "UN";
    mysql_connect($hostname, $username, $password) OR DIE ("Unable to 
        connect to database! Please try again later.");
    mysql_select_db($dbname);
$query = "SELECT * FROM $usertable WHERE $yourfield = $_GET["U"]";
    $result = mysql_query($query);
    if ($result) {
        while($row = mysql_fetch_array($result)) {
                $name = $row["$yourfield"];
                echo "Hello: $name<br>";
            }
    }
    else {
        echo "User dosen't exit!";
    }
    mysql_close();
?>

以下是我收到的错误信息> *在第20行,/home/content/81/11107981/html/test.php中语法错误,意外的'"',期望T_STRING或T_VARIABLE或T_NUM_STRING*

我知道我已经接近成功了,但我还想要更好的结果。 ;)

4个回答

1

mysql_*已被弃用,您应该避免使用它们。

更改为

mysql_connect($hostname, $username, $password) OR DIE ("Unable to 
    connect to database! Please try again later.");

$connection = mysql_connect($hostname, $username, $password) OR DIE ("Unable to 
connect to database! Please try again later.");

,

$query = "SELECT * FROM $usertable WHERE $yourfield = $_GET["U"]";

$query = "SELECT * FROM $usertable WHERE $yourfield = '".$_GET["U"]."'";

mysql_close();

to

mysql_close($connection);

mysql_*在PHP 5.5.0中已被弃用,并将来会被移除。 - ontananza
哇,谢谢你的快速回复 #1 :D #2 现在它可以工作了。是的,我一定是在使用我的网络主机提供给我的旧版mysql代码示例。愿众多好运降临于你。 :) - Bob Todd
很高兴知道它有所帮助。也许你可以接受这个答案 ;) - Sumoanand
哦,但是我现在遇到了不同的问题。当我输入一个在数据库中存在的用户名时,它可以正常工作,但是当我输入一个数据库中不存在的用户名时,它什么都不做,只是显示一个空白页面。它应该返回一个错误信息。由于某种原因,它没有执行最后的else语句。 - Bob Todd
因为它仍在执行if条件下的代码。在while循环之外写“echo“我在这里””,你就会知道了。 - Sumoanand
哦,哈哈,再次感谢。是的,我在开头创建了一个新的标志变量,并将其设置为触发器,如果找到用户,则设置为true。同时,在文件末尾添加了一个新的“if”语句,它检查标志是否被触发,如果没有,则显示“未找到用户”。现在一切都很顺利。 :) - Bob Todd

1
我认为问题在于你没有对查询中的引号进行转义:

请尝试以下操作:

$u = $_GET['u'];
$query = "SELECT * FROM $usertable WHERE $yourfield = " . $u;

0

你应该这样编写查询:

$query = "SELECT * FROM $usertable WHERE $yourfield = '" . $_GET["U"] . "'";

或者你可以这样写:

$query = "SELECT * FROM $usertable WHERE $yourfield = '{$_GET["U"]}'";

0

你的第一个问题已经解决了,这里是解决你第二个问题的方法,同时提供将此代码转换为mysqli的帮助。

<?php
$hostname = "test.db.some#.somehost.com";
$username = "test";
$dbname = "test";
$password = "password";
$usertable = "test";
$yourfield = "UN";
$connect   =  mysqli_connect($hostname, $username, $password) OR DIE ("Unable to 
    connect to database! Please try again later.");
mysqli_select_db($dbname);

/* You can combine the above two lines in oen in mysqli by giving db name as fourth parameter
 mysqli_connect($hostname, $username, $password, $dbname)

*/

$query = "SELECT * FROM $usertable WHERE $yourfield = $_GET["U"]";
$result = mysqli_query($query);
$rowSelected   = mysqli_num_rows($result);
if ($rowSelected ) {
    while($row = mysqli_fetch_array($result)) {
            $name = $row["$yourfield"];
            echo "Hello: $name<br>";
        }
}
else {
    echo "User dosen't exit!";
}
mysqli_close($connect);
?>

mysql_querymysqli_query将返回资源,无论是否获取行,这都是正确的。您需要检查实际上是否有任何数据被提取,因此请使用mysqli_num_rows(mysql_num_rows的mysqli版本)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,