Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.07.2017, 15:00   #1
SnapeEye
Пользователь
 
Регистрация: 08.11.2014
Сообщений: 43
Лампочка Нет возврата после выполнения запроса к базе MySQL

Доброго времени суток!

Пишу механизм авторизации (login). В качестве хранилища использую базу MySQL. Суть проблемы в том, что получаю после обработки запроса (в php фрагменте кода) в качестве возвращаемого значения (http.responseText) идет пустая строка.

Если кто подскажет в чем проблема - буду премного благодарен!

Вот мои методы, обрабатывающие данные входа (JavaScript).
Код:
var http = new XMLHttpRequest();

// Sign in to an account
function signIn(mail,pass){
  var email = encodeURI(mail);
  var psw = encodeURI(pass);

  var nocache = 0;
  noncache = Math.random();

  http.open('get', 'login.php?email='+email+'&psw='+psw+'&nocache = '+nocache);
  http.onreadystatechange = signInReply;
  http.send(null);
}
// Reaction on signIn 'over' state
function signInReply(){
  if(http.readyState == 4){ 
    var response = JSON.parse(http.responseText); // ТУТ ОШИБКА! аргументом идет пустая строка
    if(response == null){
      // if login fails
      document.getElementById('regStatus').innerHTML = 'Login failed! Verify user and password.';
      // else if login is ok
    } else {
      setUser(response);
      document.getElementById('regStatus').innerHTML = '';
      rebuild('toDo');
    }
  }
}
Вспомогательные файлы на PHP:
login.php
PHP код:
<!— Include Database connections info. —>
<?php include('config.php');

// Verify if user exists for login
if(isset($_GET['email']) && isset($_GET['psw'])){

$email $_GET['email'];
$psw $_GET['psw'];

$getUser_sql 'SELECT * FROM USERS WHERE email="'$email '" AND psw = "' $psw '"';
$getUser  mysql_query($getUser_sql);
$getUser_result =  mysql_fetch_assoc($getUser);
$getUser_RecordCount mysql_num_rows($getUser);

if(
$getUser_RecordCount 1){
  echo 
'0';
} else {
    
$obj = array('id' => $getUser_result['id'], 'fname' => $getUser_result['fname'], 'lname' => $getUser_result['lname']);
    
$jsonObj json_encode(objJSON_FORCE_OBJECT);
  echo 
$jsonObj;
}
}
?>
config.php
PHP код:
<?php
// Connection's Parameters
$db_host="localhost";
$db_name="toDoRegBase";
$username="root";
$password="";
$db_con=mysql_connect($db_host,$username,$password);
$connection_string=mysql_select_db($db_name);
// Connection
mysql_connect($db_host,$username,$password);
mysql_select_db($db_name);
?>
SnapeEye вне форума Ответить с цитированием
Старый 05.07.2017, 15:33   #2
Igor[Игорь]
Пользователь
 
Аватар для Igor[Игорь]
 
Регистрация: 25.11.2011
Сообщений: 52
По умолчанию

а если зарпос отправить с браузера тоже пустое приходит?
e-mail: igor23dec@yandex.ru , ICQ: 2168364 , Telegram: @IgorVN
Delphi, PHP
Примеры http://igorvn.ucoz.ru/
Igor[Игорь] вне форума Ответить с цитированием
Старый 05.07.2017, 16:01   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от SnapeEye Посмотреть сообщение
Суть проблемы в том, что получаю после обработки запроса (в php фрагменте кода) в качестве возвращаемого значения (http.responseText) идет пустая строка.
я бы начал с того, что выкинул левую строчку из PHP:

Цитата:
Сообщение от SnapeEye Посмотреть сообщение
<!—*Include*Database*connections*in fo.*—>
во-вторых,
оставьте (для отладки) такой код в login.php:
Код:
<?php 
// Verify if user exists for login 
if(isset($_GET['email']) && isset($_GET['psw'])){ 

  $email = $_GET['email']; 
  $psw = $_GET['psw']; 

  echo json_encode(array('id' => '-1', 'send_email'=>$email, 'send_psw'=>$psw)); 
} 
?>
в JS добавьте вывод полученного объекта в консоль:
Код:
function signInReply(){
  if(http.readyState == 4){ 
    var response = JSON.parse(http.responseText);
    console.log(response);
....
я проверил. у меня всё работает.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.07.2017, 16:27   #4
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,158
По умолчанию

Цитата:
var nocache = 0;
noncache = Math.random();
разные переменные.... (на заметку)
SQL иньекции так же запрос подвержен
а так - может не находит записей вот и отдает 0.... хотя скрипт как бы ожидает json
вот вам и пустая строка
ADSoft вне форума Ответить с цитированием
Старый 05.07.2017, 16:31   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
разные переменные.... (на заметку)
в точку. я проглядел это.


Цитата:
Сообщение от ADSoft Посмотреть сообщение
SQL иньекции так же запрос подвержен
да, об этом я срззу подумал.
но решил раньше времени TC не расстраивать...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.07.2017, 16:56   #6
SnapeEye
Пользователь
 
Регистрация: 08.11.2014
Сообщений: 43
По умолчанию

С nocache увидел свою ошибку, спасибо.

Однако всё равно не работает. На строчке
Код:
http.send(null);
в методе signIn получаю такую ошибку:
XMLHttpRequest cannot load file:///E:/Eclipse%20Workspace/js/reg_sign_todo/login.php?email=root@admin.me&psw=r oot&nocache%20=%200.798257876880366 1. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.

Также, можете, пожалуйста, объяснить как получить из php части необходимый мне объект json в js?

P.S. использую СУБД XAMPP и его mysql. Запрашиваемые мною данные были скопированы из одной из записей, так что запись там точно есть.
SnapeEye вне форума Ответить с цитированием
Старый 05.07.2017, 17:09   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от SnapeEye Посмотреть сообщение
XMLHttpRequest cannot load file:///E:/Eclipse%20Workspace/js/reg_sign_todo/login.php?
так файл же с сервера нужно открывать.
для отладки можно использовать локальный сервер.
Вы какой сервер для отладки PHP кода используете?

если я не прав и у Вас есть сервер, тогда укажите в load путь к вашему login.php
например, пусть на сервере login.php лежит в корневой папке.
тогда:
Код:
  http.open('get', '/login.php?email='+email+'&psw='+psw+'&nocache = '+nocache);
а ещё, судя по всему, Вы неправильно вызываете метод Open
согласно документации, чтобы получить ассинхронный вызов, нужно в Open использовать третий параметр:
Код:
http.open('GET', '/login.php?email='+email+'&psw='+psw+'&nocache = '+nocache, true);

p.s. а вообще, конечно, забавно.
сначала всё работает. проблема только в пустой строке.
потом, вдруг, БАЦ и
Цитата:
Сообщение от SnapeEye Посмотреть сообщение
Однако всё равно не работает. На строчке .... в методе signIn получаю такую ошибку:
XMLHttpRequest cannot load
что произошло? почему до этого http.send работал?

Последний раз редактировалось Serge_Bliznykov; 05.07.2017 в 17:18.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.07.2017, 17:17   #8
SnapeEye
Пользователь
 
Регистрация: 08.11.2014
Сообщений: 43
По умолчанию

.html, .js и .php файлы у меня лежат в одной папке.

Строку изменил на:
Код:
http.open('get', '/login.php?email='+email+'&psw='+psw+'&nocache = '+nocache);
Однако получаю ту же ошибку...

И http.send(null) сначала не работал вроде бы...
SnapeEye вне форума Ответить с цитированием
Старый 05.07.2017, 17:23   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

перечитайте мой пост выше. я там кое-что дописал насчёт метода Open (ассинхронный вызов)

Цитата:
Сообщение от SnapeEye Посмотреть сообщение
.html, .js и .php файлы у меня лежат в одной папке.
Какой у Вас локальный сервер для работы PHP скриптов запущен?

Вы же, надеюсь, понимаете, что сам по себе PHP код не выполнится, его должен обработать сервер, поддерживающий выполнение PHP скриптов?

По этой ссылке (Самые основы. Как работает PHP.) Вам всё понятно?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.07.2017, 17:34   #10
SnapeEye
Пользователь
 
Регистрация: 08.11.2014
Сообщений: 43
По умолчанию

Увидел Ваши правки, внес недостающее.

Вообщем (как я понял) мне нужно ещё запустить сервер (локальный например) с моими php файлами. Так?)

P.S. первый раз столкнулся с php...
SnapeEye вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
После выполнения запроса dbgrid пустеет Kef1r БД в Delphi 5 14.05.2016 03:16
Ускорение выполнения запроса MySQL Gulik БД в Delphi 8 05.09.2011 22:16
После выполнения запроса появляется ошибка Lokos БД в Delphi 3 23.06.2011 08:33
Окно после выполнения запроса mortal2010 Microsoft Office Access 6 25.02.2011 13:18
Два запроса к базе MySQL mixer94 PHP 12 28.10.2010 18:44