0

大家好=)我正在尝试为我的网站登录,实际上登录工作正常。但是我决定添加一个“第一次用户”按钮,然后询问用户的临时 ID。(考虑到我们在一家公司,每个人都只为了这个目的而收到一个 id)

如果 id 是正确的(它在数据库中),则用户会进入“首次创建个人资料”网站,但是......我在解释方面遇到了重大问题。无论我尝试什么组合,mysql 都会让我失望,就好像我给出的任何内容都不正确。

这是我的简单 HTML 输入 + 按钮

<html>
<body>
<form action="first_id_check.php" method="POST" >
<p> Please input your given id into the box below </p>
<input type="text" name="id">
<input type="submit">
</form>

这是应该完成工作的php脚本

<?php

$contab = mysql_connect('localhost', 'root') or die ("Cannot connect to DB");
$condb = mysql_select_db('info', $contab);

$temp = $_POST['id'];

$query = "SELECT * FROM tempid WHERE Number='$temp'";
$result = mysql_query($query);

$count = mysql_num_rows($result);

if ($result == 1)
{
header("location:first_create.php");
}
else
{
echo "Error, please try again";
sleep(5);
header("location:index.php");
}
?>

“数字”是存储 id 的列的名称。但无论我输入什么,我总是被重新路由到“index.php”,好像结果总是返回 0 >.< 我该如何解决这个问题?

4

3 回答 3

2

您的 if 语句正在测试 $result。它应该测试 $count 吗?

这段代码容易受到 SQL 注入的影响——我会在走得太远之前修补它!此外,通常值得检查在失败时返回 false 的 php 函数的条件——那里的所有 MySQL 函数都属于该类别。

于 2013-10-27T23:17:29.827 回答
1

mysql_query返回选择语句的资源。我认为您的意思是检查返回的行数是否等于一:

if ($count == 1)
于 2013-10-27T23:15:43.110 回答
1

不要使用 mysql_* 函数,它们已被弃用。它们被mysqli_*取代。此外,您应该首先尝试输出一些调试信息,而不是尝试重定向,仅用于调试。另外,只是为了调试mysql,你应该 put or die(mysql_error()); 每次使用mysql函数结束时。像这样:

mysql_query($query) or die(mysql_error());

此外,您有一个重大的安全漏洞,使用来自用户的直接输入而不对其进行任何清理是非常危险的。它使您的数据库对有害代码开放。使用此代码可以非常轻松地通过非常简单的 SQL 注入接管整个数据库。

你可能想要这样做:

if ($count == 1)

而不是这个:

if ($result == 1)

此外,下次遇到此类问题时,请尝试回显您测试的值以查看它是否符合您的预期,如果不是,请尝试了解为什么不是。正如彼得所说, var_dump 对此非常有用。与 echo 和 print_r 相同(后者用于数组)。

于 2013-10-27T23:16:44.483 回答