联系表格+重定向不工作

问题描述:

我做了一个简单的“姓名和电子邮件”联系表,我希望它在信息提交后重定向到“page2.html”。联系表格+重定向不工作

我不能得到它的工作。

这是我为提交表单所做的html部分。我仍然不确定“名称”部分代表什么,id部分(带短划线)是指CSS样式。但无论如何,这就是我如何让联系人“姓名和电子邮件”的形式。

<form method="post" action="submission.php" name="contactform" id="contact-form"> 
     <fieldset> 
     <label for=name accesskey=U><span class="required">*</span> Name</label> 
     <input name="name" type="text" id="name" size="30" value="" /> 
     <br /> 
     <label for=email accesskey=E><span class="required">*</span> Email</label> 
     <input name="email" type="text" id="email" size="30" value="" /> 
     <br /> 
     <input type="submit" class="submit" id="submit-button" value="Submit" /> 
     </fieldset>   
</form> 

和PHP的一部分被回收,我尝试在最后一行进入头部与重定向,但它不工作,它的作用是在打印出我在进入信息浏览器中打开了一个空白页最好形成。

我想有该信息提交后的形式重定向,所以...感谢您的帮助,提前:d

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<script type="text/javascript" src="jquery-1.3.2.min.js"></script> 
<script src="http://www.google.com/jsapi"></script> 
<script type="text/javascript">google.load("jqueryui", "1.5.2");</script> 
<? 
if($_POST['name']!=""){ 


    $headers = "From: Webmaster"; 
    $message = 
    strtoupper($_POST['name'])." 
".strtoupper($_POST['email'])." 
"; 
    echo str_replace("\n","<br />", $message); 
    $headers2 = "From: Sender Name <[email protected]>\nContent-Type:  text/plain; charset=UTF-8; format=flowed\nMIME-Version: 1.0\nContent-Transfer-Encoding:  8bit\nX-Mailer: PHP\n"; 
    $message2 = "Message 
"; 

    mail("[email protected]", "Subject", $message, $headers); 
    mail("$_POST[email]", "Subject", $message2, $headers2); 

    $myFile = "submissions.txt"; 
    $fh = fopen($myFile, 'a') or die("can't open file"); 
    $stringData =  "$_POST[name]*$_POST[email]*".$_SERVER['REMOTE_ADDR']."*".date("d-m-Y H:i")." 
"; 
    fwrite($fh, $stringData); 
    fclose($fh); 

} else { 
    echo "You didnt enter anything"; 
    ?> 
    <script language="javascript"> 
    alert("You didnt enter anything"); 
    </script> 
    <? 
} 
?> 

表单中的name属性会给$ _POST数组是名字。例如,在与方法=“邮报”的形式使用

<input type="text" name="awesometext"/> 

将使该文本字段的值到$ _ POST访问[“awesometext”]在PHP脚本,你在表单的动作定义。

如果在发送电子邮件后,您想使用header()将用户重定向到另一个页面,那么在此之前不必在页面上生成输出。摆脱所有的回声和html输出,所以删除你在开始的HTML。如果你想使用header(),你可能只有php代码没有输出。您可以使用header('Location:somepage.php');指向somepage.php。然后

您的代码将是:需要

<?php 
if($_POST['name']!=""){ 


$headers = "From: Webmaster"; 
$message = 
strtoupper($_POST['name'])." 
".strtoupper($_POST['email'])." 
"; 
echo str_replace("\n","<br />", $message); 
$headers2 = "From: Sender Name <[email protected]>\nContent-Type:  text/plain; charset=UTF-8; format=flowed\nMIME-Version: 1.0\nContent-Transfer-Encoding:  8bit\nX-Mailer: PHP\n"; 
$message2 = "Message 
"; 

mail("[email protected]", "Subject", $message, $headers); 
mail("$_POST[email]", "Subject", $message2, $headers2); 

$myFile = "submissions.txt"; 
$fh = fopen($myFile, 'a') or die("can't open file"); 
$stringData =  "$_POST[name]*$_POST[email]*".$_SERVER['REMOTE_ADDR']."*".date("d-m-Y H:i")." 
"; 
fwrite($fh, $stringData); 
fclose($fh); 

//header here 
header('Location:somepage.php'); 

} else { 
echo "You didnt enter anything"; 
?> 

标题()被生成的任何输出之前被调用。上面的代码应该可以工作。

+0

感谢您的答复!在name属性中我感到困惑的是,表单的属性名称为“contactform”。我没有看到submission.php如何使用它,是否有必要? 此外,删除回声和html ...你能展示你对我发布的示例代码意味着什么吗?林有点新,在这个,你可以看到:) – TM23 2012-07-24 09:57:36

+0

将代码粘贴到我的答案 - 见上文。 每当你收到错误信息“Warning:Can not modify header information - headers already sent by ...”,这意味着你执行了header(),虽然输出已经在同一页面上回显出来,这是不允许的感觉 - 用户应该在网站上看到某些东西,或者被引导到另一个页面 – weltschmerz 2012-07-24 11:49:50

+0

另一个注意事项:使用' weltschmerz 2012-07-24 11:50:51

$a = mail("[email protected]", "Subject", $message, $headers); 
$b = mail("$_POST[email]", "Subject", $message2, $headers2); 

if($a && $b) 
{ 
    echo '<script>document.location="page2.html"; </script>' 
} 
+0

我收到错误说:“警告:不能修改标题信息 - 在第23行在submission.php中已经发送...” – TM23 2012-07-24 09:53:10

+0

已编辑,现在检查 – asprin 2012-07-24 09:55:01

+0

我在原始文章中输入的代码似乎正在工作所以自从时间问题,我会使用它。唯一的问题是 - 每次我提交表单时,它都会在浏览器中闪烁一个空白的PHP页面(包含输入的信息),然后重定向。是否有避免显示的PHP页面? – TM23 2012-07-25 05:53:30

如果脚本中有任何输出,则不能发送php重定向标头。无论是你的PHP部分改变页面的顶部,但你可以在PHP

header("location:page2.html"): 

做或使用JavaScript重定向的PHP

echo '<script>document.location="page2.html"; </script>'; 
+0

请注意,用户可能已经关闭了JavaScript - 同样,依赖于客户端功能的重定向通常不如服务器端使用PHP做的好。 – weltschmerz 2012-07-24 09:30:54

+0

我试着回声,它的工作原理,但问题是我输入表单中的信息后,点击提交 - thr浏览器(铬)第一次加载一个空白页面显示信息输入,然后1-2秒后重定向到所需页面... – TM23 2012-07-24 09:48:29

+0

需要此行编辑echo str_replace(“\ n”,“
”,$ message); 注释掉$ message = str_replace(“\ n”,“
”,$ message); – mahen3d 2012-07-24 10:43:42