PHP « Обновление страницы после отправки формы
После отправки заказа функция empty_cart() очищает кеш, но товары остаются в корзине и пропадают только после нажатия f5. Пробовал header('Location: /cart/cart.php'); в самом начале страницы, но форма отказалась отправляться. Как его использовать?
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .php.geshi_code {font-family:monospace;} .php.geshi_code .imp {font-weight: bold; color: red;} .php.geshi_code .kw1 {color: #b1b100;} .php.geshi_code .kw2 {color: #000000; font-weight: bold;} .php.geshi_code .kw3 {color: #990000;} .php.geshi_code .co1 {color: #666666; font-style: italic;} .php.geshi_code .co2 {color: #666666; font-style: italic;} .php.geshi_code .co3 {color: #0000cc; font-style: italic;} .php.geshi_code .co4 {color: #009933; font-style: italic;} .php.geshi_code .coMULTI {color: #666666; font-style: italic;} .php.geshi_code .es0 {color: #000099; font-weight: bold;} .php.geshi_code .es1 {color: #000099; font-weight: bold;} .php.geshi_code .es2 {color: #660099; font-weight: bold;} .php.geshi_code .es3 {color: #660099; font-weight: bold;} .php.geshi_code .es4 {color: #006699; font-weight: bold;} .php.geshi_code .es5 {color: #006699; font-weight: bold; font-style: italic;} .php.geshi_code .es6 {color: #009933; font-weight: bold;} .php.geshi_code .es_h {color: #000099; font-weight: bold;} .php.geshi_code .br0 {color: #009900;} .php.geshi_code .sy0 {color: #339933;} .php.geshi_code .sy1 {color: #000000; font-weight: bold;} .php.geshi_code .st0 {color: #0000ff;} .php.geshi_code .st_h {color: #0000ff;} .php.geshi_code .nu0 {color: #cc66cc;} .php.geshi_code .nu8 {color: #208080;} .php.geshi_code .nu12 {color: #208080;} .php.geshi_code .nu19 {color:#800080;} .php.geshi_code .me1 {color: #004000;} .php.geshi_code .me2 {color: #004000;} .php.geshi_code .re0 {color: #000088;} .php.geshi_code span.xtra { display:block; }
session_start();
// INITIALIZE JCART AFTER SESSION START
$cart =& $_SESSION['jcart']; if(!is_object($cart)) $cart = new jcart();
error_reporting(0);
$errors = array();
if (@$_POST['submit']) {
$name = preg_replace ('/s+/', ' ', $_POST['name']) ;
$name = trim($name) ;
if(!@$_POST['name'] || count(explode(' ', $name)) <3) {
$errors['name'] = "Заполните ФИО полностью";
}
if (!@$_POST['phone']) {
$errors['phone'] = "Введите телефон";
}
if (!$cart->get_contents()) {
$errors['order'] = "Заказ пуст";
}
}
if (!empty($errors) || @!$_POST['submit']) {
if(empty($errors)){
echo '';
}else{
foreach ($errors as $key => $value) { echo "<div class='errormessage'>$value</div>";}
}
echo '<br /><form action="cart.php" method="post">';
echo '<table><tr><td '.(($errors['name'])?'style="color:red"':'').'">ФИО</td><td><input type="text"name="name" size="40"value="' . @$_POST['name'] . '"class="formfields" /></td></tr>';
echo' <tr><td '.(($errors['adress'])?'style="color:red"':'').'>Адрес</td><td><input type="text" name="adress"size="40" value="'.@$_POST['adress'] . '"class="formfields abroad "/></td></tr>';
echo' <tr>
<td '.(($errors['index'])?'style="color:red"':'').'>Индекс</td><td><input type="text" name="index"size="10" value="'.@$_POST['index'] . '"class="formfields abroad"/>
</td></tr>';
echo' <tr>
<td '.(($errors['phone'])?'style="color:red"':'').'>Телефон</td><td><input type="text" name="phone"size="30" value="'.@$_POST['phone'] . '"class="formfields "/></td></tr>';
echo' <tr>
<td '.(($errors['email'])?'style="color:red"':'').'>E-mail</td><td><input type="text" name="email"size="30" value="' . @$_POST['email'].'"class="formfields abroad"/>
</td></tr></table>';
echo '<div><input type="submit" value="Отправить заказ" name="submit" class="sendbtn"/></div></form>';
} else {
$valid_prices = true;
// IF THE SUBMITTED PRICES ARE NOT VALID
if ($valid_prices !== true)
{
// KILL THE SCRIPT
die($jcart['text']['checkout_error']);
}
// PRICE VALIDATION IS COMPLETE
// SEND CART CONTENTS TO PAYPAL USING THEIR UPLOAD METHOD, FOR DETAILS SEE http://tinyurl.com/djoyoa
else if ($valid_prices === true)
{
// Here we will construct a new email message to be sent to the merchant
$message .= "ФИО: " . $_POST['name'];
$message .= "nТелефон: " . $_POST['phone'];
$message .= "nEmail: " . $_POST['email'];
$message .= "nАдрес: " . $_POST['adress'];
$message .= "nИндекс: " . $_POST['index'];
$message .= "nn";
foreach ($cart->get_contents() as $item)
{
$message .= 'Заказ: ' . $item['name'];
$message .= "nЦена: " . $item['price'];
$message .= "nКоличество: " . $item['qty'];
$message .= "nn";
}
$mailSent = mail('email@email.com', 'Заказ', $message);
echo '<span class="sendmsg">Спасибо, Ваш заказ принят. Ждите нашего письма.</span>';
// EMPTY THE CART
$cart->empty_cart();
}}
1 ответов
Если на аяксе, то в success отлайвливайте ответ сервера и делайте перезагрузку на js. Получится что-то вроде такого: http://dumpz.org/672663/Причём сообщение можно формировать на сервере, таким образом его формирование станет более простым и динамичным, т.к. если произошла какая-то ошибка, то обработать это всё корректно и попросить попробовать ещё раз.
Сделал редирект в аяксе и перенаправление на другую страницу с сообщением об отправке заказа через хеадер. Все советы помогли, спасибо.
Редирект срабатывает перед валидацией формы. Пробовал вот так, но не работает if (isset($_POST['name']) and isset($_POST['submit'])) header ('Location: /cart/success.php');
Сделал вот-так
echo "<script>
setTimeout(function(){
window.location.href = '/cart/cart.php';}, 1000);
</script>";