1

これは説明するのが少し難しいです.. 写真を使うとおそらく役に立ちます!

1.ユーザーは簡単にフォームを送信します。


2.セッションが設定され、設定されたセッション変数が表示されます。


3.ユーザーが CAPTCHA を間違って入力した場合、または正しく取得して次のページに進むと、inp_nameinp_username、およびinp_emailセッション値が表示されなくなります。inp_password値は残ります (ただし、セッション値が設定されると、md5() で暗号化されます。

フォーム:

<form action="./" method="post" class="form-300">

    <div class="title top">Full Name</div>
    <input type="text" name="name" value="<?=$_POST['name'] ?>" />

    <div class="title top">Username</div>
    <input type="text" name="username" value="<?=$_POST['username'] ?>" />

    <div class="title top">Email</div>
    <input type="text" name="email" value="<?=$_POST['email'] ?>" />

    <div class="title top">Password</div>
    <input type="password" name="password" />

    <input type="submit" name="submit" value="Sign Up" />
    <div class="tc">By clicking Sign Up, you agree to the Terms of Use, Privacy Policy and that you are or over the age of 13.</div>
    <span class="sep-text">or</span>
    <a href="./?action=fb" class="btn-300 btn-fb">Sign Up using Facebook</a>
    <br /><br /><br />
</form>

キャプチャ:

<?php ob_start(); if(session_id() != 'uv241112'){
session_name("uv241112"); session_start();
    $_SESSION['inp_isset'] = "eAK28";
    $_SESSION['inp_name'] = $_POST['name'];
    $_SESSION['inp_username'] = $_POST['username'];
    $_SESSION['inp_email'] = $_POST['email'];
    $_SESSION['inp_password'] = md5($_POST['password']);
}else{ session_name("uv241112"); session_start(); } ?>
        <form action="./" method="post">
        <?php

        require_once('../resources/recaptchalib.php'); $publickey = "xxxxxxxxxx"; $privatekey = "xxxxxxxxxxxxxx";

        # the response from reCAPTCHA
        $resp = null;
        # the error code from reCAPTCHA, if any
        $error = null;

        if ($_POST["submit_recaptcha"]) {
                $resp = recaptcha_check_answer ($privatekey,
                                                $_SERVER["REMOTE_ADDR"],
                                                $_POST["recaptcha_challenge_field"],
                                                $_POST["recaptcha_response_field"]);

                if ($resp->is_valid) {
                        echo "You got it!";
                } else {
                        ?><div class="alert alert-error alert-440">Sorry, the text you entered was incorrect.</div><?php
                        # set the error code so that we can display it
                        $error = $resp->error;
                }
        }
        echo recaptcha_get_html($publickey, $error);
        ?>
            <br/>
            <input type="submit" name="submit_recaptcha" value="Check" class="btn-300 btn-green" />
            </form>

            <?php echo $_SESSION['inp_name']; ?>
            <?php echo $_SESSION['inp_username']; ?>
            <?php echo $_SESSION['inp_email']; ?>
            <?php echo $_SESSION['inp_password']; ?>

<?php ob_flush(); ?>
4

4 に答える 4

1

フォームの送信を間違った方法でチェックしようとしていると思います。セッション名がまだ存在するかどうかは表示されません。実際、どの場合でも、すでにセッションを開始しているはずです。

Session_start() は、各ページの最初にある必要があります。

投稿の値については、非表示のフォームの値を検証して使用し、送信したページを特定する必要があります。例えば:

<form method="post">
<input type="text" name="email">
<input type="hidden" name="emailpage" value="1">
<input type="submit" name="send" value="send">
</form>

続いてフォームチェック

<?php
    Session_start();
    If (!empty($_POST['emailpage'])) {
        // do variable validation
        $_SESSION['email'] = $validatedemail;
    }

条件ステートメント session_start は必要ありません。セッション名を設定する必要もない可能性もあります。

掲載されているコードは携帯電話から投稿されたサンプルコードですので、問題があるかもしれません。

于 2013-01-13T07:23:40.510 に答える
0

session_id と session_name に関する質問です。セッション開始前に session_name を設定していることに気付きました。なぜ session_name ではなく session_id をテストするのかと思っていました。

--> ... if(session_id() != 'uv241112'){
                    session_name("uv241112"); ...

おそらくそうあるべきです

--> ... if(session_name() != 'uv241112'){
                    session_name("uv241112"); ...
于 2013-01-13T06:39:44.047 に答える
0

コードの実際の問題は、POST 値に基づいてページの上部にセッション変数を設定することです。最初に送信された後は機能しますが、2 回目に送信すると、これらの値が再度 POST されないため、セッション変数が空に設定されます。(空白行の MD5 であるため、パスワードは引き続き表示されます。MD5 の値を比較すると、それらが異なっていることが確認できます)

再び反対票を投じる前にそれらを読むことを気にしない人へのコメントから自分自身を引用します

何を変更するかを簡単に確認するには...

$_SESSION['inp_isset'] = "eAK28";
$_SESSION['inp_name'] = $_POST['name'];
$_SESSION['inp_username'] = $_POST['username'];
$_SESSION['inp_email'] = $_POST['email'];
$_SESSION['inp_password'] = md5($_POST['password']);

に:

if(isset($_POST['username']) {
    $_SESSION['inp_isset'] = "eAK28";
    $_SESSION['inp_name'] = $_POST['name'];
    $_SESSION['inp_username'] = $_POST['username'];
    $_SESSION['inp_email'] = $_POST['email'];
    $_SESSION['inp_password'] = md5($_POST['password']);
}

これはやや大雑把な例ですが、コードを少しクリーンアップする必要があるためです。^^

于 2013-01-13T06:59:32.243 に答える
-1

ファイルを再コーディングし、大幅にクリーンアップしましたが、機能しませんでした。しかし、次のコードを新しいファイルに入れ、フォームを送信した後にそこに行きました。出来た。したがって、それが理にかなっている場合は、新しいファイルから作業を進めます。ご協力いただきありがとうございます。

session_name("uv241112"); session_start();
echo $_SESSION['inp_name'];
echo $_SESSION['inp_username'];
echo $_SESSION['inp_email'];
echo $_SESSION['inp_password'];
于 2013-01-13T07:38:58.860 に答える