2017-06-29 75 views
0

我正在寻找解决方案如何从MySQL数据库创建json文件。下面是一个代码:Json文件创建

*

<!DOCTYPE html> 
<html> 
<body> 
<p id="container"></p> 
<script> 
var obj, dbParam, xmlhttp, myObj, x, txt = ""; 
obj = { "table":"produkty", "limit":10 }; 
dbParam = JSON.stringify(obj); 
xmlhttp = new XMLHttpRequest(); 
xmlhttp.onreadystatechange = function() { 
    if (this.readyState == 4 && this.status == 200) { 
     myObj = JSON.parse(this.responseText); 
     for (x in myObj) { 
      txt += myObj[x].name + "<br>"; 
     } 
     document.getElementById("demo").innerHTML = txt; 
    } <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> 
}; 
xmlhttp.open("POST", "test4.php", true); 
xmlhttp.setRequestHeader("Content-type", "text/xml"); 
xmlhttp.send("x=" + dbParam); 
</script> 
<?php 
header("Content-Type: application/json; charset=UTF-8"); 
$obj = json_decode($_POST["x"], false); 

$conn = new mysqli("localhost", "root", "", "projekt_1"); 
$result = $conn->query("SELECT produkt FROM ".$obj->table." LIMIT ".$obj->limit); 
$outp = array(); 
$outp = $result->fetch_all(MYSQLI_ASSOC); 
echo json_encode($outp); 
?> 
</body> 
</html> 

*

在JSON文件我recievied信息:

<br /> 
<b>Notice</b>: Undefined index: x in <b>C:\xampp\htdocs\projekt_1\test4.php</b> on line <b>31</b><br /> 
<br /> 
<b>Notice</b>: Trying to get property of non-object in <b>C:\xampp\htdocs\projekt_1\test4.php</b> on line <b>34</b><br /> 
<br /> 
<b>Notice</b>: Trying to get property of non-object in <b>C:\xampp\htdocs\projekt_1\test4.php</b> on line <b>34</b><br /> 
<br /> 
<b>Fatal error</b>: Call to a member function fetch_all() on boolean in <b>C:\xampp\htdocs\projekt_1\test4.php</b> on line <b>36</b><br /> 

不知道在哪里是错误的。我很新,所以我的问题很明显。

在此先感谢。

我在这个论坛新的,我应该以前也检查回答我的问题,但是当我包括在该建议如下面的代码,并在Apache的白色屏幕运行说到。我已经从数据库中预测了前10行。我已经检查了白色屏幕出现时可以完成的步骤。它包含在一个文件中test4.php整个代码:

<?php 
ini_set('display_errors', 1); error_reporting(~0); 
?> 

<!DOCTYPE html> 

<html lang="pl"> 
<head> 
    <meta charset="utf-8" /> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> 
    <title>Test file</title> 
    <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> 

</head> 

<body> 

<p id="container"></p> 

<script> 
var obj, dbParam, xmlhttp, myObj, x, txt = ""; 
obj = { "table":"produkty", "limit":10 }; 
dbParam = JSON.stringify(obj); 
xmlhttp = new XMLHttpRequest(); 
xmlhttp.onreadystatechange = function() { 
    if (this.readyState == 4 && this.status == 200) { 
     myObj = JSON.parse(this.responseText); 
     for (x in myObj) { 
      txt += myObj[x].name + "<br>"; 
     } 
     document.getElementById("container").innerHTML = txt; 
    } 
}; 
xmlhttp.open("POST", "test4.php", true); 
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
xmlhttp.send("x=" + dbParam); 

</script> 

<?php 

if (count($_POST)) { 
    header("Content-Type: application/json; charset=UTF-8"); 
    $obj = json_decode($_POST["x"], false); 

    $conn = new mysqli("localhost", "root", "", "projekt_1"); 
    $result = $conn->query("SELECT produkt FROM ".$obj->table." LIMIT ".$obj->limit); 
    $outp = array(); 
    $outp = $result->fetch_all(MYSQLI_ASSOC); 
    echo json_encode($outp); 
} 
?> 


</body> 
</html> 
+5

所有这些错误消息已经讨论了很多次,所以请去_research_他们。 – CBroe

+2

这是一个文件吗?你应该有一个单独的脚本,用于你的ajax调用,它只输出json而不是其他东西。 – jeroen

+0

也显示test4.php。 – YvesLeBorg

回答

1

您启动POST要求甚至在此之前,您试图访问$_POST阵列。所以你需要检查一下。

<?php 
if (count($_POST)) { 
    header("Content-Type: application/json; charset=UTF-8"); 
    $obj = json_decode($_POST["x"], false); 

    $conn = new mysqli("localhost", "root", "", "projekt_1"); 
    $result = $conn->query("SELECT produkt FROM ".$obj->table." LIMIT ".$obj->limit); 
    $outp = array(); 
    $outp = $result->fetch_all(MYSQLI_ASSOC); 
    echo json_encode($outp); 
} 
?> 
</body> 

这样的header和其他的东西得到执行,只有当它发现全球$_POST阵列中的任意内容。这也意味着该页面通过POST方法请求。