Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 表的ajax查询结果不一致_Php_Ajax - Fatal编程技术网

Php 表的ajax查询结果不一致

Php 表的ajax查询结果不一致,php,ajax,Php,Ajax,注意-很抱歉最初的标题错了-这是一个不同的问题,我试图在不发帖的情况下解决 我想问你两个关于从php文件调用返回数据的简单问题。 多亏了这个论坛,我对在HMTL中编写PHP代码以将数据保存到db表以及从表中检索数据非常有信心 但是现在,在一个页面上,我需要将数据添加到表中,从表中检索数据,然后更新数据,所有这些都不需要刷新HTML屏幕。因此,我用一个MySQL表(6个字段)、一个用纯php编写的“后端”,以及一个用HTML和JavaScript编写的“前端”,创建了一个小的“测试”环境 昨天一整

注意-很抱歉最初的标题错了-这是一个不同的问题,我试图在不发帖的情况下解决

我想问你两个关于从php文件调用返回数据的简单问题。 多亏了这个论坛,我对在HMTL中编写PHP代码以将数据保存到db表以及从表中检索数据非常有信心

但是现在,在一个页面上,我需要将数据添加到表中,从表中检索数据,然后更新数据,所有这些都不需要刷新HTML屏幕。因此,我用一个MySQL表(6个字段)、一个用纯php编写的“后端”,以及一个用HTML和JavaScript编写的“前端”,创建了一个小的“测试”环境

昨天一整天,我都在拔我剩下的一点点头发,但最终还是想出了将数据从php文件传递回html/javascript文件的概念(我将给出下面的所有代码)。 整件事做得很好但不一致-因此使用以下步骤进行了实验:

  • 前端的ftp上传
  • 后端ftp上传
  • 在IE上刷新前端2x
  • 在输入框中输入数字“150”。(“150”是行号
    对于Jimi Hendrix:-))
  • 单击表单上的“提交”按钮。(在这个实验中,我从来没有 使用“回车”键)
  • 如果有效,会弹出一条写有Jimi Hendrix的警报
  • 如果它不起作用-什么也不会弹出
下面是两个实验的结果Y=Jimi Hendrix N=no弹出框

  • 刷新
  • 是的,是的,是的,是的,是的
  • 刷新
  • 是的,是的
我真的看不出常规什么时候起作用。 我已经看到这个行为是我关于保存到db的其他一些代码

现在我有两个问题:

  • 你能解释一下这个代码是如何工作的吗?无论如何我 我能修好它吗
  • 我把吉米·亨德里克斯关在一个“警报”框里,但你会用什么命令把他关在一个分区里? 负载还是其他命令
以下是PHP文件:

<?php
$localid = $_POST['localid'];

$host = "hostname";
$user = "username";
$password = "password";
$dbname = "dbname";

$cxn = mysqli_connect($host,$user,$password,$dbname);
if (mysqli_connect_errno()) {echo "No connection" . mysqli_connect_error();}

$query = " select * from testtable where localid = $localid ";
$result = mysqli_query($cxn, $query) or die ("could not query database 1");

while ($row = mysqli_fetch_array($result))
{
 $firstname = $row['firstname'];
 $lastname = $row['lastname'];
 $zip = $row['physzip'];
 $gender = $row['gender'];
 $dob = $row['dob'];
}

$variablestopass = array
(
    'ln' => $lastname,
    'fn' => $firstname,
    'zip' => $zip,
    'gender' => $gender,
    'dob' => $dob 
);
echo json_encode($variablestopass);                     
?>

这是“前端”(不带标题):


本地化:
$(文档).ready(函数(e){
$(“#提交按钮”)。单击(函数(){
var localid=document.getElementById(“localid”).value;
$.ajax({
类型:“POST”,
url:“testajaxbackend.php”,
数据:{localid:localid},
数据类型:“json”,
成功:功能(结果){
警报(结果['fn']+结果['ln']+结果['zip']+结果['gender']+结果['dob']);
},
错误:函数(){alert(“error”);}
});//ajax调用结束
});//单击结束
});//准备好了吗
我事先感谢你可能提供的任何帮助。
PS-我还介绍了这一点,以防我的暴力代码可能会帮助其他noob。

如果您想使用Ajax,您必须将表单提交放在一边。你不能两者都用。这将是混乱的。单击submit按钮时,将重新加载,ajax上下文将丢失

将按钮更改为:

如果愿意,可以删除
表单
标记

为了安全起见,请将您的PHP更改为:

<?php
$localid = $_POST['localid'];

if (!is_numeric($localid)) { echo "Error!"; exit; }// Prevention of SQL injection

$host = "hostname";
$user = "username";
$password = "password";
$dbname = "dbname";

$cxn = mysqli_connect($host,$user,$password,$dbname);
if (mysqli_connect_errno()) {echo "No connection" . mysqli_connect_error(); exit;}

$localid = mysqli_real_escape_string($localid, $cxn); // Double prevention of SQL injection

$query = "SELECT * FROM testtable WHERE localid = $localid LIMIT 0, 1";
$result = mysqli_query($cxn, $query) or die ("could not query database 1");

if (mysqli_num_rows($result) > 0)
{
    $row = mysqli_fetch_array($result);

    $variablestopass = array
    (
        'ln' => $row['lastname'],
        'fn' => $row['firstname'],
        'zip' => $row['physzip'],
        'gender' => $row['gender'],
        'dob' => $row['dob']
    );

    echo json_encode($variablestopass);
}
else 
{
    echo "Erro selection id"; 
}
?>
最后,我将您在ajax对象上的
success
更改为:

sucess: function(result)
{
    var result = jQuery.parseJSON(result);

    alert(result.fn + " - " + result.ln + " - " + result.zip); // and so on...
}
注意:此
success
函数仅显示一个结果


如果有任何疑问,请告诉我们。祝你好运

哈哈,我把你的返回变量读作VariableStopAssSidenote-你似乎没有清理你的
$\u POST['localid']
。还有,我不太明白你检索到的$firstname之类的东西。您执行了一个while循环,但下次循环运行时,变量将被覆盖。添加
e.preventDefault()到单击函数的第一行。当然,也可以添加e作为单击的输入。提交函数可能在不知不觉中执行默认值。谢谢您的评论@75英寸钢琴家-你应该看看我的一些其他变量名!:-)谢谢大家@旁注-我必须阅读有关“消毒”的内容,我不确定那是什么,但我可以找到答案。就while循环而言,只有一个“行”要检索(有一个“localid”就只有一行),我不知道如何在没有while循环的情况下获取变量——它只循环一次。同意。使用
type=“button”
比提交更好。我之前的评论与切换类型的效果类似。当然,逃跑也很好,假设这个项目会被任何不是你的人使用。但是我看不出有任何理由从
标签中删除
。谢谢!非常感谢。谢谢你!我在这上面花了几个小时,结果如下:1-将按钮类型从“提交”更改为“按钮”真是天才-它改变了一切!它现在100%的时间都能工作。2-增加了两条注射保护线,使它崩溃了-什么也做不了。我敢打赌,这与我提交的数字实际上是一个数字而不是一个字符串这一事实有关——在这方面,我有更多的作业要做。3-我从未见过在查询语句中添加“LIMIT”,它似乎工作得很好。4-返回结果的查询总是一行,但我不知道如何在不执行WHILE语句的情况下拉出一行-您的代码工作得很好!5-我无法使用jQuery.parseJSON(结果);两行,因为我在第541行得到一个jQuery错误:SCRIPT1014:无效字符jQuery-1.9.1.js,第541行字符4,所以我必须进一步研究该命令。感谢——以及其他碰巧四处窥探的人——我找到了如何用ajax调用返回的变量填充div字段:$(“#identificationname”).html(结果['fn']);对于表单输入字段:$('#formi
$variablestopass = array();
while ($row = mysqli_fetch_array($result))
{
    $variablestopass[] = array
    (
        'ln' => $row['lastname'],
        'fn' => $row['firstname'],
        'zip' => $row['physzip'],
        'gender' => $row['gender'],
        'dob' => $row['dob']
    );
}
sucess: function(result)
{
    var result = jQuery.parseJSON(result);

    alert(result.fn + " - " + result.ln + " - " + result.zip); // and so on...
}