2016-03-27 14 views
0

秘密の単語のユーザー入力をテストする単純なゲームが期待どおりに機能していません。条件が評価されると、画面には何も戻されません。私はそれが単純な問題だと確信していますが、ここの質問/答えのほとんどは、私が探しているよりも複雑です。秘密の単語の機能が正しく機能しない理由

これは私が作業しているものです。ユーザーに正確に9文字の単語を入力するように依頼し、@記号を含める必要があります。すべてのキーボード文字もライブです。要件が満たされていない場合はユーザーにエコー、存在する場合は成功します。

<?php 
if (!isset($secret_word)) { 
    $secret_word = ''; } 
/* prompt user to enter a secret word that contains 9 characters of which one must be @ sign and all keyboard characters are allowed. if the secret word isn't correct output what is wrong with the word. */ 

#get user input 
$secret_word = filter_input(INPUT_POST, 'secret_word'); 
$wordTest = secretWord(); 
function secretWord() { 
if (strlen($secret_word) < 9) { 
    echo "Secret word is too short!"; } 

if (strlen($secret_word) > 9) { 
    echo "Secret word is too long!"; } 

if (!preg_match("&#64", $secret_word)) { 
    echo "Secret word must contain &#64 sign"; } 

if (strlen($secret_word) == 9 && preg_match("&#64", $secret_word)){ 
    echo "$secret_word contains 9 characters and one sign.";} 

} 
?> 
<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<link rel="stylesheet" type="text/css" href="q4.css"> 
<title>Untitled Document</title> 
</head> 

<body> 
<div class="header"> 
<header><h1>Secret Scroll Game</h1></header> 
</div> 

<div class="output"> 
<p><?php echo $wordTest(); ?></p> 

</div> 
<div class="link"> 
<a href="q4_index.html">Back To Homepage</a> 
</div> 
</body> 
</html> 
+3

http://php.net/manual/en/function.error-reporting.php –

+0

おそらく間違っているのは、ASCII文字 '@' –

+0

'の代わりにhtmlエンティティ'&#64'をテストしているからですpreg_match( "/ @ /"、$ secret_word) 'を実行します。しかし、あなたは単に 'if(strpos($ secret_word、 '@')!== false)'を使うことができます。 –

答えて

1

うわあ、より多くの私は多くの私はここに質問コードと間違って表示さ....この回答の下に読んでください見て...

echo $wordTest();は、PHPを求めています関数の結果を返すために関数が定義されていない場合は、かっこが付加されていない変数を$ wordTestにエコーすることができます。

ので

変更

echo $wordTest();

echo $wordTest;

にP.S:

あなたでしょうFred-iiが暗示しているように、あなたのスクリプトでPHPエラー報告を有効にしていれば、これを非常に簡単に発見できました。


Research Error reporting on StackOverflow.はP.P.S:

あなたの機能が混乱で、あなたの関数はreturn値は、画面に直接印刷してはいけません。だから、そう、定義されたテキストである変数をINGのreturnechoテキストのすべて回出てくる交換する必要があります。

function secretWord() { 
if (strlen($secret_word) < 9) { 
    echo "Secret word is too short!"; } 

になる必要があります。これは、

function secretWord() { 
if (strlen($secret_word) < 9) { 
    $var = "Secret word is too short!"; 
} 
... 
//etc. etc. do this for each text if statement... then: 
return $var; //give the text value back to were the 
//function was called from. 
} //this closes the function. 

、あなたが持っている場合:

$wordTest = secretWord(); 

$wordTestはによって返された値に等しくすること機能。 returnを指定しないと、$wordTestの値は常にNULLになります。


詳細情報:あなたはこれを与える必要があるので、

[この値が定義され、またはされていないという意味] $secret_wordの範囲は、あなたが宣言関数内ないです正しい応答を得るために関数に渡します。

ので:あなたの関数を宣言し、かっこで変数を配置します。

function secretWord($givenWord) { 

そして機能のリファクタリング内のすべての変数が$givenWord$secret_wordと呼ばれます。機能の その後外、あなたは、参照することによって、あなたの関数にそう秘密の言葉を渡す必要があります:あなたが実際にやっていないので、

$wordTest = secretWord($secret_word); 

または

また
echo secret_word($secret_word); 

$wordTest変数を持つものは本当に必要なものではありませんので、あなたはちょうどこうすることができます:

<div class="output"> 
<p><?php echo secretWord(); ?></p> 

機能が何であってもエコーアウトします s。


また$_POST入力はHTML(特殊)文字ではないしようとしている、彼らは文字セット現在の検索パターンがその希望の文字列を探しているので、フォームが、中に提出された中の文字になります他の文字の代わりには表示されません。


あなたは変更は、私はあなたのために全体のコードを書き換えていないよには適用されたコード内のすべてのエンティティに、ここで提案された変更のそれぞれを適用する必要があります。

PHP Variable ScopesPHP user-defined functionsをお読みください。

+0

ガイダンスと入力を気に入ってください。これを2週間学習しています。多くのことを学び、学ぶ。 jsとは少し違う。まだこのプログラムのためにいくつかの調整がありますが、もう一度感謝します! – allendks45

+0

@ allendks45それは構文のすべてですが、私は一緒にJavaScriptを組み込む構文の構築の似た問題があります。それと幸運:-) – Martin

+0

@ allendks45 PHPのマルチバイト文字列関数( 'mb_')を使って検索し、また理解してみましょう(つまりgoogle!)PHPオブジェクト指向のアプローチは、あなたの 'function'宣言ははるかに将来の証明です。 :-) – Martin

関連する問題