2012-07-07 40 views
0

警告我不是一名PHP程序員。嘗試從URL中提取ID字段時返回錯誤

我已經繼承了PHP日記腳本,同時試圖幫助客戶恢復舊網站。腳本不能按預期運行。看來,問題在於與$ ID沒有被從鏈路如http://example.com/diary.php?id=51

這裏提取的方式是應該處理這個腳本:

<?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」

在此先感謝。

+0

你不應該直接在mysql查詢中使用$ id,至少要用mysql_real_escape_string($ id)來防止sql注入, – cppanda 2012-07-08 00:03:26

回答

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))); 
... 
0

你的SQL查詢是變量$id但你正在尋找的值是$_GET['id']。 jexact的解決方案通過分配$id來解決此問題,同時通過將它轉換爲int來保護您的應用程序免受SQL注入攻擊。

相關問題