Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php脚本中提交后重定向_Php_Javascript_Html_Header - Fatal编程技术网

在php脚本中提交后重定向

在php脚本中提交后重定向,php,javascript,html,header,Php,Javascript,Html,Header,我知道代码很长…但我希望我正在寻找的解决方案简单快速。所以我有一个会议在这里处理我的订单。根据用户是否登录,我会回显两个表单。第一个if语句是,如果用户登录,它会完成所有这些工作(我知道代码并不完美,但它适合我)。问题是: 下单后如何将用户重定向到其帐户?在}else{…不起作用之前,我尝试了header函数,直接进入帐户页面。我无法在线找到代码,因为它们的表单都在html中,而不是php中,所以header不起作用。有什么建议吗 <?php $memberOrder = "";

我知道代码很长…但我希望我正在寻找的解决方案简单快速。所以我有一个会议在这里处理我的订单。根据用户是否登录,我会回显两个表单。第一个if语句是,如果用户登录,它会完成所有这些工作(我知道代码并不完美,但它适合我)。问题是: 下单后如何将用户重定向到其帐户?在}else{…不起作用之前,我尝试了header函数,直接进入帐户页面。我无法在线找到代码,因为它们的表单都在html中,而不是php中,所以header不起作用。有什么建议吗

<?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>&nbsp;</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
    and
    else
    。将代码保留在原始文件中的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>