Вставка пользовательских данных в HTML с помощью PHP, JSON и JavaScript

Я знаю, что этому сайту не нравится код «Найди мою ошибку», но я в отчаянии. У меня есть веб-сайт, которому необходимо получить доступ к пользовательским данным из базы данных (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? Я отмечаю, что ваш PHP-код никогда не использует $obj после его декодирования.

cxw 24.03.2018 17:12

Я добавил соответствующий html и другие данные о том, что мне нужно делать. Честно говоря, я не понимаю, что должна делать переменная obj, я просто собрал все вместе из существующего кода на этом сайте и w3schools, и это кажется необходимым. Также в javascript есть переменная obj

Mekade24 24.03.2018 17:53
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
2
44
1

Ответы 1

Попробуйте это (я не могу это проверить, но) -

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 24.03.2018 18:17

@ Mekade24 Какие ошибки вы получаете в PHP или JavaScript? Вы пробовали проверить myObj в отладчике браузера?

cxw 24.03.2018 18:24

Я не получаю никаких ошибок в конце PHP или Javascript. Я не знаю, как установить точку останова или использовать отладчик браузера. Программирую меньше недели.

Mekade24 24.03.2018 18:41

@ Mekade24 А! Взгляните на это руководство для Chrome или это для Firefox. Я бы посоветовал оставить этот вопрос открытым, пока вы не изучите инструменты и не получите немного дополнительной информации. Удачи!

cxw 24.03.2018 18:51

Даже с учебником я не могу заставить работать отладчик браузера, и у меня действительно нет времени изучать совершенно новую программу. То есть я получил этот код буквально буква в букву от w3schools. В этом коде должна быть обнаруженная ошибка. Веб-сайты получают подобную информацию постоянно, поэтому способ ее получения должен быть популярным и легко воспроизводимым. Я не могу понять, почему нигде нет ответа на эту, казалось бы, простую функцию.

Mekade24 24.03.2018 19:20

Я понимаю, что вы разочарованы; это совершенно законно. Я дал тебе то, что у меня есть. Одна общая мысль - в программировании, данные часто важнее кода. Знание значения myObj в момент установки txt, вероятно, сделает ошибку очевидной, но без этого я бы предположил, пошел ли я дальше. Я говорю о том, что «идентифицируемая ошибка» не обязательно совпадает с «идентифицируемой ошибкой без труда» :).

cxw 24.03.2018 19:24

Я понимаю. Спасибо за вашу помощь, я просто буду продолжать что-то менять и, надеюсь, что-то щелкнет.

Mekade24 24.03.2018 19:27

Другие вопросы по теме