Хранение данных формы с помощью PHP Session - PullRequest
0 голосов
/ 10 ноября 2011

Я работаю над формой HTML, данные которой будут сохранены при неудачной отправке или обновлении страницы.

Мы используем PHP-сессию для хранения этих данных и отправляем элементы обратно, когда это необходимо.

Проблема в том, что это не работает. Нам необходимо сохранить данные формы при отправке с ошибками или при обновлении страницы. В настоящее время при неудачной отправке или обновлении страницы данные не сохраняются в сеансе.

Я довольно новичок в PHP, и большая часть этого кода не моя, так что будьте осторожны со мной.

Используемый код PHP Sumbit:

Software: PHPMailer - PHP email class                                    
Version: 5.0.2                                                          
Contact: via sourceforge.net support pages (also www.codeworxtech.com)  
Info: http://phpmailer.sourceforge.net                               
Support: http://sourceforge.net/projects/phpmailer/  

СЕССИЯ:

<?php

session_name("fancyform");
session_start();

$str='';
if($_SESSION['errStr'])
{
$str='<div class="error">'.$_SESSION['errStr'].'</div>';
unset($_SESSION['errStr']);
}

$success='';
if($_SESSION['sent'])
{
$success='<div class="message-sent"><p>Message was sent successfully. Thank you!  </p></div>';

$css='<style type="text/css">#contact-form{display:none;}</style>';

unset($_SESSION['sent']);
}
?>

FORM:

<form id="contact-form" name="contact-form" method="post" action="submit.php">
<p><input type="text" name="name" id="name" class="validate[required]"     placeholder="Enter your first and last name here" value="<?=$_SESSION['post']['name']?>" /></p>
<p><input type="text" name="email" id="email" class="validate[required,custom[email]]" placeholder="Enter your email address here" value="<?=$_SESSION['post']['email']?>" /></p>
<p><input type="text" name="phone" id="phone" placeholder="Enter your phone number here" value="<?=$_SESSION['post']['phone']?>" /></p>
<p>
<select name="subject" id="subject">
<option>What event service are you primarily interested in?</option>
<option>Event Creation</option>
<option>Project Management</option>
<option>Promotion</option>
</select>
</p>
<textarea name="message" id="message" class="validate[required]" placeholder="Please     include some details about your project or event..."><?=$_SESSION['post']['message']?>    </textarea>
<input type="submit" value="" />
</form>

Ответы [ 5 ]

1 голос
/ 10 ноября 2011

Вы выводите $_SESSION['post']['form_element'] в свой шаблон, но в приведенном выше PHP-коде нет упоминания об установке этих данных. Чтобы это работало, вам нужно было бы перебрать массив $ _POST и присвоить каждой паре ключей значение $ _SESSION ['post']

На этом этапе вы сможете получить доступ к ранее отправленным данным формы из сеанса, как вы уже кодировали выше.

добавьте это в ваш submit.php:

session_start();    
foreach ($_POST AS $key => $value) {
 $_SESSION['post'][$key] = $value;
} 

Это переместит все данные из $ _POST в $ _SESSION ['post'] для будущего использования в шаблоне, и должно быть всем, что вам нужно, чтобы он работал.

0 голосов
/ 10 ноября 2011

Либо вы не включили код для submit.php, либо, если вы это сделали, проблема ясна: вы никогда не устанавливаете значения сеанса. Для этого вы должны использовать

session_start();

// etc...

$_SESSION['post']['name']  = $_POST['name'];
$_SESSION['post']['email'] = $_POST['email'];
$_SESSION['post']['phone'] = $_POST['phone'];

// etc...

на submit.php, а затем страница формы (предположительно, другая страница?) Может затем проверить, установлены ли эти значения

.. value="<?php if (isset($_SESSION['post']['name'])) echo $_SESSION['post']['name']; ?>" ..
0 голосов
/ 10 ноября 2011

HTTP не имеет состояния, и данные, которые не отправлены, не останутся, если вы не используете подход на стороне клиента ( webstorage и т. Д.).

0 голосов
/ 10 ноября 2011

Вам нужно проанализировать переменные записи и добавить их в суперглобальный сеанс, прямо сейчас вы ссылаетесь на $ _SESSION ['post'] ['phone'], который не будет работать так, как вы ожидаете.

// Assuming same file, this is session section
if (array_key_exists('submit', $_REQUEST)) {

    if (array_key_exists('phone', $_REQUEST)) {
        $_SESSION['phone'] = $_REQUEST['phone'];
    }
}

// Form section
<?php $phone = (array_key_exists('phone', $_SESSION)) ? $_SESSION['phone'] : null;?>
<input type="text" name="phone" id="phone" placeholder="Enter your phone number here" value="<?php echo $phone ?>" />
0 голосов
/ 10 ноября 2011

Я могу ошибаться, но я думаю, что вам нужно получить опубликованные значения из формы, используя что-то вроде

if ($_POST['errStr']) {
     $_SESSION['errStr'] = $POST['errStr'];
} 

Если я прав, то вы пытаетесь получить доступ к переменным после отправки формы

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

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

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

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

Для этого, вероятно, потребуется использовать прослушиватели javascript, например, window.onclose (хотя, по-видимому, это не работает для safari или firefox 2), и в рамках этого ajax xmlhttprequest для отправки данных на ваш сервер.

Для неудачной отправки (т. Е. Захвата формы с неверными данными в?) Это почти тот же случай, что и для формы, с которой работала отправка. Просто перепроверьте данные на другой стороне, когда вы их обрабатываете.

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