За последние 24 часа нас посетили 74083 программиста и 10170 роботов. Сейчас ищут 2397 программистов ...

Игра "Угадай число (наоборот)" - не сохраняет в скрытые поля

Тема в разделе "PHP для новичков", создана пользователем tangar, 8 сен 2017.

  1. tangar

    tangar Новичок

    С нами с:
    8 сен 2017
    Сообщения:
    9
    Симпатии:
    0
    Добрый день!

    Я совсем зеленый, пожалуйста, посоветуйте, как решить задачку.

    Задача: юзер загадывает число; программа угадывает. Идея задачи именно в том, чтобы использовать скрытые поля для сохранения данных; другие варианты не подходят (в книжке до них не дошел).
    Проблема: Программа не дописана, застрял на следующем косяке - программа не сохраняет с скрытых (сделал их открытыми для отладки) полях данные массива; в итоге, каждый следующий запуск к числу приписывается 50 вначале.

    Код (Text):
    1.  
    2. <?
    3. $guess = array();
    4.  
    5. print "Is your number ";
    6.  
    7. if (empty($guess)){
    8. $guess[0] = 50;
    9. print $guess[0];
    10. }
    11.  
    12. if ($choice === big){
    13. print $guess[1]=($guess[0] / 2);
    14. } elseif ($choice === small) {
    15. print $guess[1]=($guess[0] + 25);
    16. } elseif ($choice === gotIt) {
    17. print "YOU WON!";
    18. }
    19.  
    20. print "?<br><br>";
    21.  
    22. print<<<HERE
    23. <form action="17.php"  method = "post">
    24. <input type = "radio"
    25.             name = "choice"
    26.             value = "big">My number is bigger, dude!<br>
    27. <input type = "radio"
    28.             name = "choice"
    29.             value = "small">My number is smaller, muuuch smaller, mate!<br>
    30. <input type = "radio"
    31.             name = "choice"
    32.             value = "gotIt">YOU GOT IT! IT CANNOT BE!! :D<br><br>
    33. <input type = "submit"
    34.         value = "tell him!">
    35. </form>
    36. HERE;
    37.  
    38.  
    39. print "<br><br>";
    40. var_dump($guess);
    41. print "<br><br>";
    42.  
    43.  
    44. print<<<HERE
    45. <form action="17.php"  method = "post">
    46. <input type = "text" name = "guess[0]"    value = "$guess[0]">
    47. <input type = "text" name = "guess[1]"    value = "$guess[1]">
    48. <input type = "text" name = "guess[2]"    value = "$guess[2]">
    49.  
    50. <input type = "text"
    51.         name = "choice"
    52.         value = "$choice">
    53. </form>
    54. HERE;
    55.  
    56. ?>
    Подскажите, пожалуйста, в чем дело :)

    Стрим, как я это все сочинял:

     
  2. tangar

    tangar Новичок

    С нами с:
    8 сен 2017
    Сообщения:
    9
    Симпатии:
    0
    Апдейт: оказалось, что вроде как в поля нельзя передавать значения массива вот так вот просто.. Надо делать это через echo:

    Код (Text):
    1. <input type = 'text' name = 'guess[1]' value = '<? echo $guess[1]; ?>'>
    Но все равно так же шляпа:
    https://hastebin.com/ijitefevek.bash
     
    #2 tangar, 8 сен 2017
    Последнее редактирование: 8 сен 2017
  3. seifer

    seifer Новичок

    С нами с:
    27 май 2017
    Сообщения:
    76
    Симпатии:
    2
    Не пойму задачи, по идее все просто, передаешь значения из инпута (или куда там юзер число загадывает) через POST в обработчик, где что-то типа
    Код (Text):
    1.  
    2. $number = $_POST['number'];
    3. $rand = rand(1,10000);
    4.  
    5. if($rand>$number){echo}
    6. elseif($rand<$number){echo}
    7. else {угадал}
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.843
    Симпатии:
    1.338
    Адрес:
    Лень
    1 час 8 минута, да это капец
    --- Добавлено ---
    в 1 час 10 минут пукан начинает гореть
    --- Добавлено ---
    крч говнокодер
    --- Добавлено ---
    у тебя уже здесь ошибка
    PHP:
    1. if ($choice === big){
    тут
    PHP:
    1. } elseif ($choice === small) {
    и тут
    PHP:
    1. } elseif ($choice === gotIt) {
     
  5. tangar

    tangar Новичок

    С нами с:
    8 сен 2017
    Сообщения:
    9
    Симпатии:
    0
    Спасибо за ответ.

    Да, есть другие варианты решения задачи; я выбрал довольно-таки дурацкий. Но тут уже спортивный интерес, хочется, чтобы заработало с массивами, которые хранят значения в скрытых формах ;) Вот такой вот мазохизм.. :D

    Есть у кого-нибудь есть идеи в чем проблема? :)
     
    #5 tangar, 8 сен 2017
    Последнее редактирование: 8 сен 2017
  6. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    183
    Храни ответы в текстовом файле.
     
  7. tangar

    tangar Новичок

    С нами с:
    8 сен 2017
    Сообщения:
    9
    Симпатии:
    0
    2Dimon2x, суть задачи - сделать это через скрытые поля :)

    Странная штука:
    https://hastebin.com/qeromofusa.bash

    В нижних полях все сохраняется, сверху нет:
    --- Добавлено ---
    Так, есть подвижка. Я не указал переменные; а из форм они не генерируются оказываются ( https://php.ru/manual/reserved.variables.post.html ).
    Так что сначала пишем
    Код (Text):
    1. $choice = $_POST['choice'];
    и с массивом по аналогии :D
     

    Вложения:

    • wtf.jpg
      wtf.jpg
      Размер файла:
      193,6 КБ
      Просмотров:
      4
  8. tangar

    tangar Новичок

    С нами с:
    8 сен 2017
    Сообщения:
    9
    Симпатии:
    0
    Мытарства продолжаются....

    https://hastebin.com/vomasuvere.xml

    Плз подскажите, почему не фурычит это:

    Код (Text):
    1. } elseif ($choice == 'small') {
    2. print $guess[2]=($guess[0] + 25);
     
  9. tangar

    tangar Новичок

    С нами с:
    8 сен 2017
    Сообщения:
    9
    Симпатии:
    0
    Оказалось, что у меня не показываются NOTICE ошибки; для этого вначале кода ставим:

    error_reporting(E_ALL);
    ini_set('display_errors', '1');

    Стало ясно, что формы ничего толком не передают,

    Notice: Undefined index: $guess in C:\OpenServer\domains\localhost\php\17.php on line 6
    Notice: Undefined index: $choice in C:\OpenServer\domains\localhost\php\17.php on line 7
    Is your number 50?

    Сразу стало легче.. Основной косяк был с
    $guess = $_POST['$guess'];
    Надо вот так:
    $guess = $_POST['guess'];

    В общем, вот что получилось:
    https://hastebin.com/dedoqixahu.http

    Мораль:
    Не пытайтесь бежать впереди паровоза... Но тут еще косяк книги, домашнее задание было сразу после главы про массивы, но при этом его нужно было делать без этих самых массивов. Так что выбирайте хорошие книжки )
     
  10. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    183
    Какой смысл хранить ответ в браузере?
     
  11. tangar

    tangar Новичок

    С нами с:
    8 сен 2017
    Сообщения:
    9
    Симпатии:
    0
    Это домашнее задание из книги; до БД, сессий и проч. я пока не дошел