如何在php中从sql server数据库中获取数据而不刷新页面

我试图从数据库中获取一些数据。 我创建了一个函数,该函数位于functions.php文件中,返回一个值。 在另一个页面上,我创建一个变量,然后获取该值。 我试图使用onkey检查数据库,但后来我意识到我需要知道门票的数量,即使他们没有输入任何东西。

这是function:

function.php

 function is_ticket_able($conn){ $query = "select number_of_tickets from [dbo].[TICKETS] " ; $stmt = sqlsrv_query($conn, $query); while ($row = sqlsrv_fetch_array($stmt)) { $amount_of_tickets = $row['number_of_tickets']; } return $amount_of_tickets; } 

而且,我正在尝试检查数据库(不刷新页面)并获取此页面上的值:

application.php

 $amount_of_tickets = is_ticket_able($conn); 

然后,我只检查$amount_of_tickets不是0或1.因为if是一个然后一些东西必须改变。

我这样做(在application.php中):

 if($amount_of_tickets !=0){ //show the form and let them apply for tickets. //also if($amount_of_tickets == 1){ //just let them apply for one ticket. } } 

编辑:我看到AJAX是正确的使用,但我很困惑使用它。

更新:

function.php

 function is_ticket_able($conn){ $query = "select number_of_tickets from [dbo].[TICKETS_LKUP] " ; $stmt = sqlsrv_query($conn, $query); while ($row = sqlsrv_fetch_array($stmt)) { $ticket = $row['number_of_tickets']; } return $ticket; } 

application.php

 $amount_of_tickets = is_ticket_able($conn);  var global_isTicketAble = 0; checkTicket(); function checkTicket() { $.ajax( { url: "application.php", method: 'GET', dataType: 'text', async: true, success: function( text ) { global_isTicketAble = text; alert(global_isTicketAble); if( global_isTicketAble == 0 ){ window.location.replace("http://www.google.com"); } setTimeout( checkTicket, 5000 ); // check every 5 sec } }); }  

所以,现在的问题是当我发出alert(global_isTicketAble); 它不会提醒数据库中的值,但它会提醒application.php中的所有内容…帮助plzzz

服务器端

假设您需要定期检查$amount_of_tickets ,这可以计算到application.php中 ,在该文件中您将拥有

  

这样,当使用简单的GET请求调用脚本时,该值将作为简单文本在响应中返回。


客户端

如果您想在不重新加载页面的情况下更新页面上的信息,那么ajax就是您的选择。

下面只是一个简单的例子(使用jQuery),可以扩展以满足您的需求。

下面的代码是一个JavaScript代码段。 全局用于存储值(应该避免使用全局变量,但这只是为了示例的目的)

然后调用一个函数,并从function.php脚本中获取更新的值。

函数-prior termination-调度自身(使用setTimeout )在给定的毫秒数后重新调用(重复获取值进程)。

 var global_isTicketAble = 0; checkTicket(); function checkTicket() { $.ajax( { url: "application.php", method: 'GET', dataType: 'text', async: true, success: function( text ) { global_isTicketAble = text; // eventually do something here // with the value just fetched // (ex. update the data displayed) setTimeout( checkTicket, 5000 ); // check every 5 sec } } } 

请注意, $.ajax()发送请求但不等待响应(因为async设置为true )。 收到请求后,将执行指定为success的function。

完整的jQuery ajax函数文档可以在这里找到

http://api.jquery.com/jquery.ajax/

我假设你有一个页面(application.php)在某处显示一个表。 并且您希望用您在数据库中找到的数据填充该表。

我不确定您何时希望刷新这些数据。 按钮点击或定期(如错误的5秒)……但是我在下面解释的并不重要。

在application.php中:按照您已经知道的方式组装所有页面。

但在其中,有些人只是插入一个空的div,你的表应该显示:

 

还要在页面底部添加此脚本:

  

这里有2个变量……我把它命名为“PostData”和“Destination”。

关于PostData:
如果需要,您可以将客户端收集的数据传递给PHP函数。 假设您需要传递用户的名字和姓氏,您可以像这样定义PostData:

 Fname=$("#Fname").val(); // user inputs Lname=$("#Lname").val(); PostData="Fname="+Fname+"&Lname="+Lname; 

在你的function.php中,你会像这样检索它(就像任何普通的POST数据一样):

 $Fname=$_POST['Fname']; $Lname=$_POST['Lname']; 

如果您不需要将数据从客户端脚本传递到服务器端PHP …只需将其定义为空。

 PostData=""; 

然后,关于目的地:
这是空的“动态div”id的位置(我将其命名为“dynamicContent”)。
不要忘记ID的标签(#)或类的点。
这是一个jQuery选择器。
所以在这里,PostData将被定义如下:

 Destination="#dynamicContent"; 

ajax请求的结果将落入“动态div”。
这将是function.php中定义的结果。

所以,如果你关注我,你必须在function.php中构建你的表…
我指的是您进行数据库查询和获取时的部分。

 echo ""; echo "" while ($row = sqlsrv_fetch_array($stmt)){ echo ""; } echo "
column title 1column title 2
" . $row['data1'] . "" . $row['data2'] . "
";

因此,如果您没有数据,该表将为空。
你只会获得表格和表格标题……但没有行。
那么就不需要检查是否有数据的函数。

最后……关于刷新的触发器:
在application.php中,您可以放置​​一个触发getData()的按钮……或者您可以定义一个setInterval。
由你决定。

这就是我如何使用ajax刷新页面的一部分而不重新加载它。
由于ajax对你来说是新的,我希望这个答案会有所帮助。
;)

————————
根据Ariel的评论编辑 (2016-05-01)

好的我明白! 试试这个:

在application.php中:

 

在function.php中:

 // Remove the "function is_ticket_able($conn){" function wrapper. // Define $conn... Or include the file where it is defined. // I assume that your query lookup works. $query = "select number_of_tickets from [dbo].[TICKETS_LKUP] " ; $stmt = sqlsrv_query($conn, $query); while ($row = sqlsrv_fetch_array($stmt)) { $ticket = $row['number_of_tickets']; } // Add this instead of a return. if($ticket>0){ echo "There is still some tickets!"; // Text that will show in "dynamicDiv" }else{ ?>   

请记住,您的PHP脚本是在服务器端执行的。
这就是为什么你的“返回$ ticket;” 什么都没做。

在这种调用function.php的ajax方式中,它的脚本是单独执行的,就像单个页面一样,与很久以前执行的application.php没有任何关系。

它生成要提供给客户端的文本(或javascript)。
如果要将PHP变量传递给客户端javascript,则必须将其作为javascript回显。

所以在这里,如果PHP变量$ ticket大于零,一些文本说仍有可用的票证将显示在“dynamicDiv”中,并且应用程序页面将不会刷新。 我想它会显示一个按钮或某些东西,允许学生获得一张票。

否则,它将是“noMoreTikets()”的javascript触发器,它将落在“dynamicDiv”中。