2016-10-10 37 views
0

有人幫助,我錯了! Ajax返回正確的信息。它還顯示'成功'包括頁面中的所有數據'alert(html)'。 Echo $ idName;和echo $ path;在載體頁面上打印正確的信息(代碼在哪裏)。頁面中沒有邊茶點。 Require方法不會阻止頁面。問題是div包含空的!謝謝。PHP包括/需要方法與變量路徑

<div id="include"> 
    <?php 
     if (isset($_POST['idName1'])) { 
      $idName = $_POST['idName1']; 
      $query = mysqli_query($mysqli, "SELECT in_path FROM strani WHERE id_name='$idName '"); 
      $row_path = mysqli_fetch_array($query); 
      $path = $row_path['in_path']; 
      require($path); /*Also tried: require(dirname(__FILE__)."/".$path); all the same!*/ 
     } 
    ?> 
</div> 

因爲我想進一步解釋,它不會像評論一樣傳遞,我聲明要編輯問題。附上文件結構和目錄,以及更改縮短過程的代碼,以顯示錯誤。預測的情景如下:授權的聯繫人自登錄以後,將打開main-page.php,並帶有可供編輯的可選表單菜單。這個頁面立即包含'form-carrier.php,它自帶include some data.php'。一旦通過錨標籤,他將選擇適當的表格,這個表格應該包含在適當的「div = include」格式中。

Page structure: 
    main-page.php > It includes file: require(form-carrier.php) which iclude: require(form.php); and: require(some-data.php); 
Dir structure: 
    secured-dir (It contains files: login.php; error.php; error-log) 
     styles-dir 
     js-dir 
     includes-dir (It contains files: functions.php; db-conn-conf.php; process-login-logout.php; session-class.php; error-log) 
     forms-dir (It contains files: form-carrier.php; some-data-php; error_log) 
      forms-byclass1-subdir (It contains files: form-some-name.php; error_log) 
      forms-byclass2-subdir (It contains files: form-some-name.php; error_log) 
      ..... other sub dirs.... 
     working-dir It contains files: (main-page.php; error_log) 

通過鍵入指定路徑測試,發現它正常工作,如果在題要求(「形式 - byclass1-子目錄/表單一些-name.php」);以及「../forms-dir/ forms-byclass1-subdir/form-some-name.php」。這使我的「的形式,一些-name.php」由主page.php文件是在工作-DIR註冊的結論,以及由位於窗體的DIR表單carrier.php,這是mainpage.php的一個孩子。不應該這樣工作,但它的工作原理。爲了避免混淆,我在同一目錄「working-dir」和「main-page.php」中替換了兩個包含文件(form-carrier.php;和some-data-php)。

Now dir structure look like: 
forms-dir (only error_log) 
    forms-byclass1-subdir (It contains files: form-some-name.php; error_log) 
    ..... others forms-byclass-subdirs.... 
working-dir It contains files: (main-page.php; form-carrier.php; some-data-php; error_log) 

And the php code in form-carrier.php: 
... 
<div id="include"> 
    <?php 
     if (isset($_POST['strPath1'])) { 
      $strPath = $_POST['strPath1']; 
      var_dump($strPath); 
      require($strPath); 
     } 
    ?> 
</div> 
... 

我縮短了代碼,並決定不經過數據的基礎,但在JavaScript中創建變量的完整路徑和直接AJAX發送到目標文件。結果是一樣的。如果打字題的路徑,代碼被正確執行,如果我在JavaScript中使用一個變量,阿賈克斯派出去了,我得到正確的數據,在警報(HTML)可以閱讀的形式,一些名稱的所有數據。 PHP,以及form-carrier.php;和some-data.php,var_dump($ strPath);給我正確的路徑,但包括div仍然是空的!如果有人仍然有興趣幫助解決這個問題,我將非常感激,對我來說,這是一個未知和奇怪的問題。

+0

你是說'回聲$ path'而不是'要求($ PATH)''的條件if'內輸出正確的路徑? –

+0

您是否已經完成'var_dump($ _ POST)'和$路徑以查看填充了什麼內容? – Kitson88

+0

你的PHP文件位於哪裏? –

回答

0

既然沒有人有足夠的知識,希望花時間解決這個問題,我相信這是容易解決,我解決了現在和後希望能找到在這一領域的其他初學者我有用!我回到了第一種方法。這種方法簡單得多,並提供了以下幾個步驟:page1 achor click> page1 js var for path和asign to intermediate filed in page1> js使用filePath在page2中加載page3。過早刷新的問題修復如下:首先將JS文件拆分爲三個文件的所有代碼,分別爲每個頁面三個代碼,並將setTimeout函數添加到其他程序中,以正確執行順序執行。現在它運行順利!

main-page.php 
<nav class=」side-menu」> 
… 
    <?php ... Creating a side-menu from database MySQL ... ?> 
// echo resault: 
<ul> 
    <li class=」sub-menu」><a id=」forms-byclass1-subdir」 href=」#」></a> 
     <ul> 
      <li class=」anchor」> 
       <a href=」# form-some-name」> 
        <span id=」form-header」>form-label</span></a> 
</li></ul></li></ul></nav> 
… 
</nav> 
… 
<div id="fc"> 
    <?php require("form-carrier.php"); ?> 
</div> 
<div id=」hidden」 
    <input type="text" id="path" name="path" value=」」 /> 
</div> 
… 
form-carrier.php 
… 
<div id="include"></div> 
… 
Main-page.js 
… 
$(".sub-menu > a").click(function(e){ 
    e.preventDefault(); 
    … variables to get a desired path … 
    $("#include").load(path); 
    setTimeout(function() { 
     … other procedures … 
    }, 60); 
}); 

這並不意味着我是從方法放棄了,使用Ajax,PHP和數據庫,但直到我找到解決這個問題的辦法,這無疑是一種很好的解決方案。因此,仍然呼籲網站設計大師的貢獻。

正常運作各種活動

注:,因爲該文件是動態包括,將使用JQuery。點擊()的是有問題的,以及JavaScript的HTML DOM事件監聽,如果它在HTML內嵌使用。至少在我的情況下,最可靠的方法是使用Jquery「.on(events [,selector] [,data],handler)」。