2016-04-12 5 views
2

Я пытаюсь перенаправить на страницу выхода, когда соединение с базой данных завершается с ошибкой. Как мне это сделать? Он всегда показывает сообщение об ошибке, но не тот, который я указываю. Помогите оценить, спасибо заранее.не удалось подключиться к logout

Richard

код:

function ms_connect() { 
// Create connection 
// Microsoft Access 
$db_source = DB_SERVER; 
$db_system = DB_SYSTEM_SEC; 
$odbc_driver = "driver={microsoft access driver (*.mdb)};dbq=" . $db_source . ";systemdb=" . $db_system; 


$conn = odbc_connect($odbc_driver, DB_SERVER_USERNAME,DB_SERVER_PASSWORD); // Error returned here! 

     if ($conn) { 
      return $conn; 
     } else{ 
       exit("Connection could not be established."); 
      header ("Location: /logout.php"); 
     } 

} 

он не показывает "Соединение может ..."

error shown 
PHP Warning: odbc_connect(): SQL error: [Microsoft][ODBC Microsoft Access Driver] Not a valid account name or password., SQL state 08004 in SQLConnect in C:\inetpub\wwwroot\functions\functions.php on line 11 
+0

Вам нужно скрыть предупреждения PHP. Заголовок не может вносить изменения после того, как текст был помещен на экран. – jjonesdesign

+0

как их скрыть? –

+0

Добавить "error_reporting (0);" в начале вашего php-файла – jjonesdesign

ответ

0

предупред вы видите, вызывается функция odbc_connect, в то время как он странно, что строка exit не печатается, это не странно, что ваша переадресация не работает, так как выход не позволяет ее выполнить.

Try:

if ($conn !== false) { 
     return $conn; 
    } else{ 

     header ("Location: /logout.php"); 
     exit();//just in case 
    } 

Вы можете проигнорировать предупреждение (и вы должны) в связи с использованием знака «@» перед функцией подключения. (что более элегантно, чем игнорировать все ошибки).

$conn = @odbc_connect($odbc_driver, DB_SERVER_USERNAME,DB_SERVER_PASSWORD); // Error returned here! 

редактировать: Хороший способ сделать это и по-прежнему показывать сообщение пользователю и перенаправляет использует HTML мета перенаправляет:

if ($conn !== false) { 
     return $conn; 
    } else{ 

     echo '<html><head><meta http-equiv="refresh" content="5;url=/logout.php" /></head><body>Could not create a connection, redirecting in 5 seconds.</body></html>'; 
     exit(); 
    } 
+0

Это даст заголовкам уже отправить сообщение об ошибке :) У вас нет html перед заголовками :) Функции, которые отправляют/изменяют заголовки HTTP, должны быть вызваны до того, как будет выполнен какой-либо вывод. –

+0

@MartinAndreev ты прав, не думал об этом. Изменен код. –

+0

ОК, все равно не сработает. позвольте мне перефразировать, пользователь успешно войдет в систему (создается сеанс, перенаправляется на page.php, где вызывается функция.) возвращает ошибку, остается на странице. php с ошибкой. пытается отключить пользователя, если есть проблема с подключением. –

1

Вы делаете выход, который будет прекратить скрипт перед перенаправлением , Вы можете передать свое сообщение об ошибке в качестве параметра get и показать его на своей странице, если вам нужно.

Ваш код должен выглядеть следующим образом:

if ($conn) { 
     return $conn; 
    } else{ 
     header ("Location: /logout.php?error=Connection+could+not+be+established."); 
    } 

Кроме того, если вы хотите, чтобы скрыть предупреждение только добавить:

error_reporting(0); 
ini_set('display_errors', 'Off'); 
Смежные вопросы