За последние 24 часа нас посетили 14933 программиста и 1730 роботов. Сейчас ищут 555 программистов ...

Как сохранить и вывести массив сессии?

Тема в разделе "PHP для новичков", создана пользователем snoom, 31 янв 2024.

Метки:
  1. snoom

    snoom Гость

    С нами с:
    31 янв 2024
    Сообщения:
    1
    Симпатии:
    0
    Суть программы заключается в том, что есть поле ввода и кнопка. В поле вводиться город и на кнопку он выводиться. У следующего вводимого значения должна совпадать первая буква с предыдущей последней (т. е. игра в города). Проблема заключается в том, что нужно выводить все введенные значения и при отправке они должны сохраняться на своем месте.
    PHP:
    1. <?php session_start(); ?>
    2. <!DOCTYPE html>
    3. <html lang="en">
    4. <head>
    5.   <meta charset="UTF-8">
    6.   <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7.   <title>lab5</title>
    8. </head>
    9. <body>
    10. <form method="POST" >
    11. <input name="gorod" type="textbox">
    12.  
    13. <input name="submit" type="submit">
    14. <input value="chistka" type="submit" type="button" name="chistka">
    15. </form>
    16.   <?php
    17.  
    18. if( isset($_POST["submit"]) ) {
    19. //print_r($_SESSION['city']) ;
    20.  
    21.   //$_SESSION['city'][1] = $_POST["gorod"];
    22.  
    23.   if(isset($_SESSION['city'])) {
    24.     $last = substr($_SESSION['city'],-1);
    25.     $first = str_split($_POST["gorod"]);
    26.     if($last == $first[0]) {
    27.       echo $_POST["gorod"]." Верно";
    28.       $_SESSION['city'] = $_POST["gorod"];
    29.      
    30.     } else {
    31.       echo "error";
    32.     }
    33.   }else{
    34.     $_SESSION['city'] = $_POST["gorod"];
    35.     echo $_SESSION['city']. " ". "первый раз";
    36.   }
    37.  
    38. }
    39. if(isset($_POST["chistka"])) {
    40. }
    41.   ?>
    42. </body>
    43. </html>
    --- Добавлено ---
    Пытался при каждом клике пушить в массив, но он все равно обновляет
    Код (Text):
    1. <?php session_start(); ?>
    2. <!DOCTYPE html>
    3. <html lang="en">
    4. <head>
    5.   <meta charset="UTF-8">
    6.   <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7.   <title>lab5</title>
    8. </head>
    9. <body>
    10. <form method="POST" >
    11. <input name="gorod" type="textbox">
    12.  
    13. <input name="submit" type="submit">
    14. <input value="chistka" type="submit" type="button" name="chistka">
    15. </form>
    16.   <?php
    17.  
    18. if( isset($_POST["submit"]) ) {
    19. //print_r($_SESSION['city']) ;
    20. $arr = [];
    21. array_push($arr, $_POST["gorod"] );
    22. print_r($arr);
    23.   //$_SESSION['city'][1] = $_POST["gorod"];
    24.  
    25.   if(isset($_SESSION['city'])) {
    26.    
    27.     $last = substr($_SESSION['city'],-1);
    28.     $first = str_split($_POST["gorod"]);
    29.    
    30.     if($last == $first[0]) {
    31.    
    32.       echo $_POST["gorod"]." Верно";
    33.       $_SESSION['city'] = $_POST["gorod"];
    34.  
    35.      
    36.     } else {
    37.       echo "error";
    38.     }
    39.   }else{
    40.     $_SESSION['city'] = $_POST["gorod"];
    41.     echo $_SESSION['city']. " ". "первый раз";
    42.   }
    43.  
    44. }
    45. if(isset($_POST["chistka"])) {
    46.   session_destroy();
    47. }
    48.   ?>
    49. </body>
    50. </html>
     

    Вложения:

  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.854
    Симпатии:
    748
    Адрес:
    Татарстан
    чудес на свете не бывает, если вы не храните данные где-то то им неоткуда взяться....
    пушить надо не в массив - который при каждой перезагрузке обнуляется, а в сессии создать массив и пушить туда

    PHP:
    1.  $_SESSION['city'][] = $_POST["gorod"];
    ну и выводить историю соответственно потом из этого массива
     
  3. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    429
    Симпатии:
    80
    Адрес:
    Бавария, Германия
    Добрый день!
    Обратите внимание на то, какие атрибуты допускаются в тэге input
    https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input
    В Ваше случае, атрибут type="textbox" указан неверно, д.в "text"
    В input атрибут type д.б. задан один раз,а у Вас type="submit" type="button"
    Браузер акцептирует последний. Если нужен "button", то "submit" лучше убрать.
    По поводу реализации. Это типичная задачка для JS. Загружать сервер в без надобности.
    Если бы у Вас был селектор городов и их названия выбирались из БД, то тогда без этого не обойтись
    Удачи!
     
  4. Dremax

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

    С нами с:
    13 фев 2015
    Сообщения:
    154
    Симпатии:
    4
    Города я записываю в файл gorod.txt
    Не получилось записать массив городов в куки,даже чат GPT Сбербанка не знает
    Автор просил сохранять города - я сохранил
    При воде второго города всегда выдает ERROR
    Исправляйте
    Я не профессионал,я самоучка
    Посмотреть на работу этого кода:https://кибершахматы.рф/petuh/gorod.php

    PHP:
    1. <?php session_start(); ?>
    2. <!DOCTYPE html>
    3. <html lang="en">
    4. <head>
    5.   <meta charset="UTF-8">
    6.   <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7.   <title>lab5</title>
    8. </head>
    9. <body>
    10. <center>
    11. <form method="POST" >
    12. <input name="gorod" type="textbox">
    13. <input name="submit" type="submit">
    14. <input value="chistka" type="submit" type="button" name="chistka">
    15. </form>
    16.   <?php
    17. if( isset($_POST["submit"]) ) {
    18.  
    19. $base='gorod.txt';
    20. if ( !file_exists($base) )   {
    21. $openchatdb=fopen($base,"w");
    22. if(fwrite($openchatdb,"")) { ;  }
    23. fclose($openchatdb);
    24.    }
    25.  
    26. $openchatdb=fopen($base,"a");
    27. if(fwrite($openchatdb,$gorod."\n")) { ;  }
    28. fclose($openchatdb);
    29.  
    30.   if(isset($_SESSION['city'])) {
    31.     $last = substr($_SESSION['city'],-1);
    32.     $first = str_split($_POST["gorod"]);
    33.     if($last == $first[0]) {
    34.       echo $_POST["gorod"]." Верно";
    35.       $_SESSION['city'] = $_POST["gorod"];
    36.    
    37.     } else {
    38.       echo "error";
    39.     }
    40.   }else{
    41.     $_SESSION['city'] = $_POST["gorod"];
    42.     echo $_SESSION['city']. " ". "первый раз";
    43.   }
    44. }
    45. if(isset($_POST["chistka"])) {
    46. }
    47.  
    48. $base='gorod.txt';
    49. if($file = fopen($base, "r")) { $b4=0;}
    50. while(!feof($file)) {
    51. if($gorod[]= fgets ($file)){ $b4=$b4+1; }
    52. }
    53. fclose ($file);
    54.  
    55. for($g=0;$g<$b4;$g++) {
    56. $gorod[$g] = preg_replace("|[\r\n]+|", "", $gorod[$g]);
    57. $g1=$g+'1';              
    58. echo '<br>'.$g1.'.'.$gorod[$g];
    59.                                     }
    60. echo '<br><br>Считалось городов '.$b4;
    61.  
    62. ?>
    63. </center>
    64. </body>
    65. </html>
     
  5. Dremax

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

    С нами с:
    13 фев 2015
    Сообщения:
    154
    Симпатии:
    4
    Напиши maxlength=20, чтобы вместо города предложение не ввели
    <input name="gorod" maxlength=20 type="textbox">

    И добавь $gorod=htmlspecialchars($gorod);
    Чтобы тебе сайт не стерли через код PHP
     
  6. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    429
    Симпатии:
    80
    Адрес:
    Бавария, Германия
    Нет такого типа type="textbox"
    Петропавловск-Камчатский maxlength 24
    Как это "сайт не стерли через код PHP"?
     
  7. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    429
    Симпатии:
    80
    Адрес:
    Бавария, Германия
     
  8. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    429
    Симпатии:
    80
    Адрес:
    Бавария, Германия
    Добрый день!
    Игра в города без PHP и $_SESSION. Только HTML5 и Native Java Script
    HTML:
    1. <!DOCTYPE html>
    2. <html lang="ru">
    3.   <meta charset="UTF-8">
    4.   <meta name="viewport" content="width=device-width, initial-scale=1.0">
    5.   <title>lab5</title>
    6.   <style>
    7.   body, input{
    8.     font-family: arial;
    9.     font-size: 16px
    10.   }
    11.  
    12.   input[name='city']{width: 250px}
    13.  
    14.   input + input{
    15.     margin-left: 10px
    16.   }
    17.  
    18.   #сities{
    19.    vertical-align: top;
    20.    margin-left: 30px;
    21.    text-align: left;
    22.    padding: 10px;
    23.    height: 300px;
    24.    width: 200px;
    25.    overflow-y: auto;
    26.    border: 1px solid #ccc;
    27.    background-color:#F2F2F2;
    28.    border-radius: 5px;
    29.    display: inline-block
    30.   }
    31.  
    32.   #сities div{
    33.     margin-top: 3px
    34.   }
    35.  
    36.   body > div{margin-top: 40px}
    37.   </style>
    38. </head>
    39. <div align="center">
    40. <form method="POST" >
    41. <input name="city" type="text" pattern="^[А-Яа-яЁё\s\-]+$" required>
    42.   <input name="submit" type="submit" value="Отправить"  >
    43.   <input  type="reset" value="Сброс"> <div id="сities"></div>
    44. </form>
    45. </div>
    46. </body>
    47. CitiesNames = [];
    48. elCities = document.getElementById("сities");
    49. f = document.forms[0];
    50. f.addEventListener("submit", (event) => {
    51.   event.preventDefault();
    52.   elCity = document.forms[0].city;
    53.   city = elCity.value;
    54.   cityUC = city.toUpperCase();
    55.   if(CitiesNames.includes(cityUC))
    56.   {
    57.     alert(`Ошибка! Вы поторно ввели город ${city}!` );
    58.     return;
    59.   }
    60.   else
    61.   {
    62.     CitiesNames.push(cityUC);
    63.     firstLetter = cityUC.slice(-1);
    64.     pattern = new RegExp('^[ЪЙЫЬ]');
    65.     elCity.value = pattern.test(firstLetter)?cityUC.substr(-2,1):firstLetter;
    66.     el = document.createElement("div");
    67.     el.innerHTML = city;
    68.     elCities.appendChild(el);
    69.     elCities.scrollTo(0, info.scrollHeight);
    70.   }
    71. });
    72.  
    73. f.addEventListener("reset", () => {
    74.   elCities.innerHTML = "";
    75.   CitiesNames = [];
    76. });
    77. </html>
    Удачи!
     

    Вложения: