我正在尝试创建各种地址簿。
我可以成功连接到数据库并使用php脚本插入数据。
我甚至设法显示我的表行的json编码数据,但我不知道我是否做得对。
我实际想要完成的任务:
我还想知道尝试将HTML返回到ajax调用是否更好,并将数据输入到html输入字段中?
到目前为止,我的成功有限,但到目前为止我已经有了......
我有一个数据库连接脚本:
$host = "localhost";
$user = "user";
$pass = "pass";
$db = "data_base";
$mysqli = new mysqli($host, $user, $pass, $db);
if($mysqli->connect_error)
die('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error());
return $mysqli;
包含以下列的mysql ISAM DB:
id, user, pass, nickname, address, facebook, twitter, linkedin, youtube
ID should be unique
User is an index
Pass is an index
nickname is an index
address is primary - though its possible that id should be...
Facebook, Twitter, Linkedin, and Youtube are all indexes.
注意:我很乐意改变索引,主要等等,因为有人认为合适......
已编辑!**现在是我的查询页面:
error_reporting(E_ALL); ini_set("display_errors", 1);
include 'db/dbcon.php';
//Start connection with SQL
$q = "SELECT * FROM `cfaddrbook` WHERE key = '111111'";
$res = $mysqli->query($q) or trigger_error($mysqli->error."[$q]");
$array = array(); // initialize
while($row = $res->fetch_array(MYSQLI_BOTH)) {
$array[] = array(
'key' => $row[0],
'username' => $row[1],
// ... continue like this
);
}
header('Content-Type: application/json');
echo json_encode($array);
$res->free();
$mysqli->close();
现在,上面的脚本似乎运行正常。至少它在浏览器中加载php页面时显示正常。
但是当我用这个脚本进行ajax调用时:
$(document).ready(function(){
$.ajax({
type: "POST",
url: "queries.php",
dataType: 'json',
data: "",
cache: false,
success: function(result)
{
var cfkey = result[0];
var user = result[1];
alert("cfkey:" + cfkey + "user:" + user);
}
});
});
加载此代码后,chrome控制台会指出服务器返回错误500。
再次,我想要完成的任务:
修改 最后发现我与Majid讨论的问题是SQL查询。 key需要包含在`characters。
中答案 0 :(得分:1)
执行查询后结果集在$res
中可用时,您可以构建阵列,不需要单独的foreach:
$array = array(); // initialize
while($row = $res->fetch_array(MYSQLI_BOTH)) {
$array[] = array(
'id' => $row[0],
'username' => $row[1],
'password' => $row[2],
'nick' => $row[3],
'addr' => $row[4],
'facebook' => $row[5],
'twitter' => $row[6],
'linkedin' => $row[7],
'youtube' => $row[8]
);
}
header('Content-Type: application/json');
echo json_encode($array);
另请注意,这样,您的json将拥有密钥,因此要使用密钥,您应该更改:
success: function(result) {
var cfkey = result[0];
var user = result[1];
alert("cfkey:" + cfkey + "user:" + user);
}
到
success: function(result) {
var cfkey = result.id;
var user = result.username;
alert("cfkey:" + cfkey + "user:" + user);
}
或者只是做
$.getJSON('queries.php', {cfkey: $("#cfkey").val()}, function(result) {
// we have multiple results
$.each(result, function(i,r) {
console.log("cfkey:" + r.key + "user:" + r.username);
});
});
编辑:@amurrell指出添加标题
答案 1 :(得分:0)
我相信你期望query.php返回json(到你的ajax),因此你需要在queries.php中使用内容头类型!
header('Content-Type: application/json');
答案 2 :(得分:0)
您需要更多有用的错误消息。尝试在代码的开头添加以下行。
的error_reporting(E_ALL); ini_set(“display_errors”,1);
答案 3 :(得分:0)
您输出JSON的脚本正在编写几个有效的JSON字符串(每个数据库行一个),但它们不会添加到有效的JSON文件中。 JSON文件应该代表一个JSON对象。
如果要传递ID并返回一个数据库行,则必须将该ID添加到AJAX调用的data
部分,并修改queries.php以从其{{1}传递该ID数组进入MySQL查询的$_POST
部分。然后,您只输出一个JSON编码的对象而不是多个,这将是一个有效的JSON文件。
(或者,如果您想要整个表格,则可以单独WHERE
整个json_encode()
数组,而不是每个$rows
数组。)
另外,如果您在PHP中使用$row
字符串索引数组,则按名称而不是索引在Javascript中读取其属性。您已经遇到了在PHP中命名密钥的麻烦,然后切换回尝试通过Javascript中基于0的索引引用它们。你可以选择一种方式,但你只能选一种!