2016-03-27 22 views
0

Einfaches Spiel zum Testen der Benutzereingabe für ein geheimes Wort funktioniert nicht wie erwartet. Wenn Bedingungen ausgewertet werden, wird nichts auf den Bildschirm zurückgegeben. Ich bin mir ziemlich sicher, dass es ein einfaches Problem ist, aber die meisten Fragen/Antworten hier sind komplizierter als ich glaube.Warum funktioniert meine geheime Wortfunktion nicht richtig?

Dies ist, was ich arbeite mit. Bitten Sie den Benutzer, ein Wort mit genau 9 Zeichen einzugeben, und es muss das @ -Symbol enthalten. Alle Tastaturzeichen sind auch live. Echo an Benutzer, wenn die Anforderung nicht erfüllt wird, oder Erfolg, wenn dies der Fall ist.

<?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

Vielleicht ist es falsch, weil Sie für die HTML-Entität '& # 64' anstelle des ASCII-Zeichens' @ ' –

+0

' testen preg_match ("/ @ /", $ geheimes_Wort) '. Aber Sie können einfach 'if (strpos ($ secret_word, '@')! == false)' verwenden. –

Antwort

1

Herrje, desto mehr ich schaue desto mehr sehe ich falsch mit der Frage Code hier .... lesen Sie bitte auf der Unterseite dieser Antwort ...

echo $wordTest(); ist PHP zu fragen Wenn Sie das Ergebnis einer Funktion zurückgeben möchten, die Funktion jedoch nicht definiert wurde, können Sie stattdessen die Variable $ wordTest zurückgeben, an die keine Klammern angehängt sind.

So

ändern

echo $wordTest();

Um

echo $wordTest;

P. S:

würden Sie Sie haben dies sehr leicht selbst entdeckt, wenn Sie die PHP-Fehlerberichterstattung für Ihr Skript aktiviert haben, wie von Fred-ii angedeutet. Research Error reporting on StackOverflow.


P.P.S:

Ihre Funktion ist ein Chaos, Ihre Funktion sollte return ein Wert, auf den Bildschirm nicht direkt drucken. Sie müssen also alle Vorkommen des echo Text mit return ing eine Variable ersetzen, die die definierten Text ist, so:

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

werden sollte:

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. 

Das bedeutet, dass, wenn Sie haben:

$wordTest = secretWord(); 

das $wordTest wird der Wert durch denzurück gleichFunktion. Ohne return ist der Wert $wordTest immer NULL.


Weitere Informationen:

Der Umfang der $secret_word [gemeint ist, wo dieser Wert definiert ist, oder nicht] ist nicht innerhalb der Funktion, die Sie erklären, so können Sie dies geben müssen Wert für die Funktion, um die richtige Antwort zu erhalten.

Also: Ihre Funktion deklarieren und die Variable in Klammern setzen:

function secretWord($givenWord) { 

Und dann innerhalb der Funktion refactor alle $secret_word zu $givenWord Variablen genannt. Dann außerhalb der Funktion, müssen Sie das Geheimnis Wort zu Ihrer Funktion durch Verweis übergeben, so:

$wordTest = secretWord($secret_word); 

oder

echo secret_word($secret_word); 

Alternativ weil Sie nicht wirklich zu tun alles andere mit der $wordTest Variable Sie brauchen es nicht wirklich so in Ihrem HTML können Sie einfach tun:

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

Welches Echo wird unabhängig von der Funktion ausgegeben zurückgeben s.


Auch $_POST Eingänge nicht HTML (Sonder-) Zeichen lang sein wollen, werden sie die Form Zeichen in dem Zeichensatz sein wurde, in, so dass Ihre aktuellen Suchmuster werden für eine Reihe von Zeichen suchen, würde erscheint nie als Ersatz für ein anderes Zeichen.


Sie müssen jede der Änderungen hier in den Code für alle Unternehmen vorgeschlagen anzuwenden, die die Änderungen gelten, ich bin nicht dein ganzes Code für Sie neu zu schreiben.

Bitte lesen Sie über PHP Variable Scopes und PHP user-defined functions.

+0

Schätzen Sie die Anleitung und Eingabe. Ich lerne das jetzt seit 2 Wochen. Viel zu lernen und zu lernen. ein bisschen anders als js. Habe noch ein paar Verbesserungen für dieses Programm, aber danke nochmal! – allendks45

+0

@ allenks45 es ist alles in den Syntaxen, habe ich ähnliche Probleme der Syntaxkonstruktion, wenn ich Javascript zusammenstellte. Viel Glück damit :-) – Martin

+0

@ allerndks45 ein paar abschließende Hinweise: Nachschlagen mit PHP Multibyte-String-Funktionen ('mb_') und auch versuchen und verstehen (zB Google!) PHP Object Oriented Ansatz, wird es Dinge wie machen Ihre 'Funktion' Deklaration ist viel zukunftssicherer. :-) – Martin

Verwandte Themen