2011-08-09 35 views
0

我有2個腳本/頁面,都使用會話數據。這是PHP中的錯誤還是奇怪的行爲?

第1頁是一個包含一些數據的表格,其中一條數據是一個電子郵件地址。此頁面只有在$_SESSION['email'] == '[email protected]'的情況下才可以訪問。在表格的每一行的第1頁上都有一個按鈕,用於向腳本/頁面2發送AJAX調用,該腳本通過電子郵件發送相應的電子郵件地址。

在第2頁有另一個檢查$_SESSION['email'] == '[email protected]'

然後它設置$email = $_POST['email']並調用一個mail()函數。該腳本執行後,它會自動將$_SESSION['email']更改爲$email

我已將變量名稱從$email更改爲$sendToEmail並解決了此問題。

我的問題是爲什麼它這樣做?這是一個錯誤還是一個功能?

編輯:

這是mail.php代碼在它的全部。

<?php 
session_start(); 
define("_VALID_PHP", true); 
require_once('init.php'); 

if ($_SESSION['email'] == '[email protected]') { 
    if (isset($_POST['iid'])) { 
     $iid = $_POST['iid']; 
     if (isset($_POST['email'])) { 
      $sendToEmail = $_POST['email']; 
      $query = $db->query("SELECT id FROM esns WHERE iid='$iid' AND status=0"); 
      if (mysql_num_rows($query) > 0) { 
       $data['success'] = false; 
       $data['msg'] = "Email cannot be sent until all ENS's are checked for this invoice."; 
      } 
      else { 
       $query = $db->query("SELECT uid, md5 FROM invoice WHERE id='$iid'"); 
       $row = $db->fetch($query); 
       $uid = $row['uid']; 
       $md5 = $row['md5']; 
       $query = $db->query("SELECT email FROM users WHERE id='$uid'"); 
       $row = $db->fetch($query); 
       if ($row['email'] == $email) { 
        $clean = array(); 
        $bad = array(); 
        $invalid = array(); 
        $query = $db->query("SELECT esn, status, carrier FROM esns WHERE iid='$iid'"); 

        $headers = "From: [email protected]"; 
        $subject = "New Message from site.com"; 

        $body = "Hello"; 

        $mail = mail($sendToEmail,$subject,$body,$headers); 

        if (!$mail) { 
         $data['success'] = false; 
         $data['msg'] = "There was an error sending the email."; 
        } 
        else { 
         $query = mysql_query("UPDATE invoice SET paid=2 WHERE id='$iid'"); 
         $data['success'] = true; 
        } 
       } 
       else { 
        $data['success'] = false; 
        $data['msg'] = "There was an mismatch with the emails. The posted email does not belong to this invoice."; 
       } 
      } 
     } 
     else { 
      $data['success'] = false; 
      $data['msg'] = "Post data not sent/recieved correctly: `email` is no set."; 
     } 
    } 
    else { 
     $data['success'] = false; 
     $data['msg'] = "Post data not sent/recieved correctly: `iid` is no set."; 
    } 
} 
else { 
    $data['success'] = false; 
    $data['msg'] = "Your are not logged in as an administrator."; 
} 
echo json_encode($data); 
?> 
+0

請發佈您的代碼。你可能在某個地方有一個「require」的地方。它不是PHP。 –

+0

你在你的代碼中有語法錯誤 - > $ body =「Hello; – genesis

+0

這是因爲我編輯了這個部分,不想發佈實際的$ body。 –

回答

4

你有可能register_globals嗎?這可能是你的核心問題,因爲當它開啓時,它會在設置時自動設置$_SESSION$email

+0

register_globals is on。所以你說的是如果我有一個名爲email的'_ _SESSION'鍵,然後爲同名的變量設置一個值,'$ _SESSION ['email']'值也會改變,總是? –

+0

是的,正好...... – genesis

+0

如果我關閉了register_globals,這種行爲會停止嗎?如果我這樣做,會發生什麼其他後果? –