-2

ユーザー名を要求し、次のページに名前を表示してスコアを追加する電卓のような Web アプリケーションを作成しています。3 つの問題があります。

  1. ユーザー名は 2 ページ目に表示されません
  2. スコアは加算されません
  3. プレイヤー 1 のスコアを入力すると、プレイヤー 2 のスコアはゼロにリセットされ、その逆も同様です。

このページには次の場所からアクセスできます: ripdvd.x10.mx/index.php よろしくお願いします!

先頭ページ:

<!DOCTYPE html>

<html>

<head>
<title>Select Players</title>
<link rel=StyleSheet href="style.css" type="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>

<body>
    <form method="post" action="scoregen.php">
    <p class="par">
        <label for="player1">Please type in the one of the players first name:</label>
            <input type="text" id="player1" name="player1" size="17"  maxlength="17" class="textbox" />
    </p>

    <p class="par">
        <label for="player2">Please type in another players first name:</label>
            <input type="text" id="player2" name="player2" size="17"  maxlength="17" class="textbox" />
    </p>
        <input type="submit" class="button" name="button" value="Start Playing!" />


    </form>

</body>

</html>

2 番目のページ (スコアを表示し、それらを更新する方法を提供します)

<?php
// Get data from HTML form.
//Gets the player names
$player1 = $_POST['player1'];
$player2 = $_POST['player2'];

$addScore1 = $_POST['addScore1'];
$addScore2 = $_POST['addScore2'];

$oldScore1 = $_POST['oldScore1'];
$oldScore2 = $_POST['oldScore2'];

$curr1=$_COOKIE["score1"]+$addScore1;
$curr2=$_COOKIE["score2"]+$addScore2;
setcookie("score1", $_COOKIE["score1"]+$addScore1, time()+3600);
setcookie("score2", $_COOKIE["score2"]+$addScore2, time()+3600);

//Reset cookies if reset button is 't', which makes it clear scores
if ($clse = t){
setcookie ("score1", "", time() - 3600);
setcookie ("score2", "", time() - 3600);
}


// Generate HTML form
?>
<!DOCTYPE HTML>
<html>
    <head>
        <title>Score Add</title>
        <link rel=StyleSheet href="style.css" type="text/css">
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </head>

    <body>
    <form method="post" action=" ">

     <p class="par">
            <label for="addScore1">Enter your score, <?php echo $player1; ?>:</label>
            <input type="text" name="addScore1" id="addScore1" class="textbox" />
            <input type="hidden" name="oldScore1" id="oldScore1" value="<?php echo $oldscore1; ?>" />
        <input type="submit" class="button" value="Add Score!" />
    </p>

    <p class="par">
        <label for="addScore2">Enter your score, <?php echo $player2; ?>:</label>
        <input type="text" name="addScore2" id="addScore2" class="textbox"/>
        <input type="hidden" name="oldScore2" id="oldScore2" value="<?php echo $oldscore2; ?>" />
        <input type="submit" class="button" value="Add Score!"/>
        </form>
         </p>

         <form method="post" action=" ">
         <input type="hidden" name="clsc" id="clsc" value="t" />
         <input type="submit" class="reset" value="Clear Scores" />
         </form>
<!--Shows player and score-->
    <p class="par"><?php echo $player1;?>:<?php echo $curr1?></p>
    <p class="par"><?php echo $player2;?>:<?php echo $curr2?></p>
    </body>
</html>
4

3 に答える 3

1

これを試してください:

index.php

    <!DOCTYPE html>

<html>

<head>
<title>Select Players</title>
<link rel=StyleSheet href="style.css" type="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>

<body>
    <form method="post" action="scoregen.php">
    <p class="par">
        <label for="player1">Please type in the one of the players first name:</label>
            <input type="text" id="player1" name="player1" size="17"  maxlength="17" class="textbox" />
    </p>

    <p class="par">
        <label for="player2">Please type in another players first name:</label>
            <input type="text" id="player2" name="player2" size="17"  maxlength="17" class="textbox" />
    </p>
        <input type="submit" class="button" name="names" value="Start Playing!" />


    </form>

</body>

</html>

scoregen.php

<?php
    // Get data from HTML form.
    //Gets the player names
    if(isset($_POST['player1'])){
        $player1 = $_POST['player1'];
    }else{
        $player1 = "No Player"; 
    }   

    if(isset($_POST['player2'])){
        $player2 = $_POST['player2'];
    }else{
        $player2 = "No Player"; 
    }   

    //CHECKS IF THE ADDSCORE BUTTON IS HIT
    if(isset($_POST['AddScore'])){  
        $oldScore1 = $_POST['oldScore1'];
        $oldScore2 = $_POST['oldScore2'];

        if(!empty($_POST['addScore1'])){
            $addScore1 = $_POST['addScore1'];
        }else{
            $addScore1 = 0;
        }

        if(!empty($_POST['addScore2'])){
            $addScore2 = $_POST['addScore2'];
        }else{
            $addScore2 = 0;
        }

    }else{//INITIALIZES THE SCORES TO ZERO; OR SETS IT TO ZERO IF THE CLEAR SCORES BUTTON IS HIT
        $oldScore1 = 0;
        $oldScore2 = 0;
        $addScore1 = 0;
        $addScore2 = 0;

    }

    $curr1 = $oldScore1 + $addScore1;
    $curr2 = $oldScore2 + $addScore2;

    // Generate HTML form
    ?>
    <!DOCTYPE HTML>
    <html>
        <head>
            <title>Score Add</title>
            <link rel=StyleSheet href="style.css" type="text/css">
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        </head>

        <body>
        <form method="post" action=" ">

         <p class="par">
                <label for="addScore1">Enter your score, <?php echo $player1; ?>:</label>
                <input type="text" name="addScore1" id="addScore1" class="textbox" />

                <input type="hidden" name="oldScore1" id="oldScore1" value="<?php echo $curr1; ?>" />
            <input type="submit" name="AddScore" class="button" value="Add Score!" />
        </p>

        <p class="par">
            <label for="addScore2">Enter your score, <?php echo $player2; ?>:</label>
            <input type="text" name="addScore2" id="addScore2" class="textbox"/>

            <input type="hidden" name="oldScore2" id="oldScore2" value="<?php echo $curr2; ?>" />
            <input type="submit" name="AddScore" class="button" value="Add Score!"/>       
        </p>
                <input type="hidden" name="player1" value="<?php echo $player1;?>"/>
                <input type="hidden" name="player2" value="<?php echo $player2;?>"/>
        <p class="par">
              <input type="submit" class="reset" value="Clear Scores" />
        </p>

        </form>
    <!--Shows player and score-->
        <p class="par"><?php echo $player1;?>:<?php echo $curr1?></p>
        <p class="par"><?php echo $player2;?>:<?php echo $curr2?></p>
        </body>
    </html>

1) ここでは Cookie を使用しませんでした。実際にはスコアには必要ありませんが、ユーザー名を保存するために使用できます。

2) 実際には addScore ボタンを 1 つだけ配置できますが、このコードでは問題ありません。とにかくスコアを追加します。

3) POST の要素が設定されているかどうか、または値があるかどうかを常に確認します。だから私はスコアと名前をチェックしました。

4) コードのこの行: を に<input type="hidden" name="oldScore2" id="oldScore2" value="<?php echo $oldscore2; ?>" /> 変更し$oldscoreまし$currた。これは、次の送信で $curr スコアが oldscore として必要になり、スコアが加算されるためです。

于 2013-03-07T02:41:01.277 に答える
1

私はあなたのコードにいくつかの変更を加えました (Cookie の削除を含む - 大丈夫だといいのですが)。Cookie なしで生活できる場合は、これを試してください。

<?php
// Get data from HTML form.
// Gets the player names
$player1 = $_POST['player1'];
$player2 = $_POST['player2'];

if ($_POST['addScore1'] == null)
    $addScore1 = 0;
else
    $addScore1 = $_POST['addScore1'];

if ($_POST['addScore2'] == null)
    $addScore2 = 0;
else
    $addScore2 = $_POST['addScore2'];

if ($_POST['oldScore1'] == null)
    $oldScore1 = 0;
else
    $oldScore1 = $_POST['oldScore1'];

if ($_POST['oldScore2'] == null)
    $oldScore1 = 0;
else
    $oldScore2 = $_POST['oldScore2'];

$curr1=$oldScore1+$addScore1;
$curr2=$oldScore2+$addScore2;

if ($_POST['clse'] == "t"){
    $curr1 = 0;
    $curr2 = 0;
}

// Generate HTML form
?>
<!DOCTYPE HTML>
<html>
    <head>
        <title>Score Add</title>
        <link rel=StyleSheet href="style.css" type="text/css">
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </head>

    <body>
        <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
            <p class="par">
                <label for="addScore1">Enter your score, <?php echo $player1; ?>:</label>
                <input type="text" name="addScore1" id="addScore1" class="textbox" />
                <input type="hidden" name="oldScore1" id="oldScore1" value="<?php echo $curr1; ?>" />
                <input type="submit" class="button" value="Add Score!" />
            </p>
            <p class="par">
                <label for="addScore2">Enter your score, <?php echo $player2; ?>:</label>
                <input type="text" name="addScore2" id="addScore2" class="textbox"/>
                <input type="hidden" name="oldScore2" id="oldScore2" value="<?php echo $curr2; ?>" />
                <input type="submit" class="button" value="Add Score!"/>
            </p>
            <input type="hidden" name="player1" value="<?PHP echo $player1;?>" />
            <input type="hidden" name="player2" value="<?PHP echo $player2;?>" />
        </form>

        <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
            <input type="hidden" name="clsc" id="clsc" value="t" />
            <input type="submit" class="reset" value="Clear Scores" />
        </form>

        <!--Shows player and score-->
        <p class="par"><?php echo $player1;?>:<?php echo $curr1?></p>
        <p class="par"><?php echo $player2;?>:<?php echo $curr2?></p>
    </body>
</html>

実際にこれを実行したことはありませんが、試してみて、エラーが発生したり、まだ問題がある場合はお知らせください。

于 2013-03-07T01:23:56.243 に答える
0

$oldScore1等しくない$oldscore1

いずれにせよ、次のページに投稿するために新しい値を保持する必要があります

<input type="hidden" name="oldScore1" id="oldScore1" value="<?php echo $curr1; ?>" />
<input type="hidden" name="oldScore2" id="oldScore2" value="<?php echo $curr2; ?>" />

Cookie をドロップしてそのまま使用する

$curr1=$oldScore1+$addScore1;
$curr2=$oldScore2+$addScore2;

また、投稿が警告を回避するように設定されているかどうかを確認し、それらが整数であることを確認することも価値があります。

$oldScore1 = isset($_POST['oldScore1'])? (int)$_POST['oldScore1'] : 0;    
$oldScore2 = isset($_POST['oldScore2'])? (int)$_POST['oldScore2'] : 0;
于 2013-03-07T01:22:15.760 に答える