0

警告私はPHPプログラマーではありません。

クライアントが古いサイトを復元するのを手伝おうとしているときに、php日記スクリプトを継承しました。スクリプトが期待どおりに機能しません。問題は、http://example.com/diary.php? id=51などのリンクから$idが抽出されていないことにあるようです。

これを処理する必要があるスクリプトは次のとおりです。

<?php
// instert automatic date structure for 2004 or 2005
include 'admin24/config.inc.php';
if (isset($_GET['id'])){ 
$query = "SELECT * FROM `diary` WHERE id=$id";
$result = mysql_query($query)
    or die ("problem resolving information....contact php_admin");     
$row = mysql_fetch_array($result);
extract($row);
$date = date("j F Y", (strtotime($date)));
?>

$id私がそのように整数を置き換える場合:

$query = "SELECT * FROM `diary` WHERE id=51";

問題はなく、クエリはデータベースから問題なく取得されます。

なぜこれが機能しないのか誰か教えてもらえますか?そのままでは、常に次の値が返されます。

「情報の解決に関する問題....php_adminに連絡してください」

前もって感謝します。

4

2 に答える 2

2

register_globalsがオフになっていると思います (推奨) ので、$id初期化する必要があります。これを試して:

<?php
// instert automatic date structure for 2004 or 2005
include 'admin24/config.inc.php';
if (isset($_GET['id'])){
  $id = (int) $_GET['id']; // the cast to 'int' is necessary to prevent sql injections!
  $query = "SELECT * FROM `diary` WHERE id=$id";
  $result = mysql_query($query)
    or die ("problem resolving information....contact php_admin");     
  $row = mysql_fetch_array($result);
  extract($row);
  $date = date("j F Y", (strtotime($date)));
...
于 2012-07-07T23:46:48.550 に答える
0

SQL クエリは変数用です$idが、探している値は にあり$_GET['id']ます。jexact のソリューション$idは、int にキャストすることでアプリを SQL インジェクションから保護しながら割り当てることでこれを修正します。

于 2012-07-07T23:52:58.750 に答える