2015-10-26 3 views
-1

У меня есть простая страница входа в HTML5, которая запрашивает имя пользователя и пароль. Информация передается через POST на PHP для сравнения с данными в MySQL. Я пытаюсь повторить простую «ДА», если данные были успешно проверены и «НЕТ» в противном случае. Я хочу взять текстовое значение ответа и манипулировать им с помощью Javascript. Кажется, что все работает нормально, но когда переменная $ response встречается эхо, она показана сама по себе на пустой HTML-документе, и JavaScript никогда не выполняется. Ниже приводится код, я использую:Ошибка передачи переменных между PHP и Javascript

<ul> 
<li> 
<form action="login_submit.php" id="loginTest" method="post"> 
<span class="un"><i class="fa fa-user"></i></span><input type="text" id="maindata_email" name="maindata_email" value="" maxlength="40" required class="text" placeholder="Usuario"/></li> 
<li> 
<span class="un"><i class="fa fa-lock"></i></span><input type="password" id="maindata_password" name="maindata_password" value="" maxlength="10" required class="text" placeholder="Password"/></li> 
<li> 
<input type="hidden" name="form_token" value="<?php echo $form_token; ?>"> 
<div class="up"> 
<input type="submit" id ='ingresar' value="ingresar" class="btn"> 
<!--window.alert(5 + 6);--> 
</form> 
<script src="http://code.jquery.com/jquery-latest.js"></script> 
<script language="javascript"> 
    var myData = <?php echo json_encode($response); ?>; 
    window.alert(myData); 
    if (myData == "YES") { 
     alert("Usuario aceptado!"); 
     var href = 'http://index2.html'; 
     window.location=href; 
    } else { 
     alert("Usuario invalido!"); 
     var href = 'http://index.html'; 
     window.location=href;  
    } 
</script> 
<input type="submit" id = 'editar' value="editar" class="btn"> 
</form> 
</div> 

</li> 
</ul> 

А вот раздел PHP:

/*** bind the parameters ***/ 
     $stmt->bindParam(':maindata_email', $maindata_email, PDO::PARAM_STR); 
     $stmt->bindParam(':maindata_password', $maindata_password, PDO::PARAM_STR, 40); 

     /*** execute the prepared statement ***/ 
     $stmt->execute(); 

     /*** check for a result ***/ 
     $user_id = $stmt->fetchColumn(); 

     /*** if we have no result then fail boat ***/ 
     if ($user_id == false) 
     { 
       echo $response = "NO"; 
     } 
     /*** if we do have a result, all is well ***/ 
     else 
     { 
       /*** set the session user_id variable ***/ 
       $_SESSION['user_id'] = $user_id; 

       /*** tell the user we are logged in ***/ 
       echo $response = "YES"; 
     } 


    } 
    catch(Exception $e) 
    { 
     /*** if we are here, something has gone wrong with the database ***/ 
     $message = 'No se puede procesar su ingreso. Favor de intentar mas tarde.'."<br />\r\n"; 
    } 
} 

После нажатия на ingresar в HTML имя пользователя и пароль правильно отправленный и полученный РНР информация обрабатывается и сравнивается со значениями, содержащимися в базе данных MySQL, и я получаю правильный ответ при проверке. Может ли кто-нибудь объяснить, почему я получаю пустую страницу с ответом $, и код JavaScript никогда не выполняется ??? Thanx

+0

Что говорит ваш журнал ошибок? Ошибка 500 как код состояния? –

+0

у вас есть 1x '

' и 2x '
' теги, а также некоторый недостающий код для вашего PHP. –

+0

Вам нужно использовать AJAX, чтобы делать то, что вы хотите, для этого есть множество руководств, особенно с помощью jquery. – Steve

ответ

0

Ваш код, кажется, ведет себя так, как ожидалось. Ваша форма после отправки отправляет запрос POST в сервисный центр по адресу login_submit.php, а браузер отображает ответ с сервера, в котором вы эхом отзываете значение $response. На странице PHP нет javascript или HTML, поэтому javascript не будет запущен, и HTML не будет отображаться ... браузер просто отображает необработанное содержимое ответа POST из действия формы, поскольку оно просто интерпретируя его как текстовый ответ без разметки.

Теперь, что вы на самом деле хотите получить данные от ответа на веб-странице и запустить некоторый javascript, используя эти данные ответа. Есть несколько способов, которыми Вы могли бы решить эту проблему:

  1. Избегайте перезагрузки страницы с помощью методов AJAX для асинхронного запроса данных от сервера через login_submit.php. Когда данные возвращаются с сервера через некоторый неопределенный период времени, на странице вызывается обратный вызов javascript, который включает в себя действие для входящих данных ответа.
  2. На странице login_submit.php напечатана полная HTML-страница с встроенным на этой странице javascript, и вы заполняете переменные в полученном javascript из кода PHP, который запускает запрос MySQL.
  3. Возьмите страницу из форм ASP.NET и POST обратно на страницу, а не на отдельную страницу, и используйте PHP для обнаружения, когда произошла POST-обратная связь. Таким образом, весь код формы, MySQL-запрос и т. Д. Существует в одном документе PHP, а вы - POST на самой странице. Когда страница перезагружается из POST, она будет заполнять необходимые переменные javascript на странице правильными значениями.
+0

Спасибо Джейсон :) Если я правильно вас понимаю, вы предлагаете использовать AJAX для доступа к базе данных MySQL непосредственно из login2.php и выполнять проверку имени пользователя и пароля на одной странице с помощью XMLHttpRequest. Думаю, я мог бы это сделать, но это означало бы отбросить мой код login_submit.php, который работал отлично, пока я не попытался передать простое строковое значение с одной страницы php на другую. Неужели так сложно выполнить такую ​​простую задачу между сервером и клиентом? – Bernie

+0

Джейсон, вы предлагаете включить мой код js непосредственно в login_submit.php, который делает проверку базы данных вместо того, чтобы иметь ее в моем login2.php, где он сейчас? – Bernie

+0

Не могли бы вы быть немного более конкретными в отношении методов AJAX, которые я должен использовать? – Bernie