2013-03-05 2 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/). –

+0

опубликовать весь код – 2013-03-05 17:58:26

+0

Благодарим вас за ответ и предложение, я на самом деле пытаюсь изучить PHP и уже начал это делать, но, как вы можете судить по сценарию в моем вопросе, я всего лишь новичок. – AlexB

ответ

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

Заголовок функции() будет перенаправить страницу, а функция штампа() остановит остальную часть PHP из обработки.

+0

Спасибо за это, мне еще нужно использовать или «умереть» (mysql_error()); который у меня есть в моем оригинальном сценарии, если я собираюсь пойти с вашим вариантом? – AlexB

+0

Вы должны в целях отладки (вы можете не захотеть в производственном коде). mysql_error() выдает ошибку только в том случае, если что-то пошло не так с запросом. Это не включает пустой возврат (это то, что тестирует mysql_num_rows ($ res) == 0). Поэтому да, сохраните его, если вы хотите, чтобы ваш код полностью прекратил работу, если запрос не работает (например, если вы пытались выполнить поиск в столбце, который не существует). – sundance

Смежные вопросы