如何在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函数文档可以在这里找到
我假设你有一个页面(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 "column title 1 column title 2 " while ($row = sqlsrv_fetch_array($stmt)){ echo "" . $row['data1'] . " " . $row['data2'] . " "; } echo "
";
因此,如果您没有数据,该表将为空。
你只会获得表格和表格标题……但没有行。
那么就不需要检查是否有数据的函数。
最后……关于刷新的触发器:
在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”中。