-1

「カスタム」ブログシステムを作成しようとして、もう一度戻ってきました。または、人々がそれを呼ぶように、CMS。これは私の現在のコードです:

<?php
//include stuff here
$pid = $_GET['pageid'];
$data = mysql_query("SELECT * FROM entries WHERE id='$pid'") or die("MySQL died.");
mysql_real_escape_string($pid);
while($info = mysql_fetch_array( $data )) 
{
if (!empty($info)) {
echo $info['data'];
}
else {
echo 'This page no existo.';
}
}
?>

何が起こっているのかというと、「このページは存在しません」と表示されていないということです。「404」テキストとして。誰かが私のサイトに直接入力しようとしているが、間違えたとしましょう:localhost / blog /?pageid = 10 404テキストが表示されません!

MySQLに「data」という名前の行があります。これは、ブログ投稿の--um...データで構成されています。自動増分IDシステムであるIDという行もあります。「実際の」作業ページIDは1です。

ありがとう、RBLXDev。

編集:$ infoのVardump:vardump:

array (size=10)
0 => string '1' (length=1)
'id' => string '1' (length=1)
1 => string 'Testing potatoCMS... and the title.' (length=35)
'title' => string 'Testing potatoCMS... and the title.' (length=35)
2 => string 'This is a test.
This is a new line.
This is a cookie.
You are getting fat.
FAT.<br />lol' (length=88)
'data' => string 'This is a test.
This is a new line.
This is a cookie.
You are getting fat.
FAT.<br />lol' (length=88)
3 => string '2013-02-02' (length=10)
'date' => string '2013-02-02' (length=10)
4 => string 'Unspecified' (length=11)
'author' => string 'Unspecified' (length=11)

ええと...私は奇妙なプレースホルダーを持っています。

4

3 に答える 3

1

私はこのようなことを試してみました...

<?php

        $pid = $_GET['pageid'];
        mysql_real_escape_string($pid);

        $data = mysql_query("SELECT * FROM entries WHERE id='$pid'") or die("MySQL died.");

        $num_rows = mysql_num_rows($data);

        if ($num_rows == NULL) {

              echo 'This page no existo.';

        } else {

                  $info = mysql_fetch_array( $data );
                  echo $info['data'];
        }
?>

未検証

更新しました!!

于 2013-02-03T01:25:23.163 に答える
1

まず、あなたがここに来た目的から始めましょう:

レコードが存在しない場合は、mysql_fetch_array( $data )が返さfalseれるため、whileブロックに入ることができなくなります。だから、あなたの論理は間違っています。

第二に、あなたはmysql_real_escape_string()間違って使用しています。SQLクエリを実行する前に呼び出す必要があり、SQLクエリに挿入する変数にその出力をキャプチャする必要があります。

$pid = mysql_real_escape_string($pid);
$data = mysql_query("SELECT * FROM entries WHERE id='$pid'") or die("MySQL died.");

mysql_*第3に、 SQLインジェクションを軽減する機能が不十分なため、ライブラリは非推奨になっているため、関数を完全に破棄することを検討することをお勧めします。mysqli_*改善されたライブラリ関数の使用を検討してくださいPDO

于 2013-02-03T01:27:16.880 に答える
0
  1. mysql_*新しいコードで関数を使用しないでください。それらはもはや維持されておらず、公式に非推奨になっています。赤いボックスがか?代わりにプリペアドステートメントについて学び、 PDOまたはMySQLiを使用してください。この記事はどちらを決定するのに役立ちます。PDOを選択した場合は、ここに優れたチュートリアルがあります。

  2. クエリで使用する前に、データをエスケープする必要があります。

  3. mysql_num_rows()クエリの結果があるかどうかを判断するための最良の方法です。

  4. クエリから行のみを期待している場合は、すべての結果をループする必要はありません。

  5. $_GET['pageid']常に数値になる場合は、SQLインジェクションの機会を減らすために、整数にキャストする必要があります

<?php
//include stuff here
$pid = $_GET['pageid'];
mysql_real_escape_string($pid);
$data = mysql_query("SELECT * FROM entries WHERE id='$pid'") or die("MySQL died.");
if (mysql_num_rows() > 0) {

    $info = mysql_fetch_array( $data );
    echo $info['data'];
}
else {
    echo 'This page no existo.';
}
?>
于 2013-02-03T01:23:05.220 に答える