За последние 24 часа нас посетили 32975 программистов и 1756 роботов. Сейчас ищут 847 программистов ...

Игра угадай число.

Тема в разделе "PHP для новичков", создана пользователем SerfUA, 18 фев 2014.

  1. SerfUA

    SerfUA Активный пользователь

    С нами с:
    18 фев 2014
    Сообщения:
    75
    Симпатии:
    4
    Привет всем!
    Я новичок в ПХП но есть желание освоить его более лучше.
    Пожалуйста помогите мне с решением проблемы.
    Суть проблемы заключается в следующем:
    КНОПКА "ЗАНОВО" она плохо работает. При повторе вводе названия имен, когда доходит к второму имени, в окне выбивает 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>
     
  2. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    у меня выводит только два окна. Просьба ввести чисто от 1 до 100. птом окно, но там что написано я не понял)).
    и все, далее ничего не идет.
    И еще, если вы используете оба числа для сравнения, то следует использовать разные переменные сессий для разных чисел.
    if не цикл, а условный оператор.
     
  3. SerfUA

    SerfUA Активный пользователь

    С нами с:
    18 фев 2014
    Сообщения:
    75
    Симпатии:
    4
    Спасибо вам за ответ, но все же я так и не понял как решыть мож проблему? Завтра я постараюсь закинуть фото детальнее про свою проблему. У менЯ же программ работает на денвере коректно,только с этим нюансом((' изо раз спасибо за содействие.
     
  4. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    SerfUA, Пожалуйста пользуйтесь оформлением скрипт-кода, тегом [ code=php ] ... [ /code ].
    Вы думаете, если вы назвали кнопку заново и указали ей reset значит у вас сервер reset?)
    А в обработки вы не сделали reset, к тому - же у вас это все в одной форме и по любому, по нажатию "Відправити" у вас и "Заново", отправится, так как это одна форма и post запрос летит из формы всех полей.
    Зачем сукубо париться, сделайте ссылку вида:
    Код (PHP):
    1. <a href="?reset=">
    2.     Заново
    3. </a> 
    И напишите обработку:
    Код (PHP):
    1. if(isset($_GET['reset'])) {
    2.     res();
    3. } 
    К тому же не понимаю, в вашей функции:
    Код (PHP):
    1. function res(){
    2. unset($_SESSION['gamer_1']); 
    3. unset($_SESSION['gamer_2']);
    4. unset($_SESSION['status']);
    5. } 
    Зачем писать 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
    А вот "условный оператор" - это скорее походит на условие в "Управляющей конструкции".
     
  5. SerfUA

    SerfUA Активный пользователь

    С нами с:
    18 фев 2014
    Сообщения:
    75
    Симпатии:
    4
    Очень сильно благодарю за ценные советы.они мне помогли решить проблему.
    ТЕМА ЗАКРЫТА.