0

我正在运行这个 php 脚本并没有得到我想要的结果。目前它给了我这个输出

水肺气瓶

麦克风

0.00 450.00 5.00

2012-06-04 18:50:22

水肺气瓶

利亚姆

80.00 350.00 2.50

2012-06-04 19:00:09

显示 3 个结果

水肺气瓶

乔希

410.00 0.00 5.00

2012-06-04 19:00:09

它几乎是我想要的,除了显示 3 个结果的行应该显示在最后而不是在最后一个条目之前。我需要对我的脚本做些什么来解决这个问题?

<?php
    $host = "localhost";
    $user = "root";
    $pass = null;

    // ========================================
    $dbhost = @mysql_connect($host, $user, $pass) or die("Unable to connect to server");

    @mysql_select_db("divebay") or die("Unable to select database");

    $var = "scuba";
    $query = trim($var);

    if(!isset($query)){
        echo "Your search was invalid";
        exit;
    } //line 18

    $sql = "SELECT * FROM auction WHERE name LIKE '%" . $query . "%'";

    $result = mysql_query($sql);
    $numrows = mysql_num_rows($result);
    mysql_close($dbhost);

    if($numrows == 0){
        echo "Sorry, your search did not return any results";
    }

    $i = 0;

    while($i < $numrows){
        $row = mysql_fetch_array($result);

        $ID = $row['ID'];
        $name = $row['name'];
        $owner = $row['owner'];
        $holder = $row['holder'];
        $start = $row['sprice'];
        $current = $row['cprice'];
        $instant = $row['iprice'];
        $inc = $row['incprice'];
        $image = $row['img'];
        $time = $row['stime'];
        $length = $row['duration'];

        echo "
            <?xml version = '1.0' encoding = 'utf-8'?>
            <!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org    /TR/xhtml1/DTD/xhtml1-transitional.dtd'>
            <html xmlns='http://www.w3.org/1999/xhtml'>
            <head>
                <title>searchdbresults</title>
            </head>

            <body>  
                <table style='width = 800px;'>
                    <tr style ='height = 200px;'>
                        <td style ='width = 200px;'></td>

                        <td style ='width = 300px;'>
                            <div style ='180px'> $name </div>
                            <div> $owner </div>
                        </td>

                        <td style='width =200px'>
                            <div style='height = 100px'> $current </div>
                            <div style='height = 50px'> $instant </div>
                            <div> $inc </div>
                        </td>

                        <td> $time </td>
                    </tr>
        ";

        $i++;   
    }

    echo "
                <tr> Displaying $numrows results</tr>
            </table>
        </body>
        </html>
    ";
?>
4

4 回答 4

1

您的脚本正在生成“混乱”的 HTML。从我所见,您如此生成的 HTML 页面(在当前示例中)将具有 3 个 DOCTYPE 定义、3 个head以及 3 个开始table标记和只有一个结束标记/table。而且你不需要echo每个 html 实体,你可以在 php 文件中使用纯 html 尝试这样的事情:

<?xml version = '1.0' encoding = 'utf-8'?>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml'>

<head>
<title>searchdbresults</title>
</head>
<body>
<?php

$host = "localhost";
$user = "root";
$pass = null;

// ========================================
$dbhost = @mysql_connect($host, $user, $pass) or die("Unable to connect to server");

@mysql_select_db("divebay") or die("Unable to select database");

$var = "scuba";
$query = trim($var);

if(!isset($query)){
    echo "Your search was invalid";
    exit;
} //line 18

$sql = "SELECT * FROM auction WHERE name LIKE '%" . $query . "%'";

$result = mysql_query($sql);
$numrows = mysql_num_rows($result);
mysql_close($dbhost);

if($numrows == 0){
    echo "Sorry, your search did not return any results";
}
else{
?>
<table style='width = 800px;'>
<?php 
    $i = 0;

    while($i < $numrows){
    $row = mysql_fetch_array($result);

    $ID = $row['ID'];
    $name = $row['name'];
    $owner = $row['owner'];
    $holder = $row['holder'];
    $start = $row['sprice'];
    $current = $row['cprice'];
    $instant = $row['iprice'];
    $inc = $row['incprice'];
    $image = $row['img'];
    $time = $row['stime'];
    $length = $row['duration'];
?>
<tr style ="height: 200px;">
<td style ="width: 200px;"></td>
<td style ="width: 300px;">
    <div style ="width: 180px"><?php echo $name; ?></div>
    <div><?php echo $owner; ?></div>
</td>
<td style="width: 200px;">
    <div style="height: 100px;"><?php echo $current; ?></div>
    <div style="height: 50px;"><?php echo $instant; ?></div>
    <div><?php echo $inc; ?></div>
</td>
<td><?php echo $time; ?></td>
</tr>
<?php
      i++;
    } //end of while
} //end of else
?>
<tr>
    <td colspan="4">Displaying <?php echo $numrows; ?> results</td>
</tr>
</table>
</html>

并且还要考虑防止 SQL 注入:http ://bobby-tables.com/

于 2012-06-05T12:22:54.410 回答
1

我无法发表评论,但您的代码中有几个问题。

第一个样式必须双引号

<div style="width:100%;"> 

例如。

第二:此行的 tr 内必须有一个 td :显示 $numrows 结果

我看到的最后一个是:你有这个:

<?xml version = '1.0' encoding = 'utf-8'?>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org    /TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml'>

<head>
<title>searchdbresults</title>
</head>
<body>  

在您的 while 循环中,因此它在您的页面中多次出现,并且不能

您的 while 循环中也有表打开,但没有关闭。所以它开了好几次,但只开了一次。

编辑:您还需要在 sql 查询中添加保护

于 2012-06-05T12:02:12.643 回答
0

我认为如果你将你的 php 和 html 分成单独的文件,你会更好。你似乎忘记了你的开始“和结束”。如果你想要你的

<tr> Displaying $numrows results</tr>

在页面底部,然后将其从表格中取出。

于 2012-06-05T12:18:37.403 回答
0

我建议稍微简化一下您的表格,也许将“显示 $numrows 结果”完全从表格中删除。

'<tr> Displaying $numrows results</tr>' 行不是有效的 HTML。<tr> 的意思是'定义一个新的表格行',但它需要一个 <td> 在里面来包装内容。因为表格的大多数行都包含几个 TD 元素,而这一行只包含一条信息,所以您需要告诉该表格单元格跨越多个列

调试此类事情的一个好方法是将生成的 HTML 提供给http://validator.w3.org/,或者将 $variables 替换为示例数据并将模板代码提供给验证器。起初这通常有点令人沮丧(因为它会迫使您准确了解要使用的 HTML 版本等),但这是跟踪问题的好方法。如果您将以下 HTML 片段提供给 W3 验证器,它将为您提供一些有用的反馈:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head><title>A</title></head>
<body>

<table><tr><td>aaa</td><td>bbb</td></tr>
<tr><td>cccc</td><td>dddd</td></tr>
<tr>Test</tr>
</table>
</body>
</html>

验证器告诉你: 第 7 行,第 5 列:此处不允许使用字符数据

<tr>Test</tr>

换句话说,TR 元素不应该直接包含文本。

它还说:第 7 行,第 13 列:未完成的“tr”结束标记

<tr>Test</tr>

“最有可能的是,您嵌套标签并以错误的顺序关闭它们......另一种可能性是您使用的元素需要您未包含的子元素。因此父元素“未完成”,不完整。对于例如,在 HTML 中,<head> 元素必须包含 <title> 子元素,列表需要适当的列表项(<ul> 和 <ol> 需要 <li> ...),等等。”

一旦您以您想要的方式查看和验证静态 HTML,您就可以重新添加 PHP 循环,但这次您可以将脚本输出与您的工作 HTML 示例进行比较。

于 2012-06-05T12:20:44.330 回答