2013-11-26 51 views
1

我看着和我的調整是不行的(小白),但我試過!

我在一個安全的端口的cPanel Webmail的自定義登錄,並希望錯誤消息在自定義登錄頁面來填充,而不是重定向到默認端口通用登錄頁面。

這是我發現的代碼應該很好地工作,除了我使用Wordpress和經歷已經發出錯誤的標頭。我試圖包含pluggable.php,因爲這與我以前爲Wordpress管理區編寫的插件有效,但我無法獲得解決公共前端錯誤的問題。

Username: <input type="text" name="user" value="" size="20" /><br /> 
Password: <input type="password" name="pass" value="" size="20" /><br /> 
<div style="display:none"> 
<input type="text" name="domain" value="emajenweb.webserversystems.com"/> 
<select name="port"> 
    <option selected="selected" value="2096"></option> 
</select>  
</div> 
<?php 
     if($_POST['domain'] && $_POST['user'] && $_POST['pass'] && !($_GET['failed'] == "1")) { 
      $port = $_POST['port']; // sets the port number to login to 
      // Get the protocol to use for this connection 
      switch($port) { 
       case '2096': // Secure Webmail 
       $protocol = 'https://'; 
       break; 
      } 
      // Build the URL 
      $redirectlocation = $protocol.$_POST['domain'].':'.$port.'/login/?user='.$_POST['username'].'&pass='.$_POST['pass'].'&failurl='.$_POST['failurl']; 
      header ("Location: ".$redirectlocation); // Send URL 
     } else { 
      $error = 1; 
      header ("Location: ".$_POST['failurl']); // Send URL if all neede information is not provided 
     } 
     ?> 

我有問題的代碼是:

header ("Location: ".$redirectlocation); // Send URL 
     } else { 
      $error = 1; 
      header ("Location: ".$_POST['failurl']); // Send URL if all neede information is not provided 

由於頭部已經發送的錯誤,我希望改變頭部位置值到JavaScript,但我不能......

我的表單工作正常,但沒有按照需要在自定義登錄頁面傳播失敗消息。已經發出已

Webmail Login

回答

0

錯誤頭是一個很常見的錯誤。這是由...已經發送的頭...引起的。當您向服務器發送響應時會發送標題。在你的情況下,它是:

Username: <input type="text" name="user" value="" size="20" /><br /> 
Password: <input type="password" name="pass" value="" size="20" /><br /> 
<div style="display:none"> 
<input type="text" name="domain" value="emajenweb.webserversystems.com"/> 
<select name="port"> 
    <option selected="selected" value="2096"></option> 
</select>  
</div> 

所以...如何解決這個問題?很簡單。只需將處理腳本前發送響應:

<?php 
     if($_POST['domain'] && $_POST['user'] && $_POST['pass'] && !($_GET['failed'] == "1")) { 
      $port = $_POST['port']; // sets the port number to login to 
      // Get the protocol to use for this connection 
      switch($port) { 
       case '2096': // Secure Webmail 
       $protocol = 'https://'; 
       break; 
      } 
      // Build the URL 
      $redirectlocation = $protocol.$_POST['domain'].':'.$port.'/login/?user='.$_POST['username'].'&pass='.$_POST['pass'].'&failurl='.$_POST['failurl']; 
      header ("Location: ".$redirectlocation); // Send URL 
     } else { 
      $error = 1; 
      header ("Location: ".$_POST['failurl']); // Send URL if all neede information is not provided 
     } 
?> 
Username: <input type="text" name="user" value="" size="20" /><br /> 
Password: <input type="password" name="pass" value="" size="20" /><br /> 
<div style="display:none"> 
<input type="text" name="domain" value="emajenweb.webserversystems.com"/> 
<select name="port"> 
    <option selected="selected" value="2096"></option> 
</select>  
</div> 

你應該參考這個SO線程的詳細信息:How to fix "Headers already sent" error in PHP