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; }
// START SESSION
    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>";