2010-05-16 6 views
0

когда пользователь меняет пароль Я хочу показать сообщение «Успешно изменено!» и когда пользователь нажимает на OK кнопку окне предупреждения я называю logout.php и силы пользователя войти в систему с новым password.But проблемой является PHP заголовка() не ждет alertbox и непосредственно идет выйти из системы .php. моего код-(PHP), как держать javascript alertbox на экране

if($count==1) 
{ 
    $sqlchange="UPDATE $tbl_name SET password='$newpassword' WHERE userId='$myusername'"; 
    unset($result); 
    $result=mysql_query($sqlchange,$link); 
    if($result>0) 
     { ?> 
     <script type="text/javascript"> 
     alert("Your Password has been changed successfully.Please login again."); 
     </script> 
     <?php 
     header("location:logout.php"); 
     exit; 
     } 
    else 
     {.... 

ответ

5

Причина, почему вы стали свидетелями перенаправлять заголовок является то, что PHP является языком на стороне сервера и его код выполняет перед тем JavaScript. Путь к использованию - использовать перенаправление javascript.

<script type="text/javascript"> 
    alert("Your Password has been changed successfully.Please login again.") 
    document.location.href = 'logout.php'; 
</script> 
+1

Просто для того, чтобы прояснить это: то, что вы испытываете, - это тот факт, что ВСЕ PHP-код эффективно обрабатывается до того, как будет выполняться любой javascript. PHP происходит на сервере, затем страница отправляется в браузер, и THEN обрабатывается javascript. Надеюсь, что это прояснит ситуацию. – rossipedia

+0

@Pekka: Да, если там не было необходимости, оповещение - это модальный диалог, и перенаправление произойдет только после того, как пользователь наберет ОК. Фактически ранее я писал немного по-другому, но забыл удалить это 'if' оттуда. В любом случае спасибо. – Sarfraz

+1

Нету его не working.alert ящик приходит, но когда я нажимаю на ок ее не вызывая logout.php если ($ результат> 0) \t \t \t {?> \t \t \t <тип скрипта = "текст/JavaScript "> \t \t \t если (предупреждение (". Ваш пароль был изменен successfully.Please логин снова ")) \t \t \t { \t \t \t \t document.location.href = 'logout.php'; \t \t \t} \t \t \t \t \t \t nectar

1

Потому что вы должны включить header("location:logout.php"); в вашем яваскрипта коде. PHP просто создает страницу, поэтому она не останавливается на ожидании функции js. В основном переведите header("location:logout.php"); в js, и вы в порядке.

1

Нельзя хранить пароли в текстовом виде.

+4

Хотя технически это хороший совет, который не имеет абсолютно никакого отношения к проблеме, которую он испытывает. – rossipedia

+3

все еще, * очень * важный совет – nico

+0

, но лучше оставить как комментарий – rossipedia

1

Вы уверены, что работает? Вы звоните header после вывода какой-нибудь текст ...

В любом случае хороший способ сделать это:

mysql_query(.....); 
$_SESSION['message'] = "Password changed!"; 
header(....); 

, а затем на странице logout.php (или там, где вы переадресованы)

if (isset($_SESSION['message'])) 
    { 
    echo "<div>".$_SESSION['message']."</div>"; 
    unset($_SESSION['message']); 
    } 

Таким образом, вам не нужно беспокоиться о согласовании вызовов на сервере и на стороне клиента, и вы избегаете раздражающих всплывающих подсказок JS. (вы можете создать div, как сообщения, которые появляются здесь на SO вверху страницы).

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