За последние 24 часа нас посетили 64153 программиста и 1752 робота. Сейчас ищут 2313 программистов ...

Запретить перезапись сессии в php

Тема в разделе "PHP для новичков", создана пользователем smartCreate, 9 ноя 2016.

  1. smartCreate

    smartCreate Новичок

    С нами с:
    4 ноя 2016
    Сообщения:
    122
    Симпатии:
    4
    Добрый вечер! Подскажите пожалуйста, возможно ли средствами php запретить перезапись значений в сессии. Например есть переменная которая POSTом передается на сервер, где заноситься в сессию:
    PHP:
    1. if (!isset($_SESSION['tableName'])) {
    2.     $_SESSION['tableName'] = $_POST['btn_addCart'];
    3. }
    Значение в
    PHP:
    1. $_POST['btn_addCart'];
    - каждый раз разное (меняется с обновлением страницы), а мне нужно что бы
    PHP:
    1. $_SESSION['tableName']
    единоразово получило это значение (то есть при самом первом заходе посетителя на сайт) и больше не перезаписывалось, до тех пор пока сама по себе сессия не будет удалена.

    Заранее благодарен за любую помощь!
     
  2. hust0

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

    С нами с:
    6 июл 2013
    Сообщения:
    321
    Симпатии:
    8
    PHP:
    1. $tablename = $_SESSION['tableName'];
    2. if (!isset($tablename)) {
    3.     $_SESSION['tableName'] = $_POST['btn_addCart'];
    4.    
    5. }
    6. if ($tablename)
    7. {
    8.     unset($tablename);
    9. }
    Это имеете ввиду?
     
  3. smartCreate

    smartCreate Новичок

    С нами с:
    4 ноя 2016
    Сообщения:
    122
    Симпатии:
    4

    Я к сожалению, пока еще, очень слаб в пхп-шном синтаксисе, и вот так с лету не могу сказать то это или не то. Могу позволить себе наглость и попросить Вас растолковать строчки которые здесь написаны?
     
  4. hust0

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

    С нами с:
    6 июл 2013
    Сообщения:
    321
    Симпатии:
    8
    получается если есть сессия то сбрасывает ее, а если ее нету то устанавливает....
    --- Добавлено ---
    или какое вы действие хотите, если сессия уже есть?
     
  5. smartCreate

    smartCreate Новичок

    С нами с:
    4 ноя 2016
    Сообщения:
    122
    Симпатии:
    4
    Получается в моей голове это выглядит так - если сессии
    PHP:
    1. $_SESSION['tableName']
    нет, то нужно записать в нее значение:
    PHP:
    1. $_POST['btn_addCart'];
    , а если есть то запретить дальнейшую ее перезапись
     
  6. hust0

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

    С нами с:
    6 июл 2013
    Сообщения:
    321
    Симпатии:
    8
    PHP:
    1. $tablename = $_SESSION['tableName'];
    2.  
    3.  
    4. if(isset($tablename))
    5. {
    6.    
    7. }else{$_SESSION['tableName'] = $_POST['btn_addCart'];}
     
  7. smartCreate

    smartCreate Новичок

    С нами с:
    4 ноя 2016
    Сообщения:
    122
    Симпатии:
    4

    Я попробую перевести все выше написанное на "людской" язык:

    1) Объявляем переменную "tablename";
    2) Присваиваем это переменной значение взятое из сессии с именем "tableName";
    3) Если переменная "tablename" имеет установленное значение то действий не требуется;
    4) В противном случае записать в сессию с именем "tableName", переменную которую я ранее передал на сервер POSTом со значением "btn_addCart".

    Поправите пожалуйста если я где-то ошибся.
     
    denis01 нравится это.
  8. SpikePHP

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

    С нами с:
    6 май 2015
    Сообщения:
    130
    Симпатии:
    23
    PHP:
    1. session_start(); // Создается файл сессии на сервере. Пока пустой файл.
    2.  
    3. if (!isset($_SESSION["tableName"])){ // Срабатывает условие : Если нет переменной $_SESSION["tableName"], то ...
    4. $_SESSION["tableName"] = $_POST["btn_addCart"]; //...создаем переменную $_SESSION["tableName"] и кладём в неё значение $_POST["btn_addCart"]
    5. }
    6.  
    7. echo ("Table name is ".$_SESSION["tableName"]);    // Будет всегда выводить первое значение которое было получено после session_start(), т.е. после создания сессии
    Если сессия создана, то новая создаваться не будет. Этот код то, что тебе нужно
     
    denis01 нравится это.
  9. hust0

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

    С нами с:
    6 июл 2013
    Сообщения:
    321
    Симпатии:
    8
    А я думал у него уже в конфиге прописано session_start(); :D
     
  10. smartCreate

    smartCreate Новичок

    С нами с:
    4 ноя 2016
    Сообщения:
    122
    Симпатии:
    4
    Вы верно думали, session_start(); в конфиге прописан



    Вот здесь проблемка, я сейчас использую именно этот код, точь в точь. Но сессия перезаписывается. Объясню как это происходит:
    1) В сессию $_SESSION["tableName"] попадает значение $_POST["btn_addCart"];
    2) Записанное значение в $_SESSION["tableName"] = имя таблицы с которой в дальнейшем работает пользователь, а именно при нажатии на кнопку срабатывает фуричь, который выводит из таблицы с именем $_SESSION["tableName"] все значения, всех полей;
    3) А дальше происходит беда, фурычь срабатывает только один раз, то есть он сработал, вывел все из таблицы, потом я обновляю страницу и все ломается, значение в $_SESSION["tableName"] перезаписывается, причем в него попадает весь массив данных которые у меня фурычем выводятся на страницу, и вывод данных само-собой перестает работать, ибо в сессии уже не одно значение с именем таблицы, а весь массив данных который выводиться из этой таблицы;

    И я правда не понимаю почему это происходит, уже 3 дня пытаюсь разобраться с этим и нечего не выходит. О сюда появилась идея сделать небольшой "костыль", то есть сделать то о чем я спрашивал, запретить перезапись сессии если в ней уже что-то есть. По этому хотел бы уточнить, код который мне ранее написал @hust0:
    PHP:
    1. $tablename = $_SESSION['tableName'];
    2. if(isset($tablename))
    3. {
    4. }else{$_SESSION['tableName'] = $_POST['btn_addCart'];}
    поможет мне с моей затеей или нет?
     
  11. hust0

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

    С нами с:
    6 июл 2013
    Сообщения:
    321
    Симпатии:
    8
    @smartCreate вы попробовали сделать как я писал?

    PHP:
    1. $tablename = $_SESSION['tableName'];
    2. if(isset($tablename))
    3. {
    4. }else{$_SESSION['tableName'] = $_POST['btn_addCart'];}
     
  12. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @hust0 разве не надо isset натравить на $_SESSION['tableName']? Всю тему не читал, но выглядит не логично.
     
  13. hust0

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

    С нами с:
    6 июл 2013
    Сообщения:
    321
    Симпатии:
    8
    А разве он не натравлен? :)
    PHP:
    1. $tablename = $_SESSION['tableName'];
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    нет, он типа на переменную, которая всегда есть, а значение у неё либо есть, либо null, но опять есть =)

    PHP:
    1. if (!isset($_SESSION['tableName']) AND isset($_POST['btn_addCart'])) {
    2.     $_SESSION['tableName'] = $_POST['btn_addCart'];
    3. }
    и всё, будет работать только один раз.
     
    denis01 нравится это.
  15. hust0

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

    С нами с:
    6 июл 2013
    Сообщения:
    321
    Симпатии:
    8
    Ну я как понял у него $_POST['btn_addCart'] никак не может быть пустым, следовательно зачем его писать в if (!.... ?
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    это пост, он может быть пустым даже случайно =) пусть будет. иначе в таких случаях будет ворнинг. Один раз написал - работает всегда. Хорошо же.
     
  17. smartCreate

    smartCreate Новичок

    С нами с:
    4 ноя 2016
    Сообщения:
    122
    Симпатии:
    4
    Друзья, всем спасибо за участие, и прошу прощения за беспокойство. Видать с утра на меня снизошло прояснение:rolleyes:
    Все дело было в том что у меня фурычь был криво написан, это именно он перезаписывал мою $_SESSION['tableName'] и заносил туда весь массив который он вытаскивал из таблицы. Я просто создал переменную которой присвоил значение $_SESSION['tableName'] и в фуриче использовал эту переменную, сейчас все отлично работает))))
     
  18. hust0

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

    С нами с:
    6 июл 2013
    Сообщения:
    321
    Симпатии:
    8
    Не забудь фильтрацию поставить на постик ;)
     
  19. smartCreate

    smartCreate Новичок

    С нами с:
    4 ноя 2016
    Сообщения:
    122
    Симпатии:
    4
    Наверное вопрос мой не на столько решен, как я сейчас подумал))
    Могли бы Вы уточнить что имеете в виду? потому как я пока не совсем понимаю
     
  20. hust0

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

    С нами с:
    6 июл 2013
    Сообщения:
    321
    Симпатии:
    8
    через preg_match
     
  21. smartCreate

    smartCreate Новичок

    С нами с:
    4 ноя 2016
    Сообщения:
    122
    Симпатии:
    4
    Понял, спасибо изучу этот момент!

    У меня на самом деле родился еще один вопрос, хочу позволить себе наглость и воспользоваться моментом:D

    Я ранее писал что пока еще слаб в пхп-шнов синтаксисе, Вы не подскажите как мне записать следующее условие: "Если в таблице, в поле "articul" уже имеется значение "123456", то сделать то-то и то-то"
     
  22. hust0

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

    С нами с:
    6 июл 2013
    Сообщения:
    321
    Симпатии:
    8
    PHP:
    1. if ($lala["articul"] == "123456")
    2. {
    3. echo "сделать то-то и то-то";
    4. }else{}
     
  23. smartCreate

    smartCreate Новичок

    С нами с:
    4 ноя 2016
    Сообщения:
    122
    Симпатии:
    4
    "$lala" - Это имя таблицы?
     
  24. hust0

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

    С нами с:
    6 июл 2013
    Сообщения:
    321
    Симпатии:
    8
    нет.
    PHP:
    1. $rff=mysql_query("select articul from `имя таблицы`");
    2. $lala=mysql_fetch_array($rff);
    3. if ($lala["articul"] == "123456")
    4. {
    5. echo "сделать то-то и то-то";
    6. }else{}
     
  25. smartCreate

    smartCreate Новичок

    С нами с:
    4 ноя 2016
    Сообщения:
    122
    Симпатии:
    4
    Работает! Спасибо огромное)

    Можете ответить на последний вопрос?) Можете конечно и послать, потому что уже задолбал вопросами)

    Возможно ли в пхп, по нажатию на кнопку изменить числовое значение в одном из полей БД?
    Объясню подробнее:
    1) Есть в таблице поле 'number', в нем хранятся только числовые значения (от 1 и до бесконечности);
    2) на странице есть кнопка;
    3) Нужно что бы при нажатии на эту кнопку, значение в 'number' увеличивалось на +1.

    Возможно ли это сделать?