Доброе время суток. При реализации формы заказа возникла следующая проблема: после того как юзер заполнил(или мы за него заполнили) поля формы заказа PHP: <?php session_start(); require_once('include_fns.php'); do_html_header('Окончательный расчет'); $user_details=get_user_det($_SESSION['valid_user']); $fio=$user_details['fio']; $gorod=$user_details['gorod']; $address=$user_details['address']; $tel=$user_details['tel']; ################################################################################ ################################################################################ $ship_fio=$_POST['ship_fio']; $ship_gorod=$_POST['ship_gorod']; $ship_address=$_POST['ship_address']; $ship_tel=$_POST['ship_tel']; $pozhelania=$_POST['pozhelania']; if(strlen($ship_fio)<1) { $ship_fio=$user_details['fio']; } if(!($ship_gorod)) { $ship_gorod=$gorod; } if(strlen($ship_address)<1) { $ship_address=$address; } if(!($ship_tel)) { $ship_tel=$tel; } if(!($pozhelania)) { $pozhelania='(NULL)'; } $userid=$_SESSION['valid_user']; var_dump($userid); $orderid=insert_order($userid,$ship_fio,$ship_gorod,$ship_address,$ship_tel); var_dump($orderid); do_html_footer(); код функции insert_order PHP: function insert_order($userid,$ship_fio,$ship_gorod,$ship_address,$ship_tel) { $conn=db_connect(); $date=date('Y-m-d H:i'); $order_status="Заказ принят"; $query1="insert into orders(`orderid`,`userid`,`amount`,`date`, `order_status`,`ship_fio`,`ship_gorod`,`ship_address`,`ship_tel`,`pozhelania`) values(NULL,'$userid',".$_SESSION['total_price'].",'$date', '$order_status','$ship_fio','$ship_gorod','$ship_address','$ship_tel','$pozhelania')"; $result=$conn->query($query1); if(!$result){ echo "!"; return false; } $query="select orderid from orders where userid='$userid' and date='$date' and order_status='$order_status' and ship_fio='$ship_fio' and ship_address='$ship_address'"; $result=$conn->query($query); if(!$result) { echo "Селект orderid не дал результата"; return false; } $num_order=$result->num_rows; if($num_order == 0) return false; $row=$result->fetch_object(); return $row->orderid; проблемка состоит в том, что когда пользователь в форме заказа нажимает оформить заказ http://s004.radikal.ru/i207/1102/ca/4bc412cd3091.jpg то функция insert_order заносит данные в бд и делает выборку orderid так вот если обновить страницу после того как пользователь нажмет на кнопку оформить заказ http://s40.radikal.ru/i090/1102/b0/fb87d99e6d95.jpg то тот же самый заказ занесеться в базу. Подскажите пожалуйста, как обезопасить себя(базу) и пользователя от таких вот покупок.
редирект на самое себя можно. можно обработчик вынести вобще в отдельный файл. это происходит потому что браузер при клике на "обновить" отсылает все по-новой для вашего же удобства
Народ мне очень не удобно что приходиться вас напрегать но чет либо голова не варит либо хз... снова тот же код PHP: <?php //header('Location:index.php'); session_start(); require_once('include_fns.php'); do_html_header('Окончательный расчет'); $user_details=get_user_det($_SESSION['valid_user']); $fio=$user_details['fio']; $gorod=$user_details['gorod']; $address=$user_details['address']; $tel=$user_details['tel']; ################################################################################ ################################################################################ $ship_fio=$_POST['ship_fio']; $ship_gorod=$_POST['ship_gorod']; $ship_address=$_POST['ship_address']; $ship_tel=$_POST['ship_tel']; $pozhelania=$_POST['pozhelania']; if(strlen($ship_fio)<1) { $ship_fio=$user_details['fio']; } if(!($ship_gorod)) { $ship_gorod=$gorod; } if(strlen($ship_address)<1) { $ship_address=$address; } if(!($ship_tel)) { $ship_tel=$tel; } if(!($pozhelania)) { $pozhelania='(NULL)'; } $userid=$_SESSION['valid_user']; var_dump($userid); $orderid=insert_order($userid,$ship_fio,$ship_gorod,$ship_address,$ship_tel); var_dump($orderid); insert_order_items($orderid); do_html_footer(); ?> проблема с insert_order_items PHP: <?php function insert_order_items($orderid) { $conn=db_connect(); foreach($_SESSION['cart'] as $artikul=>$qty) { $flow=get_flow_details($artikul); $query="insert into order_items(`orderid`,`artikul`,`item_price`,`quantity`) values('$orderid','$artikul',".$flow['price'].",'$qty')"; $result=$conn->query($query); if(!$result) echo 'нет результа'; return false; } return $result; } ?> проблема в том, что если покапать выбрал несколько товаров(с разными артикулами) то в таблицу order_items записываеться тот который был добавлен в корзину первый... var_dump($_SESSION['cart']; выдал такой результат array(2) { [1]=> string(1) "3" [2]=> string(1) "1" }
код исправлен: PHP: <?php function insert_order_items($orderid) { $conn=db_connect(); foreach($_SESSION['cart'] as $artikul=>$qty) { $flow=get_flow_details($artikul); $query="insert into order_items(`orderid`,`artikul`,`item_price`,`quantity`) values('$orderid','$artikul',".$flow['price'].",'$qty')"; $result=$conn->query($query); if(!$result){ echo 'нет результа'; return false; } } return $result; } ?> не были добписаны скобки после if(!$result)