Сохраните данные формы в переменные SESSION перед отправкой - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть форма для отправки данных, и я использую следующий код для переменных сеанса

    if(!isset($_SESSION)) 
{ 
    session_start(); 
} 
if (isset($_SESSION['product'])) {
    $product = $_SESSION['product'];
    if($product == "loan"){$loan='selected="selected"';} else {$loan='';}
    if($product == "card"){$card='selected="selected"';} else {$card='';}
    if($product == "savings"){$savings='selected="selected"';} else {$savings='';}
    if($product == "morgage"){$mortgage='selected="selected"';} else {$mortgage='';}
} else { $loan = $card = $savings = $mortgage = '';}
if (isset($_SESSION['liked'])) {
    $liked = stripslashes(htmlspecialchars(($_SESSION['liked'])));
} else {
    $liked = '';
}
if (isset($_SESSION['disliked'])) {
    $disliked = stripslashes(htmlspecialchars(($_SESSION['disliked'])));
} else {
    $disliked = '';
}

Форма выглядит примерно так

        <form id="msform" class="form-horizontal" method="POST" action="">
        <label for="product">Select product:</label>
          <select name="product" id="product">
              <option value="loan" '. $loan .'>Personal Loan</option>
              <option value="card" '. $card .'>Credit Card</option>
              <option value="savings" '. $savings .'>Savings Account</option>
              <option value="mortgage" '. $mortgage .'>Mortgage</option>
            </select> 
        <textarea rows="4" name="liked" placeholder="I really liked...">'. $liked .'</textarea>
        <textarea rows="4" name="disliked" placeholder="I did not like...">'. $disliked .'</textarea>

        <!-- php if statements here, if logged in show submit button if not show Facebook login button -->

        <input type="submit" name="submit" class="submit action-button" value="Submit"/>

Кнопка отправки отображается толькочтобы войти в систему пользователей.Если пользователь не вошел в систему, отображается кнопка входа в Facebook.Когда он нажимает на это, он отправляется в Facebook, где, если он принимает разрешения приложения, он перенаправляется обратно в форму как зарегистрированный пользователь.Но тогда все поля были очищены.Как я могу сохранить данные в переменные сеанса и снова заполнить их, если GET / POST еще не вызван?

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Я позволил себе немного улучшить ваш код.

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

<?php
// First, we'll check if the session is set. Otherwise, we'll set it
if (!isset($_SESSION)) {
    session_start(); 
}

$fb = new Facebook\Facebook([/* . . . */]);
$helper = $fb->getRedirectLoginHelper();
$permissions = ['email', 'user_likes'];
$loginUrl = $helper->getLoginUrl($_SERVER['REQUEST_URI'], $permissions);

// Is the form submitted? Add the formData to our session
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $_SESSION['formData'] = $_POST;
    unset($_POST);

    // If the user is not logged in, redirect them to the facebook login
    if (!$loggedIn) {
        header("location: " . $loginUrl);
        exit;
    }
}

// Predefine our select dropdown values
$options = [
    'loan' => 'Personal Loan',
    'card' => 'Credit Card',
    'savings' => 'Savings Account',
    'mortgage' => 'Mortgage',
];
?>

<!-- Your form -->
<form id="msform" class="form-horizontal" method="POST" action="">
        <label for="product">Select product:</label>
    <select name="product" id="product">
        <?php foreach ($options as $option => $optionValue): ?>
        <option value="<?= $option; ?>" <?= isset($_SESSION['formData']['product']) && $_SESSION['formData']['product'] == $option ? 'selected="selected"' : ''; ?>><?= $optionValue; ?></option>
        <?php endforeach; ?>
    </select>
    <textarea rows="4" name="liked" placeholder="I really liked..."><?= isset($_SESSION['formData']['liked'] ? $_SESSION['formData']['liked'] : ''; ?></textarea>
    <textarea rows="4" name="disliked" placeholder="I did not like..."><?= isset($_SESSION['formData']['disliked']) ? $_SESSION['formData']['disliked'] : ''; ?></textarea>
    <?php if ($loggedIn): ?>
        <input type="submit" name="submit" class="submit action-button" value="Submit"/>
    <?php else: ?>
        <input type="submit" name="submit" class="submit action-button" value="Login with Facebook"/>
    <?php endif; ?>
</form>
0 голосов
/ 07 февраля 2019

Насколько я понимаю, вы хотите хранить FormData в памяти, которая впоследствии может быть использована для повторного заполнения полей.Для этого было бы лучше использовать LocalStorage, а не SessionStorage.LocalStorage API документирован здесь.

https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage

...