0

I'm working on my own simple blog. I got it working so far only 1 very irritating bug remaining. If I have 4 rows of data in my databse the first 2 (with the lowest ID) won't show up. So if I add a new 3rd row only the first row will pop-up my screen and it will take 2 new posts before the 3rd row will show up. If I turn around the sequence of ID's it does work if I have 2 useless posts in my database. But ofcourse I want the higher id's to show on top.

Here is the code for putting the database info on the screen:

<?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();
?>

And here the code for adding the posts in the database:

<?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')");
}

?>

I can't find any solution for the problem... Hope I can get some awnsers here :)

4

2 に答える 2

3

なぜこれをwhileループの前に置いたのですか?

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

mysql_close(); 

次に、前にmysql接続を閉じました-

while ($db_field = mysql_fetch_assoc($result)
于 2013-01-31T11:55:58.753 に答える
1

mysql_fetch_assoc3 か所で呼び出します。whileループに入る前に 2 回。この 2 回は、最初の 2 行を返します。したがって、ループに入るときはwhile、行 #3 から開始します。投稿を表示するコードはwhileループ内にあるため、明らかに、最初の 2 つの投稿は表示されません。

行を削除する

$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

于 2013-01-31T11:57:18.550 に答える