Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Сессии и их обработка

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Wolkodaw
Отправлено: 29 Сентября, 2020 - 10:02:20
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Сент. 2020  


Помог: 0 раз(а)




Парни подскажите, а то сообразить не могу, нужно занести инфу в сессию как в массив и вывести через цикл 10 последних занесённых записей. Пример в виде пары кусков кода накидайте))
P.S гугл нечего толкового не дал
(Добавление)
CODE (htmlphp):
скопировать код в буфер обмена
  1. $de = array('Ударил', 'Разнес', 'Сокрушил', 'Пробил', 'Сокрушительно ударил');
  2. $der = mt_rand(0,4);
  3.  
  4. $_SESSION['rand'] = mt_rand(5,37);
  5. $_SESSION['hpm'] = $_SESSION['hpm']-$_SESSION['rand'];
  6.  
  7. if (!isset($_SESSION['jurnal'])):
  8.  
  9. /*эту хрень надо занести в массив, а потом вывести*/
  10. $_SESSION['jurnal'] = $de[$der] .' волка на '. $_SESSION['rand'];
  11. else:
  12.  
  13. $_SESSION['jurnal'] = $de[$der] .' волка на '. $_SESSION['rand'] .'<br/>'.$_SESSION['jurnal'];
  14.  
  15. /**********/
  16. endif;
  17.  
  18. unset($_SESSION['rand']);
  19.  

(Добавление)
Вывод должен быть примерно таким:

Ударил волка на 12
Ударил волка на 7
Разнес волка на 30
Ударил волка на 21

И такой вывод 10шт последних записей
Помогите пожалуйста
 
 Top
Vladimir Kheifets
Отправлено: 29 Сентября, 2020 - 11:54:04
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




Wolkodaw пишет:
Парни подскажите, а то сообразить не могу, нужно занести инфу в сессию как в массив и вывести через цикл 10 последних занесённых записей. Пример в виде пары кусков кода накидайте))

Добрый день!
Видимо, где-то в начале коде есть вызов session_start();
Действительно переменая $_SESSION['jurnal'] может быть применена для сохранения массива.
Попробуйте так:
PHP:
скопировать код в буфер обмена
  1. if (!isset($_SESSION['jurnal'])):
  2. /*эту хрень надо занести в массив, а потом вывести*/
  3. $_SESSION['jurnal'][0] = $de[$der] .' волка на '. $_SESSION['rand'];
  4. else:
  5. $_SESSION['jurnal'][] = $de[$der] .' волка на '. $_SESSION['rand'];
  6. /**********/
  7. endif;

Не понятно зачем создается $_SESSION['rand']
PHP:
скопировать код в буфер обмена
  1. $_SESSION['rand'] = mt_rand(5,37);
  2. .......
  3. unset($_SESSION['rand']);

Удачи!

(Отредактировано автором: 29 Сентября, 2020 - 12:00:19)

 
 Top
Wolkodaw
Отправлено: 29 Сентября, 2020 - 12:38:12
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Сент. 2020  


Помог: 0 раз(а)




Не понятно зачем создается $_SESSION['rand']
PHP:
скопировать код в буфер обмена
  1. $_SESSION['rand'] = mt_rand(5,37);
  2. .......
  3. unset($_SESSION['rand']);

Удачи![/quote]
$_SESSION['rand']- используется как сила удара.

А как сделать вывод 10 последних добавлений в массив? Я цикл for крутил, но так не понял как вывести
 
 Top
Vladimir Kheifets
Отправлено: 29 Сентября, 2020 - 13:12:23
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




Wolkodaw пишет:
Не понятно зачем создается $_SESSION['rand']
PHP:
скопировать код в буфер обмена
  1. $_SESSION['rand'] = mt_rand(5,37);
  2. .......
  3. unset($_SESSION['rand']);


$_SESSION['rand']- используется как сила удара.
А как сделать вывод 10 последних добавлений в массив? Я цикл for крутил, но так не понял как вывести


Переменную $rand нельзя использовать как силу удара?
Если необходимо передать $rand через сессию, то нужно
убрать unset($_SESSION['rand']);
Вывод 10 последних добавлений в массив можно сделать
функцией array_slice()

(Отредактировано автором: 29 Сентября, 2020 - 13:14:00)

 
 Top
Wolkodaw
Отправлено: 29 Сентября, 2020 - 13:55:56
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Сент. 2020  


Помог: 0 раз(а)




Переменную $rand нельзя использовать как силу удара?
Если необходимо передать $rand через сессию, то нужно
убрать unset($_SESSION['rand']);
-------
unset($_SESSION['rand']);- эту сессию надо убивать сразу после обработки формы. Это даст рандомное нанесение ударов(для мини онлайн игры) а mt_rand без заноса в сессию не как, так как во время обработки данные из mt_rand надо заносить в разные переменные
(Добавление)
CODE (htmlphp):
скопировать код в буфер обмена
  1. <!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">
  3. <head>
  4. <meta http-equiv="Cache-Control" content="no-cache">
  5.  
  6. <title> SERVER </title>
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  8. <meta name="keywords" content=""/>
  9. <meta name="description" content=""/>
  10. <meta name="viewport" content="width=device-width, initial-scale=1">
  11. <meta name="og:image" content="images/logotype.png"/>
  12. <meta name="og:title" content="">
  13. <meta name="og:description" content="">
  14. <meta name="og:url" content="/">
  15. <meta name="og:site_name" content="">
  16. <meta name="og:locale" content="ru_RU">
  17. <meta name="og:type" content="website">
  18. <meta name="yandex-verification" content="5dfb809546fda07b" />
  19. <link rel="shortcut icon" href="favicon.ico" type="image/x-icon"/>
  20. <link rel="stylesheet" href="style/style.css" type="text/css"/>
  21.  
  22. </head>
  23.  
  24.  
  25. <body>
  26.  
  27. <?php
  28.  
  29. if (isset($_GET['end'])) {
  30. unset($_SESSION['hpm']);
  31.  
  32. header('Location: index.php');
  33. }
  34.  
  35. if (!isset($_SESSION['hpm']))$_SESSION['hpm'] = 342;
  36.  
  37. if (isset($_SESSION['hpm']) && ($_SESSION['hpm'] == 0 || $_SESSION['hpm'] < 0)) {
  38. echo 'Вы одержали победу! <br/>
  39. <a href="?end"><b>Еще</b></a>';
  40. unset($_SESSION['hpm']);
  41. unset($_SESSION['jurnal']);
  42. }
  43.  
  44. if (isset($_POST['battle'])):
  45.  
  46. $de = array('Ударил', 'Разнес', 'Сокрушил', 'Пробил', 'Сокрушительно ударил');
  47. $der = mt_rand(0,4);
  48.  
  49. $_SESSION['rand'] = mt_rand(5,37);
  50. $_SESSION['hpm'] = $_SESSION['hpm']-$_SESSION['rand'];
  51.  
  52. if (!isset($_SESSION['jurnal'])):
  53.  
  54. $_SESSION['jurnal'] = $de[$der] .' волка на '. $_SESSION['rand'];
  55. else:
  56.  
  57. $_SESSION['jurnal'] = $de[$der] .' волка на '. $_SESSION['rand'] .'<br/>'.$_SESSION['jurnal'];
  58. endif;
  59.  
  60. unset($_SESSION['rand']);
  61. endif;
  62.  
  63.  
  64. echo '<div class="podmenu">
  65. <br/>
  66. <form method="POST" action="?">
  67. <input type="submit" name="battle" value="Бить волка '. (isset($_SESSION['hpm']) && $_SESSION['hpm'] > 0 ? $_SESSION['hpm'] : NULL) .'">
  68. </form>
  69. </div>';
  70.  
  71. if (isset($_SESSION['jurnal'])):
  72.  
  73. /*** Вот тут надо как то сделать вывод последних 10 записей массива***/
  74.  
  75. echo $_SESSION['jurnal'];
  76.  
  77. endif;
  78.  
  79. echo '</body>
  80. </html>';
  81.  

(Добавление)
Код конечно уг, это набросок, но пример рабочий, можно на локалке протестить))
Кратко о ТЗ игры:

Есть бот сессия HPM, жмем ссылку бить, тем самым рандомно отнимаем жизнь. Т.е при каждом ударе будет по разному отниматься жизнь. Задача сделать мини журнал боя

(Отредактировано автором: 29 Сентября, 2020 - 14:00:26)

 
 Top
Wolkodaw
Отправлено: 29 Сентября, 2020 - 16:16:20
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Сент. 2020  


Помог: 0 раз(а)




Notice: Array to string conversion in /storage/emulated/0/www/index.ph p on line 59

Ругается на это
$_SESSION['jurnal'][] = $de[$der] .' волка на '. $_SESSION['rand']; я как понял на пустые скобки
 
 Top
Vladimir Kheifets
Отправлено: 29 Сентября, 2020 - 17:27:46
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




Wolkodaw пишет:
Notice: Array to string conversion in /storage/emulated/0/www/index.ph p on line 59

Ругается на это
$_SESSION['jurnal'][] = $de[$der] .' волка на '. $_SESSION['rand']; я как понял на пустые скобки


В начале присваивается $_SESSION['jurnal'][0] = $de[$der] .' волка на '. $_SESSION['rand'];
Похоже, что у Вас не работает сессия.
Ругается т.к. не понимет, что в $_SESSION['jurnal'] массив.
Поставьте print_r($_SESSION['jurnal']) перед 59
 
 Top
LIME
Отправлено: 29 Сентября, 2020 - 21:38:30
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Vladimir Kheifets пишет:
Ругается т.к. не понимет, что в $_SESSION['jurnal'] массив.
нет
это попытка конкатенировать в строку массив
что-то из этого - $de[$der], $_SESSION['rand'] является массивом, а не строкой
а конкатенировать можно только строки
http://phpfaq[dot]ru/debug

(Добавление)
видимо настоящий код отличается от предоставленного
(Добавление)
а ну понятно
сначала ты вот тут
PHP:
скопировать код в буфер обмена
  1. $_SESSION['jurnal'][] = $de[$der] .' волка на '. $_SESSION['rand']; я как понял на пустые скобки
создаешь массив
а на следующий запрос уже вот тут
PHP:
скопировать код в буфер обмена
  1. $_SESSION['jurnal'] = $de[$der] .' волка на '. $_SESSION['rand'] .'<br/>'.$_SESSION['jurnal'];
этот же массив пытаешься конкатенировать в конце
ну и да... код изменен и отличаетс я от предоставленной выше портянки
учись дебажить
если с каждой такой ошибкой бежать на форум далеко не уйдешь
 
 Top
Wolkodaw
Отправлено: 30 Сентября, 2020 - 09:05:46
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Сент. 2020  


Помог: 0 раз(а)




Вечером сам обнаружил свой косяк)) пишу на андроиде на локалке глаза ещё не привыкли
(Добавление)
array_slice() - что то подружиться не смог, выход нашёл так
PHP:
скопировать код в буфер обмена
  1.  
  2. if (isset($_SESSION['jurnal'])):
  3.  
  4. for($i=count($_SESSION['jurnal']);  $i>=0; $i--) {
  5. echo '<b>' . $_SESSION['jurnal'][$i] . '</b><br /><br />';
  6. }
  7.  
  8. endif;

Но не знаю как оборвать чтобы выводило 10 последних, так как массив не леминитирован, если в наглую обрубить break, то не знаю от чего плясать))
(Добавление)
---------
[img]https://cs08.spac.me/f/081051140051171136158048053162046098021234032223064168/1601446461/82954620/480x800/d41ef23452103c8c85037ba240aa3a4c/Screenshot_20200930-110124.png[/img] что получилось

(Отредактировано автором: 30 Сентября, 2020 - 09:18:02)

 
 Top
LIME
Отправлено: 30 Сентября, 2020 - 10:24:17
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




PHP:
скопировать код в буфер обмена
  1. for ($i = 0, $key = count($_SESSION['jurnal']) - 1; $i < 10; ++$i, --$key) {
  2.     echo $_SESSION['jurnal'][$key];
  3. }
  4. for ($i = 0, $key = count($_SESSION['jurnal']) - 1; $i < 10; ++$i) {
  5.     echo $_SESSION['jurnal'][$key - $i];
  6. }
  7.  


Undefined index - распространенная у новичков ошибка сдвига на единицу
ключи у массивов начинаются с 0
 
 Top
Wolkodaw
Отправлено: 30 Сентября, 2020 - 11:12:03
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Сент. 2020  


Помог: 0 раз(а)




LIME пишет:

Undefined index - распространенная у новичков ошибка сдвига на единицу
ключи у массивов начинаются с 0


Parse error: syntax error, unexpected '$key ' (T_VARIABLE) in /storage/emulated/0/www/index.ph p on line 87

for ($i = 0, $key = count($_SESSION['jurnal']) - 1; $i < 10; ++$i) {
 
 Top
Wolkodaw
Отправлено: 30 Сентября, 2020 - 14:40:47
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Сент. 2020  


Помог: 0 раз(а)




Всё-таки обрубил в наглую
CODE (htmlphp):
скопировать код в буфер обмена
  1. if (isset($_SESSION['jurnal'])):
  2. $j=0;
  3. for($i=count($_SESSION['jurnal'])-1;  $i>=0; $i--) {
  4. $j++;
  5. echo '<b>' . $_SESSION['jurnal'][$i] . '</b><br/>';
  6. if ($j==10)break;
  7. }
  8. endif;


Работает четко, только не знаю как скажется на производительности
(Добавление)
Но вот тут такая проблема
PHP:
скопировать код в буфер обмена
  1.  
  2. if (isset($_SESSION['hpm']) && $_SESSION['hpm'] <= 0) {
  3. echo 'Вы одержали победу! <br/>
  4. <a href="?end"><b>Еще</b></a>';
  5. unset($_SESSION['hpm']);
  6. unset($_SESSION['jurnal']);
  7. }
  8.  

Из $_SESSION['hpm'] постепенно отнимается рандомное числовое значение, оно должно при 0 или минусовом значении выводить ПОБЕДА. но оно сначала записывает минусовое значение в $_SESSION['hpm'], а при повторной обработке только потом выдаёт результат. Как сделать что бы такого не было?
(Добавление)
PHP:
скопировать код в буфер обмена
  1. if (!isset($_SESSION['hpm']))$_SESSION['hpm'] = 342;
  2.  
  3. if (isset($_SESSION['hpm']) && (!intval($_SESSION['hpm']) || $_SESSION['hpm'] < 1 || !preg_match('/^\+?\d+$/', $_SESSION['hpm']))) {
  4. echo 'Вы одержали победу! <br/>
  5. <a href="?end"><b>Еще</b></a>';
  6. unset($_SESSION['hpm']);
  7. unset($_SESSION['jurnal']);
  8. }
  9.  
побывал и так, все равно минусовое значение показывает, только после следующей обработки формы показывает нужный результат
 
 Top
Vladimir Kheifets
Отправлено: 09 Октября, 2020 - 11:26:27
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




LIME пишет:
PHP:
скопировать код в буфер обмена
  1. for ($i = 0, $key = count($_SESSION['jurnal']) - 1; $i < 10; ++$i, --$key) {
  2.     echo $_SESSION['jurnal'][$key];
  3. }
  4. for ($i = 0, $key = count($_SESSION['jurnal']) - 1; $i < 10; ++$i) {
  5.     echo $_SESSION['jurnal'][$key - $i];
  6. }
  7.  


Undefined index - распространенная у новичков ошибка сдвига на единицу
ключи у массивов начинаются с 0
Wolkodaw пишет:
LIME пишет:

Undefined index - распространенная у новичков ошибка сдвига на единицу
ключи у массивов начинаются с 0


Parse error: syntax error, unexpected '$key ' (T_VARIABLE) in /storage/emulated/0/www/index.ph p on line 87

for ($i = 0, $key = count($_SESSION['jurnal']) - 1; $i < 10; ++$i) {


Видимо опечатка д.б. for ($i = 0;...

(Отредактировано автором: 09 Октября, 2020 - 11:26:52)

 
 Top
LIME
Отправлено: 09 Октября, 2020 - 11:57:07
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Vladimir Kheifets пишет:
Видимо опечатка

нет... хз что там у тс не получается
но тут можно это поправить
PHP:
скопировать код в буфер обмена
  1. echo $_SESSION['jurnal'][$key] ?? '';

(Добавление)
или
PHP:
скопировать код в буфер обмена
  1. for ($i = 0, $key = count($_SESSION['jurnal']) - 1; $i < 10 && $key >= 0; ++$i, --$key) {
  2.     echo $_SESSION['jurnal'][$key];
  3. }
 
 Top
LIME
Отправлено: 09 Октября, 2020 - 18:58:07
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




https://www.php.net/manual/ru/co...ructures.for.php
PHP:
скопировать код в буфер обмена
  1. /* пример 4 */
  2.  
  3. for ($i = 1, $j = 0; $i <= 10; $j += $i, print $i, $i++);
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB