<?php $strArray = array("supermarket", "programming", "development", "apache","university"); $index = isset($_POST['index']) ? $_POST['index'] : 0; $message2 = str_shuffle($strArray[$index]); if(!isset($_POST['guess'])){ $message1="<h1>Welcome to the shuffle game!</h1></br>"; $message2=str_shuffle($strArray[$index]); } elseif($_POST['guess'] == $strArray[$index]){ $message1="<h1>You guessed right!</h1></br>"; $index++; $message2=str_shuffle($strArray[$index]); } elseif($_POST['guess'] != $strArray[$index]){ $message1="<h1>You guessed wrong!</h1></br>"; } ?> <!DOCTYPE html> <html> <head><title>Guess the word!</title></head> <body> <?php echo $message1; echo "<b>Try to guess the shuffled word: </b>" . $message2; ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> <p><label for="guess">Enter your guess:</label> <input type="text" id="guess" name="guess" /></p> <input type="hidden" name="index" value="<?php echo $index; ?>"> <button type="submit" name="submit" value="submit">Guess</button> </form></body></html>El problema en este juego es el índice....
Comienza con 0, y cuando alcanza el valor 5 da un error porque obviamente el último valor de la matriz está indexado como 4, por lo que no hay un índice 5 en la matriz. Traté de detenerlo con una declaración if pero causó otros errores! ¿Alguna solución?
Puede verificar si $index es demasiado grande comparándolo con la cantidad de elementos en su matriz:
if ($index < count($strArray)) { // $index is valid } else { // $index is too big } Necesita esta verificación antes de incrementar $index al elegir la siguiente cadena mezclada.
Su lógica php podría, por ejemplo, verse así:
<?php $strArray = array("supermarket", "programming", "development", "apache","university"); $index = isset($_POST['index']) ? $_POST['index'] : 0; $message2 = str_shuffle($strArray[$index]); if(!isset($_POST['guess'])){ $message1="<h1>Welcome to the shuffle game!</h1></br>"; $message2=str_shuffle($strArray[$index]); } elseif($_POST['guess'] == $strArray[$index]){ $message1="<h1>You guessed right!</h1></br>"; if ($index < count($strArray) - 1) { $index++; } else { $index = 0; } $message2=str_shuffle($strArray[$index]); } elseif($_POST['guess'] != $strArray[$index]){ $message1="<h1>You guessed wrong!</h1></br>"; } ?> (Nota al margen: en realidad, también debería tener esta verificación justo al principio, donde primero define $index , junto con una verificación de >= 0 y una llamada a is_numeric . De lo contrario, un usuario malintencionado podría enviar $_POST['index'] como por ejemplo, "100" o "-1" o "foo").
Antes de mostrar el formulario del juego, verifique si $index ha alcanzado la longitud de la matriz. Si es así, muestra un mensaje que dice que el juego ha terminado en lugar del formulario.
<?php $strArray = array("supermarket", "programming", "development", "apache","university"); $index = isset($_POST['index']) ? $_POST['index'] : 0; $message2 = str_shuffle($strArray[$index]); if(!isset($_POST['guess'])){ $message1="<h1>Welcome to the shuffle game!</h1></br>"; $message2=str_shuffle($strArray[$index]); } elseif($_POST['guess'] == $strArray[$index]){ $message1="<h1>You guessed right!</h1></br>"; $index++; if ($index < count($strArray)) { $message2=str_shuffle($strArray[$index]); } } elseif($_POST['guess'] != $strArray[$index]){ $message1="<h1>You guessed wrong!</h1></br>"; } ?> <!DOCTYPE html> <html> <head><title>Guess the word!</title></head> <body> <?php echo $message1; if ($index < count($strArray)) { ?> <b>Try to guess the shuffled word: </b>" <?php echo $message2; ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> <p><label for="guess">Enter your guess:</label> <input type="text" id="guess" name="guess" /></p> <input type="hidden" name="index" value="<?php echo $index; ?>"> <button type="submit" name="submit" value="submit">Guess</button> </form> <?php } else { ?> <b>Game over!</b> <p><a href="<?php echo $_SERVER['PHP_SELF']; ?>">Play again</a></p> <?php } ?> </body></html>