
14.04.2019, 02:13
|
Интересующийся
|
|
Регистрация: 01.10.2017
Сообщений: 19
|
|
Не понятен результат XMR
Добрый день:
Есть вот так вот реализованный XMR:
/* XHR возвращающий промис */
function xhr(body, target) {
return new Promise(function (resolve, reject) {
let xhr = new XMLHttpRequest();
xhr.open('POST', target, true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send(body);
xhr.onreadystatechange = function () {
if (xhr.status == 200 && xhr.readyState == 4) {
// вывести результат
console.log(xhr.responseText);
resolve(xhr.responseText)
} else if (xhr.status !== 200) {
// обработать ошибку
console.log('ERROR: ' + xhr.status + ': ' + xhr.statusText); // пример вывода: 404: Not Found
reject('Error')
}
}
})
}
которым я обращаюсь к php файлу следующего вида:
<?
include '\SQL_conn.php';
$dataName=mysql_real_escape_string($_POST['data-name']);
$query = "SELECT * FROM zvkb where Self=" .$dataName ;
$result = mysql_query($query);
if ($result) {
while ($row = mysql_fetch_array($result)) {
if(mysql_num_rows($result) > 0){
$Self = $row["Self"];
$Enemy = $row["Enemy"];
echo "Self: " . $Self . " | Enemy:" . $Enemy . "<br>";
}
else {
echo '';
}
}
}
mysql_close();
?>
Суть вопроса:
При условии что mysql вернет данные, все работает корректно, но при пустом результате запроса xhr.responseText почему то принимает значение 2*"перенос строки", что ставит меня в тупик(ведь по моей логике должено вернуться ''). Подскажите в чем может быть проблема/
|
|

14.04.2019, 04:09
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Maklay
|
едь по моей логике должено вернуться ''
|
Вот с логикой как раз и плохо - сначала проверяют сколько рядов вернул запрос, а затем принимают решение есть ли смысл в цикле.
Выражение if(), это проверка булевого значения, а mysql_num_rows кроме чисел ничего не возвращает, и 0, это false, а больше 0, это true. То есть вполне хватит if(mysql_num_rows($result)).
mysql_fetch_array($result) - вернет два набора, индексный и ассоциативный. А зачем, если первый вам не нужен?
$Self = $row["Self"]; и $Enemy = $row["Enemy"]; - это бесполезные операции в данном случае.
Оригинальное расширение MySQL в новых версиях РНР больше не поддерживается, как минимум нужно использовать mysqli.
|
|

19.04.2019, 00:51
|
Интересующийся
|
|
Регистрация: 01.10.2017
Сообщений: 19
|
|
Благодарю, переписал на mysqli в объектном стиле, и по пути исправил ошибки и нелогичности.
Но продолжу пожалуй задавать вопросы в этой теме, чтобы не плодить их далее. С помощью того же XMR отправляю вот такой запрос:
ps=0&id=46&name=gfh&points=230%2C96%20375%2C108&commPointX=308&commPointY=103
вот его вид без сериализации текстовой части:
ps=0&id=46&name=gfh&points=230,96 375,108&commPointX=308&commPointY=103
в адрес другого php файла. Но, почему то в переменную $_POST, не попадают значения из commPointX и commPointY (остальные корректно попадают). В чем может быть проблема.
Заранее благодарен.
Последний раз редактировалось Maklay, 19.04.2019 в 00:54.
|
|

19.04.2019, 05:05
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Трудно сказать в чем вы допускаете косяк. Вообще пробелы и запятые будут кодированы как раз так, как запросе:
alert(encodeURIComponent('230,96 375,108'))
а на сервере будут декодированы и проблем не будет.
Здесь нет явного кодирования, но тем не менее на сервер все уйдет как положено, выполните и в ответ получите переданное.
<?
if($_POST) {
exit(print_r($_POST, 1));
}
?>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<script type="text/javascript">
var xhr = new XMLHttpRequest();
xhr.open('POST', location);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send('ps=0&id=46&name=gfh&points=230,96 375,108&commPointX=308&commPointY=103');
xhr.onload = function() {
alert(xhr.responseText)
}
</script>
</body>
</html>
|
|

19.04.2019, 08:17
|
Интересующийся
|
|
Регистрация: 01.10.2017
Сообщений: 19
|
|
Полный вывод $_POST, показывает что на месте этих переменных пустые строки.
|
|

19.04.2019, 09:04
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Maklay
|
Полный вывод $_POST
|
Где, в вашем коде или при запуске скрипта что я показал (отдельно)?
|
|

19.04.2019, 10:17
|
Интересующийся
|
|
Регистрация: 01.10.2017
Сообщений: 19
|
|
Проверил у себя в файле. Для чистоты эксперимента запущу предложенный. Но, так как он ничем не отличается по сути, а массив $_POST нигде не меняется, сомневаюсь что результат будет иным.
|
|

19.04.2019, 10:49
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Maklay
|
Но, так как он ничем не отличается по сути
|
То что в отдельном файле работает без проблем, по крайней мере и на локальном сервере у меня, и на удаленном. Собственно проверить можно гораздо проще, запустив любой php файл с простым кодом и добавив в url ?ps=0&id=46&name=gfh&points=230%2C96%20375%2C108&c ommPointX=308&commPointY=103:
<?
echo '<pre>';
print_r($GET);
И никаких проблем быть не должно, а если есть, то это уже настройки сервера.
|
|

21.04.2019, 22:08
|
Интересующийся
|
|
Регистрация: 01.10.2017
Сообщений: 19
|
|
Действительно проблема была в сервере (в чем причина не понял), при переустановке openserver? все стало работать как часы.
|
|
|
|