簡體   English   中英

PHP未定義的變量

[英]PHP Undefined variables

有人可以查看這段代碼並告訴我為什么我在第22-26行從調試器接收“未定義變量”消息? 此代碼在另一台運行php 5.2的服務器上運行正常。 但是,我的apache服務器運行php5.5,相同的代碼不會寫入指定的文件。 當我為第22-26行的參數添加一個字符串值,而不是引用空的表單值時,它可以工作,所以問題是將輸入表單值轉換為變量。 我得到“未定義的變量”或“未定義的索引”。 這是我的代碼:

<html>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
Name: <input type="text" name="name"><br><br>

E-mail: <input type="text" name="email"><br><br>

Username(for ftp access): <input type="text" name="username"><br><br> 
Password(for ftp access): <input type="password" name="password"><br><br>
Leave Your Feedback (Comments, Inquiries, Suggestions): <br>
<textarea rows="10" cols="50" name="text"></textarea>
<br><input type="submit" name="submit" value="Submit"> 
<?php

$file = fopen("data.html", "ab"); 
if(isset($_POST['name'])){ $name = $_POST['name']; } 
if(isset($_POST['email'])){ $email = $_POST['email']; } 
if(isset($_POST['username'])){ $username = $_POST['username']; }
if(isset($_POST['password'])){ $password = $_POST['password']; } 
if(isset($_POST['text'])){ $text = $_POST['text']; } 


echo fwrite($file, $name);
echo fwrite($file, $email);
echo fwrite($file, $username);
echo fwrite($file, $password);
echo fwrite($file, $text);
fclose($file);
?>
</form> 
</html>

大家,謝謝你的建議。 您的一些解決方案已經解決了擺脫惱人的通知和有關未定義變量的警告的問題。 但是,該腳本仍然不會寫入該文件。 當我使用var_dump($ _ POST)時,它返回已使用表單提交的完整變量值數組。 但是,腳本的輸出(寫入文件00000的字節數)僅在從控制台,調試器或命令行運行時顯示在html中,但在瀏覽器中打開時則不顯示。 我知道腳本工作正常,因為我可以看到它從輸入表單字段讀取了很多字節到我瀏覽器中的文件,這種情況沒有發生,因此腳本無效。 它應該工作,我使用xdebug並沒有錯誤。

這是調試器的輸出:

<html>
<form method="post">
Name: <input type="text" name="name"></input><br><br>
E-mail: <input type="text" name="email"></input><br><br>
Username(for ftp access): <input type="text" name="username"></input><br><br> 
Password(for ftp access): <input type="password" name="password"></input><br><br>
Leave Your Feedback (Comments, Inquiries, Suggestions): <br>
<textarea rows="10" cols="50" name="textx"></textarea>
<br><input type="submit" name="submit" value="Submit"></form> 
//output of var_dump($_POST) 
array(0) {
}
//output of fwrite()
00000</html>

我遇到的問題:表單是使用值提交的,但是我在腳本中分配的變量在寫入文件時並不指向這些值。 順便說一句,這個腳本在php5.2服務器上工作正常,我可以看到提交表單時寫入的字節數。 實際上我已經在很多不同的服務器上使用這個腳本很長一段時間了,直到現在它才給我這個問題。 我通常會在最終的html中隱藏腳本的顯示,但至少我知道它的運行正常。

工作的服務器使用register_globals 使用它是不好的做法(見警告?)

禁用它,並修復代碼。 它現在有效,因為$_POST['name']可以作為$name訪問。

$file = fopen("data.html", "ab");
$details = array('name', 'email', 'username', 'password', 'text');
foreach ($details as $var) {
    if (!empty($_POST[$var])) {
        fwrite($file, $_POST[$var]);
    }
}
fclose($file);

在5.2服務器上,您可能已禁用警告。

您只是分配值,如果$_POST包含這些鍵,這就是問題所在。

檢查和寫入文件的最簡單方法是使用foreach ,就像上面粘貼的代碼一樣。

如果有人沒有在其中一個帖子字段(如email )中插入任何內容,則相關變量將永遠不存在

更改您的代碼如下

$name = isset($_POST['name']) ? $_POST['name'] : '';
$email = isset($_POST['email']) ? $_POST['email'] : '';
$username = isset($_POST['username']) ? $_POST['username'] : '';
$email = isset($_POST['password']) ? $_POST['password'] : '';
$text = isset($_POST['text']) ? $_POST['text'] : '';

這是一個三元運算符 :如果最右邊的運算符被評估為True,它會在左運算符之后賦值? ,否則后面的值:

注意:

這只是避免這種警告/錯誤的可能方法之一

你沒有定義$name $email $username $password如果沒有設置適當的post變量,那么你會得到未定義的變量錯誤,你可以用這個來解決這個錯誤:

if(isset($_POST['name'])){ $name = $_POST['name']; echo fwrite($file, $name);} 
if(isset($_POST['email'])){ $email = $_POST['email']; echo fwrite($file, $email);} 
if(isset($_POST['username'])){ $username = $_POST['username']; echo fwrite($file, $username);}
if(isset($_POST['password'])){ $password = $_POST['password']; 
echo fwrite($file, $password);} 
if(isset($_POST['text'])){ $text = $_POST['text']; echo fwrite($file, $text);} 

如果沒有$ _POST ['name'],則沒有$ name,您將收到錯誤消息。 你可以使用var_dump($ _ POST)查看值是否正確傳遞,你也可以使用else {$ name =''; }

嘗試這個

<?php

  $name = "";
  $email= "";
  $username= "";
  $password= "";
  $text = "";
  $file = fopen("data.html", "ab"); 
  if(isset($_POST['name'])){ $name = $_POST['name']; } 
  if(isset($_POST['email'])){ $email = $_POST['email']; } 
  if(isset($_POST['username'])){ $username = $_POST['username']; }
  if(isset($_POST['password'])){ $password = $_POST['password']; } 
  if(isset($_POST['text'])){ $text = $_POST['text']; } 


   echo fwrite($file, $name);
   echo fwrite($file, $email);
   echo fwrite($file, $username);
   echo fwrite($file, $password);
   echo fwrite($file, $text);
   fclose($file);
 ?>

好的,謝謝大家的幫助。 我擺脫了惱人的通知和警告,我在解決問題時解決了我的其他問題。 主要的問題是我第一次在Fedora上運行這個服務器而且我沒有將selinux設置設置為“permissive”。 我在更改后重新配置了防火牆,現在我可以看到腳本並將其寫入文件。

暫無
暫無

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

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