如何在不刷新页面的情况下从 PHP 中的 SQL Server 数据库获取数据
how to fetch data from sql server database in php without refreshing the page
我正在尝试从数据库中获取一些数据。 我创建了一个位于functions.php
返回值的文件中的函数。 在另一个页面上,我创建一个变量并获取该值。 我试图使用onkey
来检查数据库,但后来我意识到即使他们没有输入任何东西,我也需要知道门票的数量。
这是函数:
功能.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;
}
而且,我正在尝试检查数据库(不刷新页面)并在此页面上获取值:
应用.php
$amount_of_tickets = is_ticket_able($conn);
然后,我只是检查$amount_of_tickets
不是 0 或 1。 因为如果是一个,那么有些东西必须改变。
我正在这样做(在应用程序内部.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是正确的使用,但我对使用它感到困惑。
更新:
功能.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;
}
应用.php
$amount_of_tickets = is_ticket_able($conn);
<script type="text/javascript">
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
}
});
}
</script>
所以,现在的问题是,当我alert(global_isTicketAble);
它不会从数据库中发出警报值,但它确实会提醒应用程序内的所有内容.php...请帮忙
服务器端
假设您需要定期检查$amount_of_tickets
并且可以将其计算到应用程序中.php,那么在该文件中,您将拥有
<?php
// $conn is defined and set somewhere
$amount_of_tickets = is_ticket_able($conn);
echo $amount_of_tickets;
exit(0);
?>
这样,当使用简单的 GET 请求调用脚本时,值将在响应中以简单文本的形式返回。
客户端
如果您想在不重新加载的情况下更新页面上的信息,Ajax 是要走的路。
下面只是一个简单的示例(使用jQuery),可以扩展以满足您的需求。
下面的代码是一个 JavaScript 片段。全局用于存储值(应避免使用全局变量,但这只是出于示例的目的)
然后调用一个函数,并从函数.php脚本中获取更新的值。
函数 - prior 终止 - 调度自身(使用 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
的函数。
完整的jQuery ajax函数文档可以在这里找到
http://api.jquery.com/jquery.ajax/
我假设你有一个页面(应用程序.php)在某处显示一个表格。并且您希望用数据库中找到的数据填充该表。
我不确定您希望何时刷新这些数据。在按钮单击或定期(如 ervery 5 秒)...但是对于我在下面解释的内容来说,这并不重要。
在应用中.php:按照您已经知道的方式组装所有页面。
但是在它里面,有些人,只需在你的表格应该显示的地方插入一个空的div:
<div id="dynamicContent"></div>
还要在页面底部添加此脚本:
<script>
function getData(){
PostData="";
$.ajax({
type: "POST",
url: "function.php",
data: PostData,
cache: true,
success: function(html){
$(Destination).html(html);
}
});
}
getData(); // Trigger it on first page load !
</script>
这里有 2 个变量...我将其命名为"PostData"和"Destination"。
关于邮政数据:
如果需要,您可以将在客户端收集的数据传递给 PHP 函数。假设您需要传递用户的名字和姓氏,您将像这样定义 PostData:
Fname=$("#Fname").val(); // user inputs
Lname=$("#Lname").val();
PostData="Fname="+Fname+"&Lname="+Lname;
在你的函数.php中,你将像这样检索它(就像任何正常的 POST 数据一样):
$Fname=$_POST['Fname'];
$Lname=$_POST['Lname'];
如果您不需要将数据从客户端脚本传递到服务器端 PHP...只需将其定义为空即可。
PostData="";
然后,关于目的地:
这是空的"动态div"id的地方(我在上面将其命名为"动态内容")。
不要忘记 id 的标签 (#) 或类的点。
这是一个jQuery选择器。
所以在这里,PostData将定义如下:
Destination="#dynamicContent";
ajax 请求的结果将落入该"动态div"。
这将是函数中定义的结果.php..
所以,如果你跟着我,你必须在功能中构建你的表.php...
我的意思是您进行数据库查询和 while 获取的部分。
echo "<table>";
echo "<tr><th>column title 1</th><th>column title 2</th></tr>"
while ($row = sqlsrv_fetch_array($stmt)){
echo "<tr><td>" . $row['data1'] . "</td><td>" . $row['data2'] . "</td></tr>";
}
echo "</table>";
因此,如果您没有数据,则表将为空。
您只会获得表和表标题...但是没有行。
这样就不需要检查是否有数据的函数。
最后。。。关于要刷新的触发器:
在应用程序.php中,您可以放置一个触发 getData()...或者你可以定义一个 setInterval。
这取决于你。
这就是我如何使用 ajax 刷新页面的一部分而无需完全重新加载它。
由于 ajax 对你来说是新手,我希望这个答案会有所帮助。
;)
------------------------根据 Ariel 的评论进行编辑 (2016-05-01)
好的,我明白了!试试这个:
在应用中.php:
<div id="dynamicDiv"></div>
<script type="text/javascript">
// timer to trigger the function every seconds
var checkInterval = setInterval(function(){
checkTicket();
},1000);
function checkTicket(){
$.ajax({
type: "POST",
url: "function.php",
data: "",
cache: true,
success: function(html){
$("#dynamicDiv").html(html);
}
});
}
function noMoreTikets(){
clearInterval(checkInterval);
window.location.replace("http://www.google.com");
}
</script>
在功能上.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{
?>
<script>
$(document).ready(function(){
noMoreTikets();
});
</script>
<?php
}
请记住,您的 PHP 脚本是在服务器端执行的。
这就是为什么你的"回归$ticket"什么也没做。
在这种 ajax 调用 function.php 的方式中,它的脚本是单独执行的,就像单个页面一样,与很久以前执行的 application.php 没有任何关系。
它生成要提供给客户端的文本(或javascript)。
如果要将PHP变量传递给客户端javascript,则必须将其回显为javascript。
所以在这里,如果 PHP 变量$ticket大于零,一些说仍有票证可用的文本将显示在 "dynamicDiv" 中,并且应用程序页面将不会刷新。我想它显示了一个按钮或允许学生获得门票的东西。
否则,它将是"noMoreTikets()"的javascript触发器,它将登陆"dynamicDiv"。
- 使用电话间隙在Android应用程序中显示SQL Lite的数据
- 捕获初始RedQueryBuilder查询中的SQL问题
- 在sql查询的html中提交
- 从sql填充Jqgrid的自定义Add函数中的下拉数据
- 谷歌地图/SQL-添加链接到信息面板中的字段
- 为循环调用JavaScript中的SQL
- 如何通过ibmworklight中的sql适配器从db2中检索或显示html页面上的数据?android混合应用程序开发
- 在网站中处理 SQL 响应的位置
- 如何在不刷新页面的情况下从 PHP 中的 SQL Server 数据库获取数据
- 使用php中的单选按钮从MS SQL SERVER中删除行
- 如何将所有动态id的arrey值获取到javascript VAR CID,以便在sql中找到匹配项
- parseFloat未将sql中的字符串值更改为float
- 使用SQL数据库中的值过滤JSP上的表值
- 循环中的本地数据库sql查询
- Javascript查找匹配值的键,就像SQL中的查询一样
- 如何通过选择从SQL填充的下拉列表来检索SQL中的值到文本区域使用JavaScript在PHP中
- SQL中的进度条
- 使用保存在SQL中的值打开表
- IndexedDB中的多键查询(类似于sql中的OR)
- 如何将结构化文本文档保存到sql中的表中