-2

これは私が取り組んでいるコードです(これはこのチュートリアルの一部ですhttp://www.homeandlearn.co.uk/php/php4p9.html

これは問題なく動作します

`基本的なHTMLフォーム

<?PHP

if (isset($_POST['Submit1'])) {
$username=$_POST['username'];
if($username=="ken"){
    print("you the man");
    }
    else {
        print("you are not supposed to be here");
        }
    }
    else{
        $username="";
        }

?>

</head>
<body>

<FORM NAME ="form1" METHOD ="post" ACTION = "basicForm.php">

username: <INPUT TYPE = "TEXT" VALUE ="<?PHP print $username;?>"NAME="username">

<INPUT TYPE = "Submit" Name = "Submit1" VALUE = "Login">

</FORM>
</body>
</html>`

しかし、これはしません

<html>
<head>
<title>A BASIC HTML FORM</title>

<?PHP


if (isset($_POST['Submit1'])) {

$username=$_POST['username'];
$nickname=$_POST['nickname'];
if($username=='ken'and$nickname=='hawk'){
    print("you the man");
    }
    else {
        print("you are not supposed to be here");
        }
    }
    else{
        $username=""and$nickname="";
        }

?>

</head>
<body>

<FORM NAME ="form1" METHOD ="post" ACTION = "testformken.php">

nickname: <input type="text" VALUE ="<?PHP print $nickname;?>" name="nickname" /><br />
username: <input type="text" VALUE ="<?PHP print $username;?>" name="username" />

<INPUT TYPE = "Submit" Name = "Submit1" VALUE = "Login">

</FORM>
</body>
</html>

この通知を受け取ります:未定義の変数:30行目のC:\ wamp \ www\testformken.phpのニックネームコールスタック#TimeMemoryFunctionLocation10.1800367256{main}().. \ testformken.php:0 "name =" nickname "/>

私はいくつかのことを台無しにしました、そして私が変わるならば

nickname: <input type="text" VALUE ="<?PHP print $nickname;?>" name="nickname" /><br />
                      to
nickname: <input type="text" VALUE ="<?PHPprint$nickname;?>" name="nickname" /><br />

未定義の変数を取得しませんが、値をに変更してもニックネームは出力されません

<?PHP print $username;?> 

ここにコードを入力してください私は未定義の変数を取得しません。

4

2 に答える 2

7

あなたは単に$nicknameあなたのサイトで常に印刷しているだけですが、あなたはそれをif-block(if (isset($_POST['Submit1'])) {)が入力されたときにのみ定義します。

これを回避するには、印刷パーツを次のように変更します。

<?php print isset($nickname) ? $nickname : ''; ?>

ここでは、三項演算子(if-elseの省略形)を使用していることに注意してください。これは、初心者の場合は新しいかもしれません。

XSS攻撃を回避するには、 Jackが提案したように、実際の使用法でエスケープせずに変数を出力しないでください(チュートリアルの場合は単純なままで構いません)。

于 2012-05-12T08:37:34.430 に答える
1

実際、ページが最初に読み込まれるとき、変数「ニックネーム」を見つけることができません。これは、その変数を「if」条件で作成し、フォームが送信されたときにのみ作成できるためです。

したがって、変数「ニックネーム」が作成されているかどうかを確認してから、その値を入力に割り当てる必要があります。次のコードのように実行できます。

nickname: <input type="text" VALUE ="<?PHP if(isset($nickname)){ print $nickname; } ?>" name="nickname" />
于 2012-05-12T08:45:55.407 に答える