簡體   English   中英

如何從PHP中的sql server數據庫中獲取數據而不刷新頁面

[英]how to fetch data from sql server database in php without refreshing the page

我試圖從數據庫中獲取一些數據。 我創建了一個函數,該函數位於functions.php文件中,返回一個值。 在另一個頁面上,我創建一個變量,然后獲取該值。 我試圖使用onkey檢查數據庫,但后來我意識到我需要知道門票的數量,即使他們沒有輸入任何東西。

這是功能:

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.因為如果是一個那么一些東西必須改變。

我這樣做(在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);

<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); 它不會提醒數據庫中的值,但它會提醒application.php中的所有內容...幫助plzzz

服務器端

假設您需要定期檢查$amount_of_tickets ,這可以計算到application.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代碼段。 全局用於存儲值(應該避免使用全局變量,但這只是為了示例的目的)

然后調用一個函數,並從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的功能。

完整的jQuery ajax函數文檔可以在這里找到

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

我假設你有一個頁面(application.php)在某處顯示一個表。 並且您希望用您在數據庫中找到的數據填充該表。

我不確定你什么時候想要刷新這些數據。 按鈕點擊或定期(如錯誤的5秒)......但是對於我在下面解釋的內容並不重要。

在application.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”。

關於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 "<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>";

因此,如果您沒有數據,該表將為空。
你只會獲得表和表頭...但沒有行。
那么就不需要檢查是否有數據的函數。

最后......關於刷新的觸發器:
在application.php中,您可以放置​​一個觸發getData()的按鈕......或者您可以定義一個setInterval。
由你決定。

這就是我如何使用ajax刷新頁面的一部分而不重新加載它。
既然ajax對你來說很陌生,我希望這個答案會有所幫助。
;)

------------------------
根據Ariel的評論編輯 (2016-05-01)

好的我明白! 試試這個:

在application.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>

在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{
    ?>
    <script>
        $(document).ready(function(){
            noMoreTikets();
        });
    </script>
    <?php
}

請記住,您的PHP腳本是在服務器端執行的。
這就是為什么你的“返回$ ticket;” 什么都沒做。

在這個調用function.php的ajax方式中,它的腳本是單獨執行的,就像單個頁面一樣,與很久以前執行的application.php沒有任何關系。

它生成要提供給客戶端的文本(或javascript)。
如果要將PHP變量傳遞給客戶端javascript,則必須將其作為javascript回顯。

所以在這里,如果PHP變量$ ticket大於零,那么一些文本說仍有可用的票證將顯示在“dynamicDiv”中,並且不會刷新應用程序頁面。 我想它會顯示一個按鈕或某些東西,允許學生獲得一張票。

否則,它將成為“noDoreTikets()”的javascript觸發器,它將落入“dynamicDiv”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM