Привет всем! Я новичок в ПХП но есть желание освоить его более лучше. Пожалуйста помогите мне с решением проблемы. Суть проблемы заключается в следующем: КНОПКА "ЗАНОВО" она плохо работает. При повторе вводе названия имен, когда доходит к второму имени, в окне выбивает 2-два ввода имени первого и второго((((( Как сделать все правильно??? Наперед прошу не судите меня строго за тупизну. Вот код <?session_start()?> <!--Початок сессії--> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Гра вгадай число</title> </head> <body> <? /* */ if (!isset($_SESSION["status"])){ $_SESSION["status"] = 0; // вводимо початкову форму з запитом першого імені echo <<<here <form method="post"> <h2>Введіть назву першого гравця</h2> <input type="text" name="name1" value="" /> <input type="submit" value="Відправити" /> </form> here; } // Умова для першого гравця if ($_SESSION["status"] == 0 && isset($_POST["name1"])){ // Якщо не введене імя то ім'я буде дане за замовчуванням if (empty($_POST["name1"])) { $_SESSION["gamer_1"] = "Empty name 1"; $_SESSION["status"] = 1; } // Введене ім'я першого гравця else { $_SESSION["gamer_1"] = $_POST["name1"]; $_SESSION["status"] = 1; } } // Реєстрація 2 if ($_SESSION["status"] == 1 && !isset($_POST["name2"])){ // Форма для реєстрація другого гравця echo <<<here <form method="post"> <h2>Введіть назву другого гравця</h2> <input type="text" name="name2" value="" /> <input type="submit" value="Відправити" /> </form> here; } // Умова для назви другого гравця if ($_SESSION["status"] == 1 && isset($_POST["name2"])){ // Якщо не введене імя то ім'я буде дане за замовчуванням if (empty($_POST["name2"])) { $_SESSION["gamer_2"] = "Empty name 2"; $_SESSION["status"] = 2; } // Введене ім'я другого гравця else { $_SESSION["gamer_2"] = $_POST["name2"]; $_SESSION["status"] = 2;} } // Початок гри if ($_SESSION["status"] == 2){ $randF = $_POST['rand']; $dijit = $_POST['dijit']; $I = $_POST['i']; logica(); //логические опирации программы inter();} //функция хранения данных, т. к мы не используем базы данных. //в данном случае используются скрытые поля hidden. function logica(){ global $dijit, $rand, $randF, $i, $I; if (empty($dijit)) { $i = 1; $rand = rand(1, 100); if($_POST['i']%2==0){echo "Ходить гравець ".$_SESSION["gamer_1"];} elseif($_POST['i']%2==1){echo "Ходить гравець ".$_SESSION["gamer_2"];} echo "<h1>Введіть число від 1 до 100</h2>";} elseif ($dijit > 100 or $dijit < 1) { if($_POST['i']%2==0){echo "Ходить гравець ".$_SESSION["gamer_1"];} elseif($_POST['i']%2==1){echo "Ходить гравець ".$_SESSION["gamer_2"];} echo "<H1>Введите пожалуйста корректные данные!</H1>";} elseif ($dijit > $randF) { if($_POST['i']%2==0){echo "Ходить гравець ".$_SESSION["gamer_1"];} elseif($_POST['i']%2==1){echo "Ходить гравець ".$_SESSION["gamer_2"];} echo "<H2>Введене число було за велике</H2>"; $rand = $randF; $I++; $i = $I;} elseif ($dijit < $randF) { if($_POST['i']%2==0){echo "Ходить гравець ".$_SESSION["gamer_1"];} elseif($_POST['i']%2==1){echo "Ходить гравець ".$_SESSION["gamer_2"];} echo "<H2>Введене число було за мале</H2>"; $rand = $randF; $I++; $i = $I;} else { if($_POST['i']%2==1){echo "<h1>Вітаю ви вгадали. Переміг гравець ".$_SESSION["gamer_1"]."</h1>";} elseif($_POST['i']%2==0){echo "<h1>Вітаю ви вгадали. Переміг гравець ".$_SESSION["gamer_2"]."</h1>";}} //закрываем цикл if }//закрываем функцию logica() function inter(){ global $digit, $rand, $i, $I; echo <<<here <form method="post"> <input type="text" name="dijit" value=""> <input type="hidden" name="rand" value = $rand> <input type="hidden" name="i" value = $i> <input type="submit" name"subm" value="Відправити"> <br /> <input type="submit" value="Заново" name="reset"/> </form> here; } function res(){ unset($_SESSION['gamer_1']); unset($_SESSION['gamer_2']); unset($_SESSION['status']); session_destroy(); } ?> </body> </html>
у меня выводит только два окна. Просьба ввести чисто от 1 до 100. птом окно, но там что написано я не понял)). и все, далее ничего не идет. И еще, если вы используете оба числа для сравнения, то следует использовать разные переменные сессий для разных чисел. if не цикл, а условный оператор.
Спасибо вам за ответ, но все же я так и не понял как решыть мож проблему? Завтра я постараюсь закинуть фото детальнее про свою проблему. У менЯ же программ работает на денвере коректно,только с этим нюансом((' изо раз спасибо за содействие.
SerfUA, Пожалуйста пользуйтесь оформлением скрипт-кода, тегом [ code=php ] ... [ /code ]. Вы думаете, если вы назвали кнопку заново и указали ей reset значит у вас сервер reset?) А в обработки вы не сделали reset, к тому - же у вас это все в одной форме и по любому, по нажатию "Відправити" у вас и "Заново", отправится, так как это одна форма и post запрос летит из формы всех полей. Зачем сукубо париться, сделайте ссылку вида: Код (PHP): <a href="?reset="> Заново </a> И напишите обработку: Код (PHP): if(isset($_GET['reset'])) { res(); } К тому же не понимаю, в вашей функции: Код (PHP): function res(){ unset($_SESSION['gamer_1']); unset($_SESSION['gamer_2']); unset($_SESSION['status']); session_destroy(); } Зачем писать 3 раза unset, когда она принимает в себя "$..."(and so on (и так далее)) http://php.ru/manual/language.pseudo-types.html - изучить! Да и вообще, зачем писать unset, когда в итоге в конце вы пишите session_destroy, уничтожает все сессии. http://php.ru/manual/function.session-destroy.html - изучить! Более правильно звучит "Управляющие конструкции". http://php.ru/manual/language.control-structures.html А вот "условный оператор" - это скорее походит на условие в "Управляющей конструкции".