0

プロトタイプのeコマースWebサイトを作成中ですが、訪問者の名前をフラットファイルデータベース「購入」に保存するのに問題があります。

<body>

    <h1>Confirm Selection</h1>

    <form action="write.php" method="post">
        <table>

            <tr><th></th><th></th><th></th><th>Price</th></tr>

            <?php              
               $visitor = $_POST['visitor'];
               echo "<p>".'Hello '."<b>".$visitor."</b>&nbsp;".'please confirm your purchase(s) below.'."</p>";
            ?>

        </table>

上記の確認ファイルは、ユーザーが前のフォームで名前として入力した$ visitorという変数を作成します。次に、この変数を取得し、ユーザーが選択を確認したら、それを「write.php」に渡します。処理され、購入ファイルに書き込まれるファイル。

私の「write.php」ファイルの一部を以下に示します。

<?php
        if (!($data = file('items.txt'))) {
            echo 'ERROR: Failed to open file! </body></html>';
            exit;
        }

        $now = date(' d/m/y H:i:s ');

        foreach ($_POST as $varname => $varvalue) {
            foreach ($data as $thedata) {
                list($partno, $name, $description, $price, $image) = explode('|', $thedata);
                if ($partno == $varname) {

                    $myFile = "purchases.txt";
                    $fh = fopen($myFile, 'a') or die("can't open file\n");

                    $content = $now . "|" . $partno . "|" . $name . "|" . $price . "\n";

                    if (!(fwrite($fh, $content))) {
                        echo "<p>ERROR: Cannot Write ($myFile)\n</p>";
                        exit;
                    } else {
                        echo "<p>Transaction Completed!</p>";
                        fclose($fh);
                    }
                }
            }
        }
        ?>
4

1 に答える 1

0

購入ページの送信が write.php に移動する場合、隠し変数が機能する可能性があります。

<form action="write.php" method="post">
    <table>

        <tr><th></th><th></th><th></th><th>Price</th></tr>

        <?php              
        $visitor = $_POST['visitor'];
        echo "<p>".'Hello '."<b>".$visitor."</b>&nbsp;".'please confirm your purchase(s) below.'."</p>";
        ?>
        <input type="hidden" name="visitor" value="<?=$visitor?>"/> <!-- added line to send visitor -->
    </table>

あなたのwrite.phpで:

    if (!($data = file('items.txt'))) {
        echo 'ERROR: Failed to open file! </body></html>';
        exit;
    }
    $visitor = $_REQUEST['visitor']; // added line, now you have visitor
    $now = date(' d/m/y H:i:s ');

PS: ユーザーは訪問者のために変な文字を入力できるため、htmlentities 関数が必要になる場合があります。

<input type="hidden" name="visitor" value="<?=htmlentities($visitor)?>">
于 2013-03-14T14:37:03.150 に答える