Как заставить форму запомнить, что было выбрано в форме с помощью PHP? - PullRequest
0 голосов
/ 04 декабря 2011

У меня есть форма, которая проверяет информацию, представленную в форме, метод POST и отправляется в другой файл "Check.php", я использую сеансы, чтобы запомнить, что такое данные POST, когда когда-либо возникает проблема сформу я перенаправляю обратно на страницу ввода формы.

Как вы получаете данные постов, чтобы запомнить, какой параметр был выбран во входе SELECT?

КОД:

<select name="referred">
    <option value="facebook">facebook</option>
    <option value="youtube">youtube</option>
    <option value="reddit">reddit</option>
    <option value="google">google</option>
</select>

Я пытался сделать это, но не работает:

<select name="referred">
    <option value="facebook"   
    <?php
        if (isset($_POST['referred']) && $_POST['referred'] == "Facebook") {
            print "selected=\'selected\'";
        } 
    ?>?> >facebook</option>

Я пытался сделать это, но все равно, нетработа :(

<select name="referred">
    <option value="facebook"
    <?php
        if (isset($_POST['referred'])) {
            if ($_POST['referred'] == "youtube") { 
                echo "selected=\'selected\'";
            } else {
                echo "";
            }
        }
    ?> >facebook

Пожалуйста, помогите!

РЕДАКТИРОВАТЬ:

Я извиняюсь, я не использую $ _POST здесь, чтобы проверить, еслион установлен, я должен использовать $ _SESSION, см. ниже:

            <select name="referred">
                <option name="google"<?php if(isset($_SESSION['referred'])){ if($_SESSION['referred'] == "google"){ echo "selected='selected'";}else{ echo "";}}?>>google</option>
                <option name="youtube"<?php if(isset($_SESSION['referred'])){ if($_SESSION['referred'] == "youtube"){ echo "selected='selected'";}else{ echo "";}}?>>youtube</option>
                <option name="reddit" <?php if(isset($_SESSION['referred'])){ if($_SESSION['referred'] == "reddit"){ echo "selected='selected'";}else{ echo "";}}?>>reddit</option>
                <option name="facebook" <?php if(isset($_SESSION['referred'])){ if($_SESSION['referred'] == "facebook"){ echo "selected='selected'";}else{ echo "";}}?>>facebook</option>
            </select>

Ответы [ 3 ]

1 голос
/ 04 декабря 2011

отделяет вашу бизнес-логику от логики представления
определить ваши переменные.
избегайте повторений.

код

$form['referred'] = array('facebook','youtube','reddit','google');

if ($_SERVER['REQUEST_METHOD']=='POST') {
  //form validations
  //if failed, fill variables with actual values
  $form['ref'] = $_POST['referred'];
} else {
  //filling variables with empty values
  $form['ref'] = '';
}

шаблон

<select name="referred"> 
<? foreach($form['referred'] as $val): ?>
  <option<? if($form['ref'] == $val):?> selected="selected"<? endif ?>><?=$val?></option> 
<? endforeach ?>
</select> 
0 голосов
/ 04 декабря 2011

Вам не нужно экранировать одинарные кавычки в строке, заключенной в двойные кавычки .

echo "selected=\'selected\'" // incorrect

Как будто ваша HTML-разметка будет выглядеть как <option value="facebook" selected=\'selected'\> Что является плохим HTML.

Это должно работать.

EDIT

<select name="referred">
    <?php
        if (!empty($_SESSION['referred']) && 'option1' == $_SESSION['referred']) {
            $selected = 'selected="selected"';
        } else {
            $selected = null;
        }
    ?>
    <option value="option1" <?= $selected; ?>>option1</option>
    ....
</select>

Если у вас есть известный набор параметров, создайте массив и выполните их цикл:

<?php
    $options = array(
        'option1' => 'Option 1',
        'option2' => 'Option 2',
        'option3' => 'Option 3' // ...
    );
    $referredIsset = isset($_SESSION['referred']);
?>

<select name="referred">
    <?php foreach ($options as $value => $name): ?>
        <?php
            $sel = ($referredIsset && $_SESSION['referred'] == $value)
                ? 'selected="selected"'
                : null;
        ?>
        <option value="<?= $value; ?>" <?= $sel; ?>>
            <?= $name; ?>
        </option>
    <?php endforeach; ?>
</select>
0 голосов
/ 04 декабря 2011

Прежде всего var_dump ($ _ POST); чтобы увидеть, что вы получите после отправки формы.

(Вам не нужна СЕССИЯ для хранения ваших данных POST. Все, что вам нужно, находится в $ _POST. А в случае возникновения ошибки вы можете перенаправить на вашу форму без необходимости дополнительно сохранять информацию в сеансе.)

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