За последние 24 часа нас посетили 70826 программистов и 2844 робота. Сейчас ищут 1430 программистов ...

Почему переменная в сессии не сохраняется?

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

  1. redcap

    redcap Новичок

    С нами с:
    16 ноя 2016
    Сообщения:
    21
    Симпатии:
    1
    Здравствуйте! Уже сломал голову, не понимаю, почему не работает такой код:
    PHP:
    1.  <?php
    2. //  получаем переменную curws из селектора wslist в форме
    3. $curws = $_POST ['wslist'];
    4. // переменные $dbtable и $connection заданы в скрипте
    5. //пользователь
    6. $user = 'u1';
    7. // таблица БД, из которой скрипт берёт информацию
    8. $dbtable = 'vhosts_kp';
    9. //подключаемся к базе данных
    10. $connection = mysqli_connect('localhost', '***', '***', '***');
    11. //запрашиваем необходимые данные с помощью SQL-запроса
    12. $cursite = mysqli_query ($connection, "SELECT * FROM $dbtable WHERE name = '$curws' ");
    13. // с помощью функции mysqli_fetch_array выводим результат SQL запроса в массив,
    14. //который у нас содержится в переменной $cursitearr
    15. $cursitearr = mysqli_fetch_array ($cursite);
    16. //получаем переменную name из массива cursitearr
    17. $name = $cursitearr['name'];
    18. //запускаем сессию
    19. //кладём в сессию переменную $name
    20. $_SESSION['name'] =  $name;
    21. //если нажата кнопка "Сохранить"
    22. if (isset ($_POST ['save'])) {
    23. //присваиваем переменной namev сохранённое  в сессии значение переменной name
    24. $namev =   $_SESSION["name"];
    25. //выводим переменную namev
    26. echo $namev;
    27.   echo '<br>';
    28.   echo "aliasc = $aliasc";
    29.   echo '<br>';
    30.   echo "namec = $namec";
    31.   echo '<br>';
    32.   echo " emailc = $emailc";
    33. }
    34. ?>
    Результат выполнения кода:
    aliasc = ServerAlias zinc.ru
    namec = arg.ru
    emailc = admin@rovel.ru
    Т.е. переменная namev не выводится, либо в неё записывается пустая строка.
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.830
    Симпатии:
    1.333
    Адрес:
    Лень
    PHP:
    1. <?php
    2.  
    3. error_reporting ( E_ALL );
    4.  
    5. var_dump ( $_POST );
    6.  
    7. # сам код...
    вар дамп что выведет в спойлере ответь + возможные ошибки noticle
     
    denis01 нравится это.
  3. ZlobnyKolob

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

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    PHP:
    должно быть сверху всего кода, разве нет ?
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.830
    Симпатии:
    1.333
    Адрес:
    Лень
    Должен сверху выводимого информации юзерам и использовании $_SESSION
    --- Добавлено ---
    либо выведет Warning: Cannot add header information - headers already sent by
     
    denis01 нравится это.
  5. redcap

    redcap Новичок

    С нами с:
    16 ноя 2016
    Сообщения:
    21
    Симпатии:
    1
    Получаем переменную name с помощью метода POST из селектора формы (кнопка "Открыть") - первый POST-запрос
    PHP:
    1. var_dump ( $_POST );
    2. array(1) { ["wslist"]=> string(9) "ferrum.ru" }
    Сохраняю изменения (нажимаю на кнопку сохранить изменения - второй POST запрос)
    PHP:
    1.   var_dump ( $_POST );
    2. array(7) { ["name"]=> string(9) "ferrum.ru" ["alias"]=> string(23) "ServerAlias argentum.ru" ["charset"]=> string(5) "UTF-8" ["email"]=> string(10) "zirc@am.ru" ["indexfiles"]=> string(20) "index.php index.html" ["save"]=> string(37) "Сохранить изменения" ["data"]=> array(5) { [3]=> array(4) { ["email"]=> string(8) "dd@dd.ru" ["indexfiles"]=> string(20) "index.php index.html" ["alias"]=> string(15) "ServerAlias ddd" ["charset"]=> string(5) "UTF-8" } [4]=> array(4) { ["email"]=> string(9) "zirc@a.ru" ["indexfiles"]=> string(20) "index.php index.html" ["alias"]=> string(23) "ServerAlias argentum.ru" ["charset"]=> string(5) "UTF-8" } [5]=> array(4) { ["email"]=> string(14) "admin@rovel.ru" ["indexfiles"]=> string(20) "index.php index.html" ["alias"]=> string(19) "ServerAlias zinc.ru" ["charset"]=> string(5) "UTF-8" } [6]=> array(4) { ["email"]=> string(14) "admin@rovel.ru" ["indexfiles"]=> string(20) "index.php index.html" ["alias"]=> string(19) "ServerAlias zinc.ru" ["charset"]=> string(5) "UTF-8" } [9]=> array(4) { ["email"]=> string(13) "email@mail.ru" ["indexfiles"]=> string(20) "index.php index.html" ["alias"]=> string(21) "ServerAlias google.ru" ["charset"]=> string(5) "UTF-8" } } }
     
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.830
    Симпатии:
    1.333
    Адрес:
    Лень
    $_POST['wslist'] пустой, смотри <form><input name="wslist" value="..."> отсутствует
    --- Добавлено ---
    про SQL Injection почитайте
     
    denis01 нравится это.
  7. redcap

    redcap Новичок

    С нами с:
    16 ноя 2016
    Сообщения:
    21
    Симпатии:
    1
    PHP:
    1. echo '<form method = "post">' ;
    2. echo '<select name = "wslist">';
    3.          while($weblist = mysqli_fetch_array ($list)) {
    4.           echo "<option value = \"{$weblist['name']}\">{$weblist['name']}</option>";
    5.         }
    6.    echo  '</select>';
    7.    echo '<input type = "submit" value = "Открыть">';
    8.    echo '</form>';
    это селектор wslist
    вот переменная list
    PHP:
    1. $list = mysqli_query ($connection, "SELECT name FROM $dbtable WHERE userid = '$user' ");
    --- Добавлено ---
    Вот весь код
     
    #7 redcap, 16 ноя 2016
    Последнее редактирование: 16 ноя 2016
  8. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.830
    Симпатии:
    1.333
    Адрес:
    Лень
    ну вот теперь полный код
    и
    будет прав
     
    denis01 нравится это.
  9. redcap

    redcap Новичок

    С нами с:
    16 ноя 2016
    Сообщения:
    21
    Симпатии:
    1
    http://pastebin.com/Se1ChCsM - вот весь код, и снова переменная не выводится.
     
  10. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.830
    Симпатии:
    1.333
    Адрес:
    Лень
    будем методом тыка делать

    33 строка заменить на:
    PHP:
    1. $_SESSION['name'] =  $name;
    2. var_dump ($cursitearr);
    верху:
    PHP:
    1. error_reporting ( E_ALL );
    2. var_dump ( $_SESSION );
    все полученные значение с var_dump сюда отправь, конфидициальное если есть звездочками оффни
     
  11. redcap

    redcap Новичок

    С нами с:
    16 ноя 2016
    Сообщения:
    21
    Симпатии:
    1
    Так-с. попробовал
    PHP:
    1. var_dump ($_SESSION)
    POST-запрос "Открыть" -
    PHP:
    1. array(1) { ["name"]=> string(9) "ferrum.ru" }
    POST_запрос "Сохранить изменения" -
    PHP:
    1. array(1) { ["name"]=> NULL }
     
  12. redcap

    redcap Новичок

    С нами с:
    16 ноя 2016
    Сообщения:
    21
    Симпатии:
    1
    Уже решил проблему так:
    PHP:
    1. if (isset ($_POST ['wslist'])) {
    2. $curws = $_POST ['wslist'];
    3. $cursite = mysqli_query ($connection, "SELECT * FROM $dbtable WHERE name = '$curws' ");
    4. $cursitearr = mysqli_fetch_array ($cursite);
    5. $name = $cursitearr['name'];
    6. $_SESSION['name'] =  $name;
    7. }