2014-04-12 145 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