2015-03-31 70 views
-4

我想從PHP中調用HTML/Javascript中的變量(id),其中來自DB的行的ID將從錨點發送到另一個頁面,以便行詳細信息可以在一張桌子上查看。在javascript中調用PHP變量

var eventContent = $('<div class="event-info">' + '<h4 class="event-name">' + point.name + '</h4><hr>' + 
     '<span><h5>Date: </h5>' + 
     '<p class="event-date">' + point.edate + '</p></span>' + 
     '<p class="event-description">'+ point.description +'</p>' + 
     '<input type="button" id="view-event" class="btn btn-info btn-sm" onclick="showDetails();" value="View Event" />'+ 
     '<a href="details.php<?php echo $id; ?>" class="btn btn-danger btn-sm">Remove Event</a>' + 
     '</div>'); 

因此,例如,出現了一批保存並顯示不同的事件,並點擊查看按鈕時 - 它會打開一個新頁面,在表格中顯示具有該ID的事件。

UPDATE: 我也嘗試過通過建立在PHP/HTML詳細信息列表:

$result = mysqli_query($con,"SELECT * FROM events"); 

       while($row = mysqli_fetch_array($result)) 
       { 
        echo "<div class='event-details' id='event-details' style='display: none'>"; 
        echo "<h3>Event Details</h3>"; 
        echo "<table class='table'>"; 
        echo "<tr><th>Event Name: </th><td>" . $row['name'] . "</td></tr>"; 
        echo "<tr><th>Event Date: </th><td>" . $row['edate'] . "</td></tr>"; 
        echo "<tr><th>Event Type: </th><td>" . $row['category'] . "</td></tr>"; 
        echo "<tr><th>Event Details: </th><td>" . $row['description'] . "</td></tr>"; 
        echo"</table>"; 
        echo "<td><a href='details.php?id=".$row['id']."' class='btn btn-warning btn-sm'>View</a></td></div>"; 
       } 

然後,它會在JavaScript中,使用的clone():

var eventList = $("#event-details").clone().show(); 

google.maps.event.addListener(event_markers[i], "click", function() { 
     infowindow.setContent(eventList[0]); 
     infowindow.open(map, event_markers[i]); 
     map.setCenter(marker.getPosition()); 
     map.setZoom(10); 
    }); 

現在這種方式發送ID輸入,但它發送相同的ID到每個項目 - 目前有5行數據庫的ID從6到10,但是當頁面加載時,它發送第一個ID(6)全部事件,而不是給每一個它自己的唯一ID來自數據庫。

+0

PHP是服務器端代碼,因此,當服務器處理訪問文件的請求時,代碼將被編譯並解析爲HTML。JS是客戶端代碼,所以它在用戶的瀏覽器旁邊運行解析的HTML代碼。客戶端JS無法執行任何PHP命令。 – RenaissanceProgrammer 2015-03-31 21:34:32

+1

^look into ajax – developerwjk 2015-03-31 21:44:44

+0

當PHP確實直接輸出標記時,會出現一些令人討厭的情況。特別是在遺留項目中。由於重構可能比修補更昂貴...去圖。 無論如何,上面的代碼片段對我來說也沒什麼意義,但我試圖想象這些差距,並提供了一些不可知論的想法。無論如何,看起來像一個「小心處理」的情況下,我不想在那裏。 – 2015-03-31 21:51:54

回答

1

您的代碼可能會走這條路:

var id = <?php echo $id; ?>; 
var eventContent = $('<div class="event-info">' + '<h4 class="event-name">' + point.name + '</h4><hr>' + 
     '<span><h5>Date: </h5>' + 
     '<p class="event-date">' + point.edate + '</p></span>' + 
     '<p class="event-description">'+ point.description +'</p>' + 
     '<input type="button" id="view-event" class="btn btn-info btn-sm" onclick="showDetails();" value="View Event" />'+ 
     '<a href="details.php?id=' + id + '" class="btn btn-danger btn-sm">Remove Event</a>' + 
     '</div>'); 

然而,我覺得這是一個更加簡潔:

<div class="event-info"> 
    <h4 class="event-name"></h4> 
    <hr> 
    <span> 
    <h5>Date: </h5> 
    <p class="event-date"></p> 
    </span> 
    <p class="event-description"></p> 
    <input type="button" id="view-event" class="btn btn-info btn-sm" 
    onclick="showDetails();" value="View Event" /> 
    <a class="btn btn-danger btn-sm">Remove Event</a> 
</div> 

// below is the javascript example for your manipulations 

var id = <?php echo $id; ?>; 
$('h4.event-name').html(point.name); 
$('p.event-date').html(point.edate); 
$('p.event-description').html(point.description); 
$('p.event-description').html(point.description); 
$('div.event-info a.btn').attr('href', 'details.php?id='+id); 

對於後者,您可以爲您的活動數據的容器(例如,如果您必須在同一頁面中顯示更多這些內容),然後從數據庫中生成一個ID列表。具體的步驟是:

  • 有一個div準備(像一個空模板)
  • 得到事件的列表(作爲一個數組,或更好的,JSON)
  • 從PHP傳遞列表中的JavaScript成一個JS變量通過與JS
    • 陣列爲他們每個人(或者做一個AJAX調用)
    • 迭代,克隆容器和分配一個唯一的ID給它
    • 你就會有一個每個容器稍作修改JavaScript代碼的版本(見下文)

所以你不會擔心可讀性和可重用性。

var id = point.id; 
$('div#' + id + ' h4.event-name').html(point.name); 
$('div#' + id + ' p.event-date').html(point.edate); 
$('div#' + id + ' p.event-description').html(point.description); 
$('div#' + id + ' p.event-description').html(point.description); 
$('div#' + id + ' div.event-info a.btn').attr('href', 'details.php?id='+point.id); 

一如既往,進一步的改進和建議是非常值得歡迎的。

+0

當調用id作爲變量(var id = <?php echo $ id;?>;)時,它給出了一個語法錯誤「Unexpected token <」 – Stephen 2015-03-31 22:20:32

+0

你有一些非典型的設置,如果你願意分享更多也許有人可以提供更好的綜合答案。無論如何,在這麼多層次上這似乎是一個錯誤的方法,你可能會考慮進行一些重構。 – 2015-03-31 22:22:09

+0

我已經嘗試了另一種方式通過使用JavaScript的克隆() - 它已被更新的原始問題 – Stephen 2015-04-01 12:55:34

1

看起來你的服務器正在返回一些事件數據。讓它返回事件ID。

例如,如果您的頁面爲各種事件返回JSON,請將ID包含在JSON對象中。