PHP包含/ require方法和可变路径

时间:2016-10-10 18:52:37

标签: javascript php html

有人在我错的地方帮忙! Ajax返回正确的信息。它还显示“成功”包含页面,其中包含“alert(html)”中的所有数据。 Echo $ idName;和echo $ path;在承运人页面中打印正确的信息(代码在哪里)。页面中没有副茶点。 Require方法不会阻止页面。问题是div包含仍然是空的!感谢。

<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,包括some-data.php'。一旦通过锚标记,他将选择适当的表格,此表格应包含在“id = include”的相应div中。

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)

通过键入指定路径进行测试,并发现如果在require(“forms-byclass1-subdir / form-some-name.php”)中输入,它可以正常工作;以及“../forms-dir/ forms-byclass1-subdir / form-some-name.php”。这使我得出结论,“form-some-name.php”由main-page.php注册,它位于working-dir中,以及form-carrier.php中,位于forms-dir中,这是main- page.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中的变量,由Ajax发送,我得到正确的数据,在alert(html)中可以从form-some-name读取所有数据。 php,以及form-carrier.php;和some-data.php,var_dump($ strPath);给了我正确的路径,但包括div仍然是空的!如果有兴趣有兴趣解决这个问题,我将非常感激,对我来说是未知和奇怪的问题。

1 个答案:

答案 0 :(得分:0)

由于没有足够的知识,想要花时间解决这个问题,而且我确信这很容易解决,我现在解决了,希望能找到对我这个领域的其他初学者有用的东西!我回到了第一种方法。这种方式更简单,并提供了以下几个步骤:page1 achor click&gt; page1 js var for path和asign to intermediate filed in page1&gt; js load page3 in page2 with filePath。过早刷新的问题修复如下:首先拆分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和db的方法,但在找到修复方法之前,这肯定是一个很好的解决方案。因此,仍然需要网络设计专家的贡献。

注意各种事件的正常运行:因为文件是动态包含的,使用JQuery .click()以及JavaScript HTML DOM EventListener(如果它不在html内联中使用)将会出现问题。至少在我的情况下,最可靠的方法是使用Jquery“.on(events [,selector] [,data],handler)”。