[英]Php login work only when mysqli_num_rows equal to Zero, otherwise doesn't work.I am stuck
[英]Getting wrong array length with jQuery and mysqli_num_rows()
我正在使用jQuery向数据库表中添加新数据。 然后我从该表中获取所有内容。 问题是我每个奇怪的时间都会得到错误的数组大小。如果我刷新页面它的数组大小正确,但是当我点击带有jQuery函数的按钮时,它们都搞砸了。
我弄清楚了
$n = mysqli_num_rows($result);
已经返回错误的行数
这是脚本:
$(document).ready(function(){
$.getallentries = function(){
$.getJSON("entries.php",{action : "getall"},function(data) {
var content_array = $.map(data, function(e) { return e;});
console.log(content_array.length); // to check array size
});
$.addstatic = function(){
$.post("entries.php",{action : "addstatic"});
};
};
$("#adds").on("click",function(){
$.addstatic();
$.getallentries();
});
$.getallentries();
这里是entries.php:
function getall(){
$link = db_connect();
$query= "SELECT * FROM jq";
$result = mysqli_query($link,$query, MYSQLI_STORE_RESULT);// Smart people said MYSQLI_STORE_RESULT should help but it didn't
$n = mysqli_num_rows($result);
for($i = 0 ;$i<$n;$i++)
{
$row=mysqli_fetch_assoc($result);
$b[]=$row;
}
echo json_encode(array($b));
}
function addstatic(){
$link = db_connect();
$statin_Entry = "Static Entry";
$query = "INSERT INTO jq (Entry) VALUES ('$statin_Entry')";
$result = mysqli_query($link,$query);
}
if(isset($_GET['action']) && !empty($_GET['action'])) {
$action = $_GET['action'];
switch($action) {
case 'getall' : getall(); break;
}
}
else {
if(isset($_POST['action']) && !empty($_POST['action'])) {
$action = $_POST['action'];
switch($action) {
case 'addstatic' : addstatic();break;
case 'removelast' : removelast();break;
// ...etc...
}
}
}
所以问题再次出现,相同的数组大小为143,146,151,其中156是??
你应该在$.addstatic
AJAX调用的回调函数中调用$.getallentries
,以便它在$.addstatic
完成数据库更新后运行。
$.addstatic = function(){
$.post("entries.php",{action : "addstatic"}, $.getallentries);
};
在获取行之前无需使用mysqli_num_rows
。 你应该使用这样的循环:
while ($row = mysqli_fetch_assoc($result)) {
$b[] = $row;
}
此外,您将数组包装在另一个数组中。 做就是了:
echo json_encode($b);
你编写它的方式, console.log(content_array.length)
应该总是记录1
,我不明白你是如何获得更高的数字。 您确定发布了实际代码吗?
使用$.map
是没有意义的,它所做的只是制作data
数组的副本。 只需使用data
本身。
在PHP中,您不需要同时测试isset()
和!empty()
,因为empty()
检查是否先设置了变量。
您不需要使用MYSQLI_STORE_RESULT
,它是该选项的默认值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.