我知道这个网站不喜欢“发现我的错误”代码,但我很绝望。我有一个网站需要从数据库 (PHP) 访问特定于用户的数据,将数据转换为 JSON 文件,然后更改 HTML header 以显示该特定数据。数据库表包含用户电子邮件、密码和类名等。我有一个登录页面,用于为电子邮件和密码建立 session 变量。当用户登录时,我希望将他们的类名输入到 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>
我不知道出了什么问题,而且我对编码太陌生,无法自己解决。
最佳答案
试试这个(我无法测试,但是)—
PHP:
Javascript:
- 删除
session_start()
调用 改变
for (x in myObj) { txt += myObj[x].name + "<br>"; }
到
txt = myObj.UserClassName
PHP 中的
fetch_assoc()
调用为您提供了一个使用数据库字段名称的映射(根据 the docs,“数组中的每个键代表结果集列之一的名称”)对于单行。因此,如果 JSON 编码/解码工作正常,您应该能够直接引用该字段。
要对此进行测试,请在开发人员工具中,在 txt = ...
行设置一个断点,然后查看 myObj
是什么。
我认为您不需要 $obj
、dbParam
或 ?x=
,但我不建议更改它们,除非以上没有帮助。
祝你好运!
关于javascript - 通过 PHP、JSON 和 Javascript 将用户特定数据插入 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49466941/