1

コードがかなり長いことはわかっています...しかし、探しているソリューションがシンプルで迅速であることを願っています。だから私はここで注文フォームで作業しているセッションを持っています。人がログインしているかどうかに応じて、2つのフォームがエコーされます。最初のifステートメントは、ユーザーがログインしている場合、すべてのことを行います(コードが完全ではないことはわかっていますが、私にとってはうまくいきます)。質問: 注文後にユーザーを自分のアカウントにリダイレクトするにはどうすればよいですか? }else{... が機能しない前にヘッダー関数を試しました。アカ​​ウント ページに直接移動しました。それらのフォームはすべてphp内ではなくhtml内にあったため、コードをオンラインで見つけることができなかったため、ヘッダーが機能しませんでした。何かアドバイス???

<?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{
4

3 に答える 3

1

ブラウザに何も書き込んでheader機能が動作することを期待することはできません。ヘッダーを設定するには、応答本文を空にする必要があります。

だから私は次のようなことをすることをお勧めします:

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
}

したがって、elsePOST データがないため、ページが最初に読み込まれるときにステートメントに含まれます。これにより、フォームと検証 JavaScript が出力されます。フォームが送信されると、リクエストが に到着しif、注文が行われ、クライアントがリダイレクトされます。

繰り返しifますが、ステートメントでは、s を作成することは許可されていませんecho。これに代わる非常に悪い方法は、リダイレクトを行う小さな JavaScript をエコーすることです (これはお勧めしません)。

<script>window.location.href = 'my_custom_page.php';</script>
于 2012-12-19T22:08:49.003 に答える
0

プロセスを構築する方法は次のとおりです。

  1. ユーザーがログインしていることを確認する
  2. メール フィールドを検証する (プレゼンス、フォーマットなど)
  3. データを MySQL に保存します。挿入が成功したら、郵送に進みますか?
  4. 情報をメールで送信してみてください。成功した場合は、ヘッダー関数を使用してリダイレクトします。
  5. 失敗した場合は、ページとエラー メッセージの出力に進みます。

ページに 1 文字でも出力またはレンダリングされている場合は、ページ ヘッダーを変更できないことに注意してください。

mail()また、送信者ヘッダーのサーバー情報を使用するため、メッセージが確実にジャンク フォルダーに移動するため、のメール配信手段を使用することを選択する必要があります。

于 2012-12-19T22:12:28.160 に答える
-1

JS を使用する場合は、html でいつでも実行できます。

<script>
  window.location.href = <?php echo $url; ?>
</script>
于 2012-12-19T22:14:09.210 に答える