2016-05-07 14 views
-1

したがって、ユーザーが乱数を推測しようとする単純なゲームを構築しようとしています。

私が抱えている問題は、フォームを送信するたびにページがリフレッシュされ、乱数が変化していることです。

$ _SERVER ['PHP_SELF']の他の投稿を読むことから、入力値だけを更新するべきではないと思っていました。

しかし、フォームを送信するたびに、私の乱数が変わります。

フォームを送信してページを更新しない方法がありますか?

<?php 

function form(){ 
echo "<form method='post' action=" . $_SERVER['PHP_SELF'] . ">"; 
    echo "<input type='text' name='user' /><br/>"; 
    echo "<input type='submit' value='submit' />"; 

} 

form(); 

$userinput = $_POST['user']; 

$random = rand ( 1 , 4); 

echo "input is " . $userinput . " " . "random number is " . $random; 
?> 
+0

をあなたは '$ _POST [「ユーザーは」]'空である場合にのみ、乱数をリセットする可能性があり、その値を非表示の入力にエコーしてから、別の条件を追加して、ユーザが入力した数字と乱数を比較します。これは、ユーザの入力が空白の場合にのみリセットされます。または、おそらく正しく推測されます... – Steve

+0

usefule snippetsこのページで必要なもののためのコードhttp://stackoverflow.com/questions/33816772/get-and-echo-inputs-from-textarea-repeatedly/33816873#33816873 – Steve

+0

ありがとうsteve、これはまさに私が探していたものです。 – Dropfreeski

答えて

0

あなたは混乱しているようです。乱数は、新しい乱数を生成するときに発生する処理であり、このスクリプトが実行されるたびに(つまり、ページを読み込むたびに)実行する処理であるため変更されます。あなたのフォーム提出は、<form>をJavaScriptが動作しないまま提出する方法であるため、ページをリロードします。

のフォームを送信しようとしているようですが、を再読み込みしていません。その場合は、AJAXを使用する必要があります。つまり、ブラウザをリダイレクトせずにJavaScriptを使用してフォームを送信します。

非常に明確になる:$_SERVER['PHP_SELF']はあなたの問題とは全く関係ありません。これをフォームタグのaction属性の値として使用すると、他のページとは違って、同じページに投稿するようにブラウザに指示するだけです。それでも、完全なPOST要求を行い、ページをリロードします。言い換えれば、同じページにとどまることが目標の場合は、action属性として何を使用するかは関係ありません。何を入れてもJavaScriptを使用する必要があります。

+0

ありがとう、よく説明しました – Dropfreeski

1

$_SERVER['PHP_SELF']は、ページのURLからドメインを除いたものです。 http://php.net/manual/en/reserved.variables.server.php

別のページを「読み込み」たくない場合は、AJAXを使用してください。

また、同じページを使用する場合は、if $_POST['variable']をスクリプトに入れてください。 Check if $_POST exists

また、以下のように、非表示の入力フォームに乱数を追加することができます。

<?php 

function form(){ 
    echo "<form method='post' action=" . $_SERVER['PHP_SELF'] . ">"; 
    echo "<input type='text' name='user' /><br/>"; 
    echo "<input type='submit' value='submit' />"; 
    echo "<input type='hidden' name='random' value=".rand(1, 4)."/><br/>"; 
} 

if (!empty($_POST['user'])) { 
    $userinput = $_POST['user']; 
    $random = $_POST['random']; 
    echo "input is " . $userinput . " " . "random number is " . $random; 
} else { 
    form(); 
} 

?> 
+0

おかげさまでありがとうございます。しかし、私は正しい数字を得るまで推測し続けることができる乱数をユーザが推測できるようにするために、これが問題を解決するとは思わない。この場合も、ランダム番号と入力番号の1つのインスタンスが与えられます。入力された番号のインスタンスは、ランダムが割り当てられてから推測されるまでリセットされます。それは理にかなっていますか? – Dropfreeski

関連する問題