Я знаю, что этому сайту не нравится код «Найди мою ошибку», но я в отчаянии. У меня есть веб-сайт, которому необходимо получить доступ к пользовательским данным из базы данных (PHP), преобразовать данные в файл JSON, а затем изменить заголовок HTML для отображения этих конкретных данных. В таблице базы данных, помимо прочего, есть адрес электронной почты пользователя, пароль и имя класса. У меня есть страница входа в систему, которая устанавливает переменные сеанса для электронной почты и пароля. Когда пользователь входит в систему, я хочу, чтобы его имя класса было введено в текст HTML. Я использовал десятки источников, в основном W3schools, и придумал такой код:
PHP:
<?php
session_start();
header("Content-Type: application/json; charset=UTF-8");
$obj = json_decode($_GET["x"], false);
if (!$obj) {
die(mysqli_error());
}
$servername = "localhost";
$username = "id5143969_enviroquest1";
$password = "codeteam1";
$database = "id5143969_enviroquest1";
$link = mysqli_connect($servername, $username, $password, $database);
$result = $link->query("SELECT UserClassName FROM ".$obj->UserInfo1." WHERE ".$obj->UserEmail."= '". mysqli_real_escape_string($link,
$_SESSION['useremail']) . "' and ".$obj->UserPassword." = '" . mysqli_real_escape_string($link, $_SESSION['userpassword']) . "'");
if (!$result) {
die(mysqli_error());
}
$_SESSION['classname'] = $result->fetch_assoc();
if (!$_SESSION['classname']) {
die(mysqli_error());
}
echo json_encode($_SESSION['classname']);
Javascript:
function getclassname() {
var obj, dbParam, xmlhttp, myObj, x, txt = "";
obj = { "UserInfo1":"UserClassName"};
dbParam = JSON.stringify(obj);
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
myObj = JSON.parse(this.responseText);
document.getElementById("UserClassName").innerHTML = myObj;
}
};
xmlhttp.open("GET", "php2.php" + dbParam, true);
xmlhttp.send();
}
HTML:
<h1 class = "text-center" id = "UserClassName" name = "UserClassName" onload=
"getclassname()"> </h1>
Я понятия не имею, что происходит не так, и я слишком новичок в программировании, чтобы разобраться в этом самостоятельно.
Я добавил соответствующий html и другие данные о том, что мне нужно делать. Честно говоря, я не понимаю, что должна делать переменная obj, я просто собрал все вместе из существующего кода на этом сайте и w3schools, и это кажется необходимым. Также в javascript есть переменная obj



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуйте это (я не могу это проверить, но) -
PHP:
?> в конце файла. Файлы Pure-PHP всегда должны оставлять закрывающий тег.(MYSQLI_ASSOC) на () - для это и документы он вам не нужен.Javascript:
session_start()Изменять
for (x in myObj) {
txt += myObj[x].name + "<br>";
}
к
txt = myObj.UserClassName
Вызов fetch_assoc() в PHP дает вам отображение, которое использует имена полей базы данных («каждый ключ в массиве представляет имя одного из столбцов набора результатов» на документы) для одной строки. Следовательно, если кодирование / декодирование JSON работает нормально, вы должны иметь возможность напрямую обращаться к полю.
Чтобы проверить это, в инструментах разработчика установите точку останова на строке txt = ... и посмотрите, что такое myObj.
Я не думаю, что вам нужны $obj, dbParam или ?x=, но я бы не предлагал их менять, если только вышеперечисленное не поможет.
Удачи!
Спасибо за предложения, к сожалению, код все еще не работает.
@ Mekade24 Какие ошибки вы получаете в PHP или JavaScript? Вы пробовали проверить myObj в отладчике браузера?
Я не получаю никаких ошибок в конце PHP или Javascript. Я не знаю, как установить точку останова или использовать отладчик браузера. Программирую меньше недели.
@ Mekade24 А! Взгляните на это руководство для Chrome или это для Firefox. Я бы посоветовал оставить этот вопрос открытым, пока вы не изучите инструменты и не получите немного дополнительной информации. Удачи!
Даже с учебником я не могу заставить работать отладчик браузера, и у меня действительно нет времени изучать совершенно новую программу. То есть я получил этот код буквально буква в букву от w3schools. В этом коде должна быть обнаруженная ошибка. Веб-сайты получают подобную информацию постоянно, поэтому способ ее получения должен быть популярным и легко воспроизводимым. Я не могу понять, почему нигде нет ответа на эту, казалось бы, простую функцию.
Я понимаю, что вы разочарованы; это совершенно законно. Я дал тебе то, что у меня есть. Одна общая мысль - в программировании, данные часто важнее кода. Знание значения myObj в момент установки txt, вероятно, сделает ошибку очевидной, но без этого я бы предположил, пошел ли я дальше. Я говорю о том, что «идентифицируемая ошибка» не обязательно совпадает с «идентифицируемой ошибкой без труда» :).
Я понимаю. Спасибо за вашу помощь, я просто буду продолжать что-то менять и, надеюсь, что-то щелкнет.
Добро пожаловать на сайт! Ознакомьтесь с тур и страница с инструкциями, чтобы узнать больше о том, как задавать вопросы, на которые можно получить качественные ответы. Вы можете отредактируйте свой вопрос, чтобы включить дополнительную информацию. Что происходит и чего, по вашему мнению, должно произойти? Кроме того, не могли бы вы добавить соответствующие части вашего HTML? Я отмечаю, что ваш PHP-код никогда не использует
$objпосле его декодирования.