在php脚本中提交后重定向
我知道代码很长…但我希望我正在寻找的解决方案简单快速。所以我有一个会议在这里处理我的订单。根据用户是否登录,我会回显两个表单。第一个if语句是,如果用户登录,它会完成所有这些工作(我知道代码并不完美,但它适合我)。问题是: 下单后如何将用户重定向到其帐户?在}else{…不起作用之前,我尝试了header函数,直接进入帐户页面。我无法在线找到代码,因为它们的表单都在html中,而不是php中,所以header不起作用。有什么建议吗在php脚本中提交后重定向,php,javascript,html,header,Php,Javascript,Html,Header,我知道代码很长…但我希望我正在寻找的解决方案简单快速。所以我有一个会议在这里处理我的订单。根据用户是否登录,我会回显两个表单。第一个if语句是,如果用户登录,它会完成所有这些工作(我知道代码并不完美,但它适合我)。问题是: 下单后如何将用户重定向到其帐户?在}else{…不起作用之前,我尝试了header函数,直接进入帐户页面。我无法在线找到代码,因为它们的表单都在html中,而不是php中,所以header不起作用。有什么建议吗 <?php $memberOrder = "";
<?php
$memberOrder = "";
$nonmemberOrder = "";
if(isset($_SESSION['id'])){
include_once "connect_to_mysql.php";
echo '<script type="text/javascript">
function validate_form ( ) {
var numbers = /^[0-9]+$/;
valid = true;
if ( document.memberOrder.memberNumber.value == "" ) {
alert ( "Membership number must be entered." );
valid = false;
}
if ( document.memberOrder.memberNumber.value.match(numbers)){
valid = true;
}else{
alert ( "You must only have numbers entered as Membership Number.");
valid = false;
}
if ( document.memberOrder.payment.value == "" ) {
alert ( "You must select a payment method." );
valid = false;
}
if ( document.memberOrder.orderLinks.value == "" ) {
alert ( "You must insert a link to your order." );
valid = false;
}
if ( document.memberOrder.size.value == "" ) {
alert ( "Size must not be blank." );
valid = false;
}
if ( document.memberOrder.cost.value == "" ) {
alert ( "Cost must not be blank." );
valid = false;
}
if ( document.memberOrder.cost.value.match(numbers)){
valid = true;
}else{
alert ( "You must only have numbers entered as your item cost.");
valid = false;
}
if (!document.memberOrder.checkbox.checked){
alert ( "You must agree to terms before placing your order.");
valid = false;
}
return valid;
}
</script>';
$memberNumber = preg_replace("[^0-9]", "", $_POST['memberNumber']);
$memberNumber = stripslashes($_POST['memberNumber']);
$size = preg_replace("[^a-zA-Z]", "", $_POST['size']);
$cost = preg_replace("[^0-9]", "", $_POST['cost']);
$cost = stripslashes($_POST['cost']);
$cost = strip_tags($cost);
$color = preg_replace("[^a-zA-Z]", "", $_POST['color']);
$color = stripslashes($_POST['color']);
$color = strip_tags($color);
$payment = $_POST['payment'];
$orderLinks = $_POST['orderLinks'];
$sql = mysql_query("INSERT INTO memberOrders (memberNumber, orderLinks, cost) VALUES
('$memberNumber', '$orderLinks', '$cost')") or die (mysql_error());
$memberOrder = '<form action="order.php" method="post" name="memberOrder" id="memberOrder" onsubmit="return validate_form ( );">
<table cellpadding="10" width="500px">
<tr>
<td><div align="left">Membership Number</div></td>
<td><input type="text" name="memberNumber" id="memberNumber" /></td>
</tr>
<tr>
<td><div align="left">Payment Type</div></td>
<td><input type="radio" name="payment" value="Bank Transfer" />Bank Transfer (recommended)<br/>
<input type="radio" name="payment" value="PayPal" />PayPal (additional 3% commission)<br/>
<input type="radio" name="payment" value="Western Union" />Western Union<br/>
<input type="radio" name="payment" value="MoneyGram" />MoneyGram<br/>
</td>
</tr>
<tr>
<td><div align="left">Link To Your Order</div></td>
<td><textarea rows="5" cols="20" name="orderLinks" ></textarea></td>
</tr>
<tr>
<td><div align="left">Size</div></td>
<td><input style="width:50px" type="text" size="25px" name="size" /></td>
</tr>
<tr>
<td><div align="left">Color</div></td>
<td><input type="text" size="25px" name="color" /></td>
</tr>
<tr>
<td><div align="left">Cost of Your Item</div></td>
<td><input style="width:50px" type="text" name="cost" /></td>
</tr>
<tr>
<td><div align="left">Order Agreement</div></td>
<td><input type="checkbox" name="checkbox" checked="checked" value="check" /><a href="#" id="agreement">View Order Agreement</a></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="submit" value="Place Order!" /></td>
</tr>
</table>
</form>';
echo $memberOrder;
// Start assembly of Email Member the activation link
$to = "yankeesmarket@gmail.com";
// Change this to your site admin email
$from = "$memberNumber";
$subject = "Member Order Placed";
//Begin HTML Email Message where you need to change the activation URL inside
$message = '<html>
<body bgcolor="#FFFFFF">
Member Number: '.$memberNumber.' <br/><br/>
Payment Type: '.$payment.' <br/><br/>
Order Links: '.$orderLinks.' <br/><br/>
Size: '.$size.' <br/><br/>
Color: '.$color.' <br/><br/>
Order Cost: '.$cost.' <br/><br/>
</body>
</html>';
// end of message
$headers = "From: $from\r\n";
$headers .= "Content-type: text/html\r\n";
$to = "$to";
// Finally send the activation email to the member
mail($to, $subject, $message, $headers);
}else{
您不能向浏览器写入任何内容,并期望标题
功能正常工作。要设置标题,响应正文必须为空
因此,我建议采取以下措施:
if(isset($_POST['submit'])){
// do the INSERT and whatnot
// when finished call the header function
header("Location: my_custom_page.php");
}
else{
// output the form, javascript and what you need
}
因此,第一次加载页面时,它将进入else
语句,因为您没有POST数据。这将打印表单和验证JavaScript。提交表单时,请求将到达if
,并下订单,然后重定向客户端
同样,在if
语句中,您不允许进行任何echo
s。除此之外,一个非常糟糕的替代方法是回显一个执行重定向的小javascript(我不建议这样做。永远):
window.location.href='my_custom_page.php';
以下是我将如何构建流程:
验证用户是否已登录
验证电子邮件字段(状态、格式等)
将数据存储在MySQL中。如果插入成功,是否继续邮寄
尝试用信息发送邮件。如果成功,请使用函数重定向
如果失败,则继续输出页面和任何错误消息
请记住,即使已向页面输出或呈现一个字符,也不能更改页面标题
此外,您还应选择使用其他邮件传递方式,因为mail()
邮件将进入垃圾邮件文件夹,因为它使用发件人标题中的服务器信息。如果您想使用JS,您可以随时在html中执行以下操作:
<script>
window.location.href = <?php echo $url; ?>
</script>
window.location.href=
你能显示标题的样子吗?“没有工作”-你是什么意思?你想在订单之后重定向吗!(提交)…等等,Order.php与代码是同一页还是另一页?因为如果你点击“提交”如果您不编写脚本来防止这种情况发生,则需要使用order.php。Eric,header函数将出现在if语句中,当用户点击submit后,它会将用户带到其帐户以查看其订单,因此类似于header(“member_account.php”);在else语句的底部,我想使用print“;语句将它们重定向到感谢消息。或者,将所有呈现的元素包装在ob_start()ob_flush_end()(我想是吧?)是的,这也是一种可能性。我在2年的工作经验下就使用过它,但现在我没有。我想它有它的优点和缺点,但一般来说,我不推荐在这种情况下使用。Eduard,我理解你的意思,但我的else语句现在为非注册用户输出表单。我需要它。当页面加载时,可以为注册用户加载if语句,也可以为非注册用户加载else语句。在提交表单后,我试图在if结尾和else结尾写一个标题,你知道我的意思吗?在这种情况下,在单独的PHP页面上处理帖子,然后从那里重定向if
andelse
。将代码保留在原始文件中的else(表单HTML代码)中,并将发送的电子邮件移动到一个单独的文件中,例如称为process\u order.php
。然后您只需将表单的action
更改为process\u order.php
。最好有这样的内容:if(!isset>)($_POST['submit'])回显“您不能直接访问此页面”
在流程页面中,因此人们无法通过浏览器访问它。将数据发送给自己的另一个邮件功能是什么?我是这方面的初学者,所以我只是按照教程并根据自己的需要更改数据。我将使用什么其他功能?我进行的测试将信件发送到我的收件箱…我在w方面取得了很多成功这要求您在使用SMTP服务器时包含电子邮件凭据。确切的原因是什么?当标题重定向延迟时,这是一个简单的解决方案。使用JavaScript实现站点关键功能是一个坏主意。它假定启用了JavaScript。您可以使其更好,但您必须提供
解决方案n在这种情况下,这不起任何作用。老实说,将窗口.location.href
更改为非功能性的有什么好处?
<script>
window.location.href = <?php echo $url; ?>
</script>