2013-03-05 57 views
0

如果查詢爲空或者存在錯誤的代碼名稱,我想要做的是將訪問者發送到錯誤頁面?我目前的腳本回應了下面的內容:「這個網站上不會有黑客入侵!」,但這一切都發生在發送原始查詢的同一頁面上。如果MySQL查詢爲NULL,則動作

我們的目標是將訪問者發送到位於第一頁所在的同一文件夾內的我的自定義錯誤頁面。

http://www.example.com/download/file.php 

http://www.example.com/download/error.php 

和我現在的劇本是

<?php 
$host = 'localhost'; 
$db_name = 'My_DB_Name'; 
$db_user = 'MY_User_Name'; 
$db_pass = '******'; 
$path_to_file_directory = 'download/files/'; 
mysql_connect($host, $db_user, $db_pass); 
mysql_select_db($db_name) or die(mysql_error()); 

$file_code = filter_input(INPUT_GET, 'urlid'); 

# Query for file info 
$res = mysql_query("SELECT * FROM `Files` WHERE `urlID`='".$file_code."'") or die (mysql_error()); 

# If query is empty, there is a bad code name 
# This catches possible hacking attempt. 
if(mysql_num_rows($res) == 0) 
{ 
echo 'There will be no hacking on this website! '; 
exit(); 
} 

# Save file info into an array called "$info" 
$info = mysql_fetch_assoc($res); 

# File path is below 
$file_path = $path_to_file_directory.$info['file_name']; 

# Now push the download through the browser 
# There is more than 1 way to do this. 
if (file_exists($file_path)) { 
echo '<p>if it does not: <a href="'.$file_path.'">click here to try again</a>.</p>'; 
exit; 
} 

?> 

我明白,我必須改變回聲別的東西,但我不知道我有什麼,而不是使用,因爲只需將鏈接內部回聲一個錯誤頁面將只能隨聲附和它我file.php頁面上

請幫

+1

*強制性的:*'mysql_ *'函數將[在PHP 5.5中棄用](http://php.net/manual/en/faq.databases.php#faq.databases.mysql.deprecated)。不建議編寫新代碼,因爲它將來會被刪除。相反,無論是[MySQLi](http://php.net/manual/en/book.mysqli.php)還是[PDO](http://php.net/manual/en/book.pdo.php)和[是一個更好的PHP開發人員](http://jason.pureconcepts.net/2012/08/better-php-developer/)。 – 2013-03-05 17:54:40

+0

發佈整個代碼 – 2013-03-05 17:58:26

+0

感謝您的回覆和建議,我實際上正在嘗試學習PHP,並已開始這樣做,但正如您可以通過我的問題中的腳本來判斷,我只是一個初學者。 – AlexB 2013-03-05 17:59:45

回答

2

我想你需要的是重定向到另一個頁面。您可以使用它的header函數。

<?php 
if(mysql_num_rows($res) == 0) 
{ 
    header('Location: /nohacking.php'); 
    exit(); 
} 
?> 

這會將您的瀏覽器重定向到nohacking.php文件。

1

只要你還沒有發送的任何標題,但(即,基本上,這是任何HTML前):

if(mysql_num_rows($res) == 0) 
{ 
die(header("Location: error.php")); 
} 

header()函數將重定向頁面,並且die()函數將停止處理其餘的PHP。

+0

謝謝你,我仍然必須使用或'死(mysql_error());'如果我要選擇你的選擇,我在原始腳本中有哪些? – AlexB 2013-03-05 18:13:27

+0

您應該爲了調試目的(您可能不想在生產代碼中)。如果查詢出問題,mysql_error()只會引發錯誤。這不包括一個空的返回(這是mysql_num_rows($ res)== 0正在測試的內容)。因此,如果您希望代碼在查詢無效的情況下停止運行(例如,如果您嘗試在不存在的列中搜索),請保留它。 – sundance 2013-06-21 12:58:41