Предупреждающее сообщение PHP

Я знаю, что первое, что все скажут, это то, что это публиковалось сотни раз; тем не менее, я пробовал все различные методы, которые люди предлагали, но все равно не повезло ... Я пытаюсь получить всплывающее сообщение с предупреждением, если вход не удается, но по какой-то причине сообщение не хочет появляться. Вот что у меня есть до сих пор:

if($conn) {
    $result=sqlsrv_query($conn, "SELECT * FROM Operator
    WHERE Username='{$_POST['login']}'");
    $pass=sqlsrv_fetch_array($result);
    if($pass["Password"] === $_POST['password']) {
        session_start();
        $_SESSION['loggedin']=true;
        header("Location: home.php");
        exit;
    }
    else {
        header("Location: login.php");
        echo '<script type="text/javascript">';
        echo 'alert("Password Invalid!")';
        echo '</script>';
    }
}
sqlsrv_close($conn);

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


person Llama    schedule 19.07.2013    source источник
comment
Можете ли вы также показать нам javascript, который не работает? Кроме того, откройте вкладку сети в консоли разработчика браузера. Ваш ajax когда-нибудь проходит?   -  person Zlatko    schedule 19.07.2013
comment
Щелкните правой кнопкой мыши и проверьте свой документ, тег ‹script› отображается перед тегом ‹html›?   -  person Patsy Issa    schedule 19.07.2013
comment
Если вы устанавливаете перенаправитель с помощью Location, сценарий никогда не появится.   -  person j08691    schedule 19.07.2013
comment
@zladuric из его заголовка строки (Расположение: login.php); очевидно, что это не ajax, и он перенаправляет   -  person Patsy Issa    schedule 19.07.2013
comment
@zladuric Есть только одна часть, где я использую java ... Я пытаюсь включить javascript в код php.   -  person Llama    schedule 19.07.2013
comment
Мне кажется, вы храните свои пароли в виде простого текста. Это огромная проблема безопасности. Ознакомьтесь с этим вопросом SO для реализации: stackoverflow.com/questions/4795385/   -  person rtimoshenko    schedule 19.07.2013
comment
Попробуйте добавить строку запроса в конец вашего перенаправления login.php, чтобы оно выглядело как login.php?status=error. Затем вы можете добавить условное выражение, которое проверяет $_GET[status] и выводит туда предупреждение.   -  person rtimoshenko    schedule 19.07.2013


Ответы (5)


я думаю, проблема здесь. вы перенаправляете страницу перед предупреждающим сообщением

header("Location: login.php"); /* Redirect browser */

попробуйте удалить его или сделать перенаправление через пару секунд, как это

header( "refresh:5;url=login.php" ); //redirect after 5 seconds

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

<script type="text/javascript">
<!--
   var retVal = confirm("Login FAILED! Do you want to continue ?");
   if( retVal == true ){
      window.location.href = "login.php";
      return true;
   }else{
      alert("User does not want to continue!");
      return false;
   }
//-->
</script>
person da-hype    schedule 19.07.2013
comment
Я уже пытался поместить его перед заголовком, но безуспешно. - person Llama; 19.07.2013
comment
@Llama, если вы поместите заголовок () после javascript, убедитесь, что в заголовке () есть таймер - person da-hype; 19.07.2013
comment
Если вы поместите туда таймер, он пропустит весь процесс проверки входа и перейдет прямо на домашнюю страницу через 5 секунд =/ - person Llama; 19.07.2013
comment
в каком файле этот код? вы хотите перенаправить на тот же файл или другой файл? - person da-hype; 19.07.2013
comment
Это файл submit.php, который берет информацию из login.php, предоставленную пользователем, и сравнивает ее с файлом базы данных. Если вход не удался, я хочу дать пользователю еще один шанс войти в систему, но отображать предупреждающее сообщение. - person Llama; 19.07.2013
comment
В итоге я использовал метод обновления и просто создал новый файл php, который бы гарантировал, что он не сможет перейти на домашнюю страницу, возможно, не лучший метод/идея, но эй, он работает! Спасибо вам за помощь :) - person Llama; 19.07.2013

В вашем коде header("Location: login.php"); находится перед вашим js-кодом, поэтому он никогда не выполняет js-код, который он перенаправляет на страницу входа, удалите его и попробуйте.

person Prasanth Bendra    schedule 19.07.2013
comment
Когда я удалил заголовок, предупреждение сработало, но как мне все еще перенаправить на страницу входа с появлением предупреждающего сообщения? - person Llama; 19.07.2013
comment
@Llama Попробуйте добавить строку запроса в конец вашего перенаправления login.php, чтобы оно выглядело как login.php?status=error. Затем вы можете добавить условное выражение, которое проверяет $_GET[status] и выводит туда предупреждение. - person rtimoshenko; 19.07.2013

Используйте этот код

echo '<script>';
echo 'alert("Password Invalid!");';
echo 'location.href="login.php"';
echo '</script>';

вместо

header("Location: login.php");
echo '<script type="text/javascript">';
echo 'alert("Password Invalid!");';
echo '</script>';

Спасибо.

person Chinmay235    schedule 19.07.2013

Ваш код, который приходит после заголовка, не запускается, возможно, попробуйте установить переменную сеанса и проверить эту переменную в login.php. Затем вы можете вызвать оповещение оттуда или просто показать простое сообщение на странице.

person Tdelang    schedule 19.07.2013

сразу за предупреждением отсутствует точка с запятой:

if($conn) {
    $result=sqlsrv_query($conn, "SELECT * FROM Operator
    WHERE Username='{$_POST['login']}'");
    $pass=sqlsrv_fetch_array($result);
    if($pass["Password"] === $_POST['password']) {
        session_start();
        $_SESSION['loggedin']=true;
        header("Location: home.php");
        exit;
    }
    else {
        header("Location: login.php");
        echo '<script type="text/javascript">';
        echo 'alert("Password Invalid!");';
        echo '</script>';
    }
}
sqlsrv_close($conn);

вы не проверяли консоль javascript?

РЕДАКТИРОВАТЬ: Извините, моя вина, конечно, точка с запятой не нужна.

Я тестирую ваш php-код на своем сервере, и он все равно работает нормально!

person do.becker    schedule 19.07.2013