Работа с сессией в PHP - PullRequest
0 голосов
/ 04 июня 2018

У меня есть форма, из которой я беру некоторые данные и использую сеанс. Я хочу сохранить эти данные в виде истории на своей странице, а также, когда я нажимаю на одну строку из моей истории, я хочу, чтобы мои данные автоматически заполнялись в моей форме.,Я видел пример на одной странице, и я попытался сделать это, чтобы применить то, что я хочу, но это не совсем функционально.

Это мой код для формы:

<form method="get">
         Create:<br><br>

                  Name:<br> <input type="text" id="name" value="" /><br>
                  surname:<br> <input type="text" id="surname" value="" /><br>
                  Sex:<br> <div class="select-wrapper">
                              <select name="sex" id="sex">
                                 <option value="">- Sex -</option>
                                 <option value="woman">Woman</option>
                                     <option value="male">Male</option>
                              </select>
                             </div>
                  Role: <div class="select-wrapper">
                              <select name="rol" id="rol">
                                 <option value="">- Role -</option>
                                 <option value="visitor">Visitor</option>
                                 <option value="Professor">Professor</option>
                                 <option value="Student">Student</option>
                              </select>
                             </div>
                   Text color: <div class="select-wrapper">
                              <select name="cul" id="cul">
                                 <option value="">- Text color -</option>
                                 <option value="red">Red</option>
                                 <option value="blue">Blue</option>
                                 <option value="black">Black</option>
                              </select>
                             </div>
                   Font text: <div class="select-wrapper">
                              <select name="font" id="font">
                                 <option value="">- Font text -</option>
                                 <option value="15px Arial">Arial</option>
                                 <option value="15px Times New Roman">Times New Roman</option>
                                 <option value="15px Georgia">Georgia</option>
                                 <option value="15px Comic Sans MS">Comic Sans MS</option>
                                 <option value="15px Lucida Sans Unicode">Lucida Sans Unicode</option>
                                 <option value="15px Courier New">Courier New</option>
                              </select>
                             </div>
                   Format : <div class="select-wrapper">
                                    <select name="format" id="format">
                                       <option value="">- Format -</option>
                                       <option value="portrait">Portrait</option>
                                       <option value="landscape">Landscape</option>
                                    </select>
                                  </div>
                   Style text: <div class="select-wrapper">
                                    <select name="stil" id="stil">
                                       <option value="">- Style text -</option>
                                       <option value="stil1">Stil1</option>
                                       <option value="stil2">Stil2</option>
                                       <option value="stil3">Stil3</option>
                                       <option value="stil4">Stil4</option>
                                       <option value="stil5">Stil5</option>
                                       <option value="stil6">Stil6</option>
                                    </select>
                                  </div>
</form>

И этогде я пытался использовать сессию:

<?php
session_start();

$createpas = parseRequest();
storecreatepas($createpas);

include "form.php";

$createpases = $_SESSION['createpases'];
include "history.php";




function storecreatepas($createpas) {
    if (!isset($_SESSION['createpases'])) {
        $_SESSION['createpases'] = [];
    }

    if (!$createpas->isEmpty()) {
        $_SESSION['createpases'][] = $createpas;
    }
}


function parseRequest() {
    $createpas = new createpasRequest;
    $createpas->cul = !empty($_GET['cul']) ? $_GET['cul'] : "";
    $createpas->font = !empty($_GET['font']) ? $_GET['font'] : "";
    $createpas->format = !empty($_GET['format']) ? $_GET['format'] : "";
    $createpas->stil = !empty($_GET['stil']) ? $_GET['stil'] : "";
    return $createpas;
}


/**
 * createpas request
 */
class createpasRequest
{
    public $cul = "";
    public $font = "";
    public $format = "";
    public $stil = "";

    function toQueryString() {
        $params = [
                'cul' => $this->cul,
                'font' => $this->font,
                'format' => $this->format,
                'stil' => $this->stil
        ];

        return http_build_query($params);
    }

    function isEmpty() {
        return !$this->cul || !$this->font || !$this->format || !$this->stil;
    }

    function culAsObject() {
        return new DateTime($this->cul);
    }

    function fontAsObject() {
        return new DateTime($this->font);
    }
    function formatAsObject() {
        return new DateTime($this->format);
    }
    function stilAsObject() {
        return new DateTime($this->stil);
    }

}

И код дисплея:

<ul>
    <?php
    foreach ($createpases as $s) {
    ?>
     <li><a href="search.php?<?php echo $s->toQueryString() ?>">
            <?php echo $s->cul?> - <?php echo $s->font?> - <?php echo $s->format?> - <?php echo $s->stil?>
          </a></li>
    <?php
    }
    ?>
</ul>

Это работает очень хорошо до некоторой точки.Он получает мои данные из моей формы, публикует их на странице, но когда я нажимаю на них, они не заполняются автоматически в моей форме.А также, если я хочу, чтобы параметры были уникальными в списке, как я могу это сделать?Прямо сейчас, если я заполню одни и те же данные 2 или 3 раза, они появятся несколько раз в моем списке.Спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Вам необходимо запустить сеанс на странице формы, а затем проверить, содержит ли массив SESSION значения для вывода.

Таким образом, ваш код станет:

<?php session_start(); 
 if(!isset($_SESSION['name']){$_SESSION['name']=''}
 if(!isset($_SESSION['sex']){$_SESSION['sex']=''}
 if(!isset($_SESSION['rol']){$_SESSION['rol']=''}
?>
//this way you will not have issues on page first load before the user fills in the form
<form method="get">
         Create:<br><br>

                  Name:<br> <input type="text" id="name" value="<?php echo $_SESSION['name']; ?>" /><br>
                  surname:<br> <input type="text" id="surname" value="" /><br>
                  Sex:<br> <div class="select-wrapper">
                              <select name="sex" id="sex">
                                 <option value="" <?php if($_SESSION['rol']==''){echo 'selected'} ?>>- Sex -</option>
                                 <option value="woman" <?php if($_SESSION['rol']=='woman'){echo 'selected'} ?>>Woman</option>
                                     <option value="male" <?php if($_SESSION['rol']=='visitor'){echo 'selected'} ?>>Male</option>
                              </select>
                             </div>
                  Role: <div class="select-wrapper">
                              <select name="rol" id="rol">
                                 <option value="" <?php if($_SESSION['rol']==''){echo 'selected'} ?>>- Role -</option>
                                 <option value="visitor" <?php if($_SESSION['rol']=='visitor'){echo 'selected'} ?>>Visitor</option>
                                 <option value="Professor"<?php if($_SESSION['rol']=='Professor'){echo 'selected'} ?>>Professor</option>
                                 <option value="Student"<?php if($_SESSION['rol']=='student'){echo 'selected'} ?>>Student</option>
                              </select>
                             </div>

и т. Д.на.

0 голосов
/ 04 июня 2018

Похоже, что ваша форма не заполняется автоматически данными, потому что вы не реализовали такую ​​функциональность.Эта функция автозаполнения не является автоматической, поскольку сервер не выполняет ее за вас.

Вот пример того, что вам нужно сделать, чтобы заставить автозаполнение работать:

Name:<br> <input type="text" id="name" value="<?= $_SESSION['name'] ?>" /><br>

Для автоматического завершения выбора вам нужно сделать что-то вроде этого:

<select name="cul" id="cul">
    <option value="">- Text color -</option>
    <option value="red" <? echo ($_SESSION['cul']==="red")?"selected='selected'":""; ?>>Red</option>
    <option value="blue" <? echo ($_SESSION['cul']==="blue")?"selected='selected'":""; ?>>Blue</option>
    <option value="black" <? echo ($_SESSION['cul']==="black")?"selected='selected'":""; ?>>Black</option>
</select>

Это устанавливает значение для каждого элемента формы, непосредственно устанавливая значение / выбранный элемент, используя$ _GET данные из предыдущего представления, или если данных нет, все будет пустым / значения по умолчанию.

В соответствии с предложением из одного из комментариев к этому ответу, я хотел бы указать, что вы должнывключите "session_start ()" в верхней части документа, если вы хотите использовать переменные сеанса в документе (если вы еще этого не сделали).

Один вопрос об исходном вопросе: это первый кодблок процедурно сгенерированный или напечатанный вручную?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...