php博客不会显示前2个数据库行

时间:2013-01-31 11:51:31

标签: php mysql

我正在开发自己的简单博客。我到目前为止工作只剩下一个非常烦人的bug。 如果我的数据库中有4行数据,则前2个(ID最低)将不会显示。 因此,如果我添加新的第3行,则第一行将弹出我的屏幕,并且在第3行显示之前将需要2个新帖子。 如果我转换ID序列,如果我的数据库中有2个无用的帖子,它确实有用。 但是当然我希望更高的身份证能显示在最顶层。

以下是将数据库信息放在屏幕上的代码:

<?php
require('config.inc.php');
require('template.inc.php');
require('functions.inc.php');
include_once('insert.php');

$query="SELECT * FROM blog ORDER BY ID DESC";
$result=mysql_query($query);

$db_field = mysql_fetch_assoc( $result );
mysql_fetch_assoc( $result );

mysql_close();

htmlOpenen('ServerSideBlog');
while ($db_field = mysql_fetch_assoc($result) ) {
echo'
<span class="post">
    <h1>'.$db_field['title'].'</h1>
    <h2>'.$db_field['date'].'</h2>
    <p>'.$db_field['contents'].'</p>
    <h3>Hoogachtend, Sincerely, Aufrichtig, sinceramente,</h3>
    <h4>'.$db_field['author'].'</h4>
';
}
htmlSluiten();
?>

这里是在数据库中添加帖子的代码:

<?php
$db_host = "db.jxxxxx.com";
$db_username = "md2xxxx230";
$db_pass = "J9xxxx58";
$db_name = "md2xxxxx230";

@mysql_connect("$db_host","$db_username","$db_pass") or die ("could not connect to      mysql");
@mysql_select_db("$db_name") or die ("no database");

if ($_POST['parse_var'] == "new"){

    $title=$_POST['title'];
    $contents=$_POST['contents'];
    $author=$_POST['author'];
    $date=$_POST['date'];
    $date = strftime("%b %d, %y", strtotime($date));

    $sqlcreate = mysql_query("INSERT INTO blog (date, title, contents, author)
            VALUES(now(),'$title','$contents','$author')");
}

?>

我找不到任何问题的解决方案......希望我能在这里得到一些灵感:)

2 个答案:

答案 0 :(得分:3)

为什么你在while循环之前放这个?

$db_field = mysql_fetch_assoc( $result );
mysql_fetch_assoc( $result );

mysql_close(); 

其次你在 -

之前关闭了mysql连接
while ($db_field = mysql_fetch_assoc($result)

答案 1 :(得分:1)

您可以在三个地方拨打mysql_fetch_assoc。在您输入while循环之前两次。这两次返回前两行。因此,当您输入while循环时,您将从第3行开始。由于显示帖子的代码位于while循环内,因此显然不会显示前两个帖子。

删除行

$db_field = mysql_fetch_assoc( $result );

mysql_fetch_assoc( $result );

并移动

mysql_close();

到你的while循环之后,它很可能会做你想要的。

<强>旁注:

数据添加到数据库的方式非常不安全。 行

 $sqlcreate = mysql_query("INSERT INTO blog (date, title, contents, author)
            VALUES(now(),'$title','$contents','$author')");

没有对插入的数据进行过滤,表明它非常容易受到注入攻击。任意SQL代码和Javascript都可以执行。

您的一些信息:

http://en.wikipedia.org/wiki/SQL_injection

http://en.wikipedia.org/wiki/Cross-site_scripting