2011-06-10 44 views
0

當我將表單發佈到同一個.php文件時,文件範圍變量在不應該爲空時爲空。表單文件中刪除文件範圍變量

includefile.php:

<?php 

    $foo = " "; 
?> 

doIt.php:

<?php 

    echo $foo; 

echo <<<_END 
    <form action="doIt.php" method="post"><pre> 
    $nameLabel : <input type="text" name=$nameLabel /> 
    <input type="submit" name="addrecord" value="ADD RECORD" /> 

_END;

的index.php

<?php 
    require_once 'includefile.php'; 

    $foo = "Set now."; 

    require_once 'doIt.php'; 
?> 

加載第一次,index.php文件將導致$ foo的呼應,它說 「現在設置。」 但是當我按下表單上的提交按鈕 - $ foo是空的。 爲什麼重新進入doIt.php殺死$ foo的值? 注意:require_once沒有改變 - 仍然是同樣的問題。

我的猜測是POST表單以及由此產生的重新進入相​​同的.php文件 會在堆棧上設置一個新的調用幀,其中所有內容都設置爲空。

+0

的形式從技術上不回發到同一個文件 - 而不是發佈到「的index.php」您要發佈帖子「doit.php」,這是從一個'require_once'索引文件。我認爲那裏沒有重大問題,但需要考慮。 – William 2011-06-10 19:53:03

+0

您更改了您發佈的所有代碼。 – dqhendricks 2011-06-10 20:11:02

+0

沒有「文件範圍」之類的東西。包含語句與複製include語句所在的包含文件中的所有代碼相同。 – dqhendricks 2011-06-10 20:12:18

回答

1

看起來你的表單需要提交給'index.php'而不是'doit.php'。在'doit.php'文件中,$foo被設置爲require_once文件中的空字符串,並且不會像您預期的那樣通過'index.php'進行設置。所以:

<form action="index.php" method="post">

+0

好吧,我真正想要的是在index.php(第一次加載頁面)內部設置第一次$ foo的值 - 然後我希望$ foo在項目中的其他每個文件中都可用在其值被設置爲「立即設置」之後。這就是爲什麼我把$ foo放在includefile.php文件中,並且原來在每個其他需要訪問$ foo的文件中都有require_once'includefile.php'。但是我發現表單POST會清除$ foo。我不知道爲什麼。 – wantTheBest 2011-06-10 20:21:41