为什么数据不会以表格形式显示?

时间:2010-03-18 21:07:12

标签: php mysql

我已经创建了一个查看数据的代码。数据无法在表格中显示......

代码:

<?php //======================================================================================================================= PROCESS DATA ======================================================= START. 
include "connectioncomplaint.php";
?>

<?php
$subject = $_GET['type'];
$comment = $_GET['id'];

//echo 'test : ' . $name;
//Tarik data dari sini 
$queryDetail = " SELECT * FROM campuscomplaint " . " WHERE subject = '" . $subject . "' AND comment = '" . $comment . "' ";
//echo 'QUERY DETAIL :' . $queryDetail . '<br>' ;

$resultDetail = mysql_query($queryDetail);
//echo 'RESULT DETAIL :' . $resultDetail + 0 . '<br>' ;

$detail = mysql_fetch_array($resultDetail);

//echo $detail . '<br>';
//echo 'detail subject is : ' . $detail['subject'] . '<br>';
//echo 'detail comment is : ' . $detail['comment'] . '<br>';
//echo $detail[$x] . '<br>';

?>

表格代码:

<tr>
                  <td bordercolor="#FFFFFF" bgcolor="#FFFFFF" class="register style5">From:</td>
                  <td bordercolor="#FFFFFF" bgcolor="#FFFFFF" class="register style5"><input type="text" name="to" 
size="40" maxlength="80" value="<?php echo $detail['userid']; ?>"/></td>
                </tr>
                <tr>
                  <td width="38%" bordercolor="#FFFFFF" bgcolor="#FFFFFF" class="register style5">Subject:</td>
                  <td width="62%" bordercolor="#FFFFFF" bgcolor="#FFFFFF" class="register style5"><input type="text" name="subject" size="40" maxlength="80" value="<?php echo $detail['subject']; ?>"/></td>
                </tr>
                <tr>
                  <td bordercolor="#FFFFFF" bgcolor="#FFFFFF" class="register style5">Comment:</td>
                  <td bordercolor="#FFFFFF" bgcolor="#FFFFFF" class="register style5"><textarea name="comment" rows="5" cols="40"><?php echo $detail['message']; ?></textarea></td>
                </tr>
                <tr>
                  <td bordercolor="#FFFFFF" bgcolor="#FFFFFF" class="register style5"><p>&nbsp;</p>
                      <p>&nbsp;</p></td>
                  <td bordercolor="#FFFFFF" bgcolor="#FFFFFF" class="register style5"><input type="submit" name="submit" value="Submit Comment" onClick="return OnButton1();"/></td>
                </tr>

4 个答案:

答案 0 :(得分:0)

将此更改为:

$resulDetail = mysql_query($queryDetail);

$resulDetail = mysql_query($queryDetail) or die(mysql_error());

并发布你得到的错误。

答案 1 :(得分:0)

考虑您的代码:

$resulDetail = mysql_query($queryDetail);
$detail = mysql_fetch_array($resultDetail);

mysql_query失败时可能会发生这种错误 - 并返回false;这意味着$resultDetail不是资源,也不能用作mysql_fetch_array的参数。


这意味着您应该在调用$resultDetail之前测试mysql_fetch_array是否为false:

$resulDetail = mysql_query($queryDetail);
if ($resulDetail === false) {
    // while developping, you can echo the error message
    // in production, you should log it to a file
    echo mysql_error();
} else {
    // query has been run OK
    // => You can use the result :
    $detail = mysql_fetch_array($resultDetail);
    // ...
}


Humph:仔细看看你的代码,你有这个:

$resulDetail = mysql_query($queryDetail);
$detail = mysql_fetch_array($resultDetail);

在第一行中,mysql_query的结果存储在 $resulDetail,没有t
并且,第二行中的,您使用$resultDetailt

即。用于mysql_fetch_array的变量不存在 - 因此被视为null - 不是有效资源。


作为旁注,即使在这种特定情况下这不是问题的原因,但您正在构建这样的查询:

$subject = $_GET['type'];
$comment = $_GET['id'];
$queryDetail = " SELECT * FROM campuscomplaint " . " WHERE subject = '" . $subject . "' AND comment = '" . $comment . "' ";

这意味着在将数据注入SQL查询之前,您不会转义数据 - 这很糟糕,可能会导致SQL injections (这可能会导致执行查询时出错)

在将这些字符串注入SQL查询之前,您应该对这些字符串使用mysql_real_escape_string

$subject = mysql_real_escape_string($_GET['type']);
$comment = mysql_real_escape_string($_GET['id']);
$queryDetail = " SELECT * FROM campuscomplaint " . " WHERE subject = '" . $subject . "' AND comment = '" . $comment . "' ";

答案 2 :(得分:0)

您的$ resultDetail不是资源,不能用作mysql_fetch_array()的参数。从我的实践 - 用mysql“sql”测试你的所有查询!你可以在那里找到关于错误的更多详细信息!!!

答案 3 :(得分:0)

shimaTun,正如您在之前的回答中所评论的那样,“提供的参数不是有效的MySQL结果资源”。这意味着您的查询无效,并且mysql_query()返回mysql ERROR资源,而不是RESULT资源。将您的代码更改为以下内容:

$resultDetail = mysql_query($queryDetail);
if (mysql_error()) {
   die("MySQL error: " . mysql_error());
}

并重新运行脚本。这将吐出查询导致的确切错误。

顺便提一下,你的td标签中的所有“bordercolor”和“bgcolor”属性是什么?你显然使用CSS,因为它也有“类”属性。为什么不通过使用样式表设置表格单元来节省几千字节的带宽?它还使HTML更容易阅读。

您还需要修复HTML的生成方式。考虑您插入表单的数据包含双引号或标记的情况:

<textarea name="comment" rows="5" cols="40"><?php echo $detail['message']; ?></textarea>

如果$detail['message']看起来像“Hello,&lt; / textarea&gt;我在你的标签之外,弄乱你的HTML”,该怎么办?生成的html将如下所示:

<textarea name="comment" rows="5" cols="40">Hello, </textarea> I'm outside your tags, messing with your HTML</textarea>

现在comment的一部分消失了,简化为Hello,,因为它已从包含<textarea>中分解出来。除非您的表单数据是预转义存储的(通常是一个坏主意),您应该始终通过htmlspecialchars()函数将其输出到表单中,如下所示:

<textarea><?php echo htmlspecialchars($detail['message']) ?></textarea>

将&lt;,&gt;,&amp;,'和'很好地翻译成他们的角色实体等价物。