1

我正在为我姐姐写一个非常简单的座位计划安排程序。它只是一个包含参加者列表的数据库,每个人都有一个分配的表号($tano

我的PHP如下:

$con = mysql_connect('localhost', $dbuser, $dbpass) or die(mysql_error());
$db = mysql_select_db($dbname, $con) or die(mysql_error());

// Get current table no
$tableno = $_GET["t"];

// Current table -> array
$t = array();
$i = 0;
$result = mysql_query('SELECT * FROM plan WHERE tano = $tableno ORDER BY fname');
while($row = mysql_fetch_array($result)) {
$t[$i] = $row;
$i++;
}

// Get other tables (Seats Remaining)
for ($i = 1; $i <= 40; $i++) {
    $result = mysql_query("SELECT * FROM plan WHERE 'tano' = $i");
    $seatsremaining = 10-mysql_num_rows($result);
         if ($seatsremaining == 0) {$d[$i] = "Table ".$i." (No Seats Remaining)";}
    else if ($seatsremaining == 1) {$d[$i] = "Table ".$i." (1 Seat Remaining)";}
    else if ($seatsremaining >= 2) {$d[$i] = "Table ".$i." (".$seatsremaining." Seats Remaining)";}
}

?>

您可以在 www.greenbottleblue.com 上查看 HTML 代码的其余部分

该数组未填充,并且有一个烦人的 SQL 错误:

警告:mysql_fetch_array() 期望参数 1 是资源,布尔值在第 18 行的 /home/greenbot/public_html/index.php 中给出

表结构为:

在此处输入图像描述

4

1 回答 1

1

在您的第一个查询中,您的值周围缺少引号:

$result = mysql_query('SELECT * FROM plan WHERE tano = $tableno ORDER BY fname');

这应该是:

$result = mysql_query("SELECT * FROM plan WHERE tano = '$tableno' ORDER BY fname");

在您的第二个查询中,您在列名周围使用引号而不是反引号:

$result = mysql_query("SELECT * FROM plan WHERE 'tano' = $i");

这应该是:

$result = mysql_query("SELECT * FROM plan WHERE `tano` = $i");

您应该注意,您的代码假定查询成功完成而不是检查。出于调试目的,您可以添加:

... or die(mysql_error());

到每个mysql_query(...)语句的末尾以获取有关尝试查询的详细信息。您应该为生产代码中的此类错误开发日志记录策略。

此外,请注意,使用未经过滤的用户输入$tableno = $_GET["t"];为 SQL 注入攻击打开了大门。考虑更新您的代码以使用参数化 PDO 查询,或者至少过滤您的传入数据。

于 2013-05-30T17:00:03.107 回答