2014-04-12 142 views
6

我創建了一個HTML表單PHP返回頁面表單提交後

<form action="http://localhost/php/insert.php" method="post"> 
    Barcode: <input type="text" name="barcode" /><br><br> 
    Serial: <input type="text" name="serial" /><br><br> 
    <input type="submit" /> 
</form> 

使用這個PHP節省到我的數據庫:

<?php 
$con = mysql_connect("example","example",""); 
if (! $con) { 
    die('Could not connect: ' . mysql_error()); 
} 
mysql_select_db("database", $con); 

$sql = "INSERT INTO asset (barcode, serial) 
     VALUES ('$_POST[barcode]','$_POST[serial]')"; 

if (! mysql_query($sql, $con)) { 
    die('Error: ' . mysql_error()); 
} 
mysql_close($con) 
?> 

的形式保存到數據庫,但頁面只是當您按下提交,這是一個空白頁面時,請去http://localhost/php/insert.php。我怎樣才能讓它留在同一頁面,只顯示一條消息或什麼?

回答

6

請注意,重定向HTTP_REFERER通常是片狀和不可信的,所以最好的方法是將URL與請求一起發送,或者如果它來自另一臺服務器,則可以構建特定的傳遞以用於特定網站/網址。最好的方法是通過將請求提交給URL來了解URL;另外兩個可能不是最佳的。

表單處理完成後,輸出任何東西(這將拋出一個錯誤)之前:

header("Location: {$_SERVER['HTTP_REFERER']}"); 
exit; 

根據您的處理結果可能是什麼,你可能錯誤追加到URL:

if ($query_does_not_execute) { 
    $errcode = "error_code=003"; 
} 

$referer = $_SERVER['HTTP_REFERER']; 

if ($errcode) { 
    if (strpos($referer, '?') === false) { 
     $referer .= "?"; 
    } 

    header("Location: $referer&$errcode"); 
} else { 
    header("Location: $referer"); 
} 
exit; 

然後在頁面上,您可以顯示錯誤。或者,您也可以重定向到一個頁面來處理不同種類的錯誤。這是多種不同的解釋。

+0

yeh我得到'未定義索引:REFERER' –

+0

如果它來自HTTPS頁面,則REFERER將不可用,因此無法從$ _SERVER中檢索它。 – Ashley

+0

@CarlaDessi - 我錯了鍵,它是'HTTP_REFERER'。請注意,它也有點片面,因爲它可以由瀏覽器設置(或未設置或欺騙)。 –

3

您可以使用PHP's Header() function像這樣:

header("Location: your-page.php"); 
exit; 

你需要確保沒有輸出(即回送任何東西,或任何HTML等)的頭調用之前或將無法正常工作。

+0

我想讓它回到它來自的頁面,它位於不同的服務器上。 –

+0

如果它來自HTTPS頁面,那麼這是不可能的,除非URL通過帶請求的參數傳遞給您。 – Ashley

-1

在您的表單動作中使用此操作$_SERVER['PHP_SELF'];它將滿足您的要求。

0

我找到的另一種方法是使用html的<meta>重定向。把它放在你的http://localhost/php/insert.php腳本中。處理後重定向到所需的頁面。

<?php 

switch ($INPUT['task']) 
{ 
    case 'insert_and_redirect': 
      insertForm(); 
      $h = '<html><head>'; 
      $h .= '<meta http-equiv="refresh" content="0; URL=/adjustments/">'; 
      $h .= '</head></html>'; 
      echo $h; 
     break; 
    case 'edit': 
     # editForm(); 
     break; 
    case 'delete': 
     deleteRecord(); 
     break; 
    default: 
     break; 
} 

?> 

可能不安全,但如果你在私人局域網應該沒事。
-Cheers