2015-08-22 2 views
-1

можно сделать код более понятным. В этих данных корзины покупок, как вставить в базу данных, он работает хорошо, но ограниченный и огромный код, который может сократить? Я ставлю, что этот код будет более сложным 5 $ x ++, как сделать умный и короткий код делать больше функций.php form submit to sql while loop

$ina_1 = $_POST['item_name_1']; $iq_1 = $_POST['quantity_1']; $ipr_1 = $_POST['amount_1'];$qp_1= $iq_1*$ipr_1; 
$ina_2 = $_POST['item_name_2']; $iq_2 = $_POST['quantity_2']; $ipr_2 = $_POST['amount_2'];$qp_2= $iq_2*$ipr_2; 
$ina_3 = $_POST['item_name_3']; $iq_3 = $_POST['quantity_3']; $ipr_3 = $_POST['amount_3'];$qp_3= $iq_3*$ipr_3; 
$ina_4 = $_POST['item_name_4']; $iq_4 = $_POST['quantity_4']; $ipr_4 = $_POST['amount_4'];$qp_4= $iq_4*$ipr_4; 
$ina_5 = $_POST['item_name_5']; $iq_5 = $_POST['quantity_5']; $ipr_5 = $_POST['amount_5'];$qp_5= $iq_5*$ipr_5; 


$shipping = $_POST['shipping']; 
$tprice = $qp_1+$qp_2+$qp_3+$qp_4+$qp_5+$qp_6+$qp_7+$qp_8+$qp_9+$shipping; 
if(empty($idu)){ 
$guestid = rand(111111,999999); 
} 
$orderid = rand(111111,999999); 
preg_match_all('!\d+!', $ina_1, $matches); $look1= $matches[0]; $sl_1 = $look1[0]; 
preg_match_all('!\d+!', $ina_2, $matches); $look2= $matches[0]; $sl_2 = $look2[0]; 
preg_match_all('!\d+!', $ina_3, $matches); $look3= $matches[0]; $sl_3 = $look3[0]; 
preg_match_all('!\d+!', $ina_4, $matches); $look4= $matches[0]; $sl_4 = $look4[0]; 
preg_match_all('!\d+!', $ina_5, $matches); $look5= $matches[0]; $sl_5 = $look5[0]; 


mysql_query("INSERT INTO d_order 
      (`userid`,`orderid`,`sellerid`,`item`,`quantity`,`amount`,`total`,`tprice`,`date`,`status`) 
    VALUES ('$idu','$orderid','$sl_1','$ina_1','$iq_1','$ipr_1','$qp_1','$tprice','$now','0')") or die(mysql_error()); 
if(!empty($ina_2)){ 
mysql_query("INSERT INTO d_order 
      (`userid`,`orderid`,`sellerid`,`item`,`quantity`,`amount`,`total`,`tprice`,`date`,`status`) 
VALUES ('$idu','$orderid','$sl_2','$ina_2','$iq_2','$ipr_2','$qp_2','$tprice','$now','0')") or die(mysql_error()); 
} 
if(!empty($ina_3)){ 
mysql_query("INSERT INTO d_order 
      (`userid`,`orderid`,`sellerid`,`item`,`quantity`,`amount`,`total`,`tprice`,`date`,`status`) 
VALUES ('$idu','$orderid','$sl_3','$ina_3','$iq_3','$ipr_3','$qp_3','$tprice','$now','0')") or die(mysql_error()); 
} 
if(!empty($ina_4)){ 
mysql_query("INSERT INTO d_order 
      (`userid`,`orderid`,`sellerid`,`item`,`quantity`,`amount`,`total`,`tprice`,`date`,`status`) 
VALUES ('$idu','$orderid','$sl_4','$ina_4','$iq_4','$ipr_4','$qp_4','$tprice','$now','0')") or die(mysql_error()); 
} 
if(!empty($ina_5)){ 
mysql_query("INSERT INTO d_order 
      (`userid`,`orderid`,`sellerid`,`item`,`quantity`,`amount`,`total`,`tprice`,`date`,`status`) 
VALUES ('$idu','$orderid','$sl_5','$ina_5','$iq_5','$ipr_5','$qp_5','$tprice','$now','0')") or die(mysql_error()); 
} 
+0

все, что вам нужно знать, это максимально возможное количество элементов, а затем использовать переменную для цикла от 1 до x, например. вместо $ _POST ['item_name_5'] используйте $ _POST ['item_name _'. $ x] в цикле. Или, лучше, ваши значения представлены в виде массивов, которые вы можете пропустить. В стороне, вы рискуете дублировать идентификаторы заказов, генерируя их случайным образом - почему бы не использовать последовательность базы данных для отслеживания идентификаторов заказов? –

ответ

0

Полностью непроверенный, но я думаю, с некоторой настройкой, возможно, следующее может упростить вам вещи.

<?php 
    $max_number_products=5; 
    $shipping = $_POST['shipping']; 
    $cart = array(); 

    for($i=1; $i <= $max_number_products; $i++){ 
     $name=$_POST[ 'item_name_'.$i ]; 
     $qty=$_POST[ 'quantity_'.$i ]; 
     $amount=$_POST[ 'amount_'.$i ]; 
     $price = abs($qty * $amount); 

     $cart[]=array( 
      'name'  => $name, 
      'amount' => $amount, 
      'quantity' => $qty, 
      'price'  => $price 
     ); 
     $cart['total']+=$price; 
    } 
    $tprice = $cart['total'] + $shipping; 
    /* 
     what is $idu? where is it used? 
     Should it not be $guestid in the 
     sql query not $idu which MAY be empty! 
    */ 
    if(empty($idu)) $guestid = rand(111111, 999999); 
    $orderid = rand(111111, 999999); 

    foreach($cart as $key => $cartitem){ 
     preg_match_all('!\d+!', $cartitem['name'], $matches); 
     $look1 = $matches[0]; 
     $sl_1 = $look1[0]; 

     $sql="INSERT INTO `d_order` 
       (`userid`, `orderid`, `sellerid`, `item`, `quantity`, `amount`, `total`, `tprice`, `date`, `status`) VALUES 
       ('$idu', '$orderid', '$sl_1', '{$cartitem['name']}', '{$cartitem['quantity']}', '{$cartitem['amount']}', '{$cartitem['price']}', '$tprice', now(), '0')"; 

     echo '<pre>',$sql,'</pre>'; 
     /* 
     mysql_query($sql); 
     */ 
    } 
?> 
+0

, если вставка стала 6-й строкой, а 6-я пуста, следующая «продавец», 'item',' quantity', 'amount',' total' вы можете мне помочь и большое спасибо, у меня есть еще один вопрос с кодом, который я пришлю u – Henok

+0

Я не совсем уверен, что понимаю, что вы имеете в виду, но попробуйте изменить '$ max_number_products' до 6 ?? – RamRaider

+0

Посмотрите, что выход второй пуст. – Henok

-1

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

$curr_item = 0; // and $tot_item is the total number of items. 
while($curr_item<$tot_item) 
{ 
$itemlist['curr_item'.$curr_item] = $_POST['item_name_'.$curr_item]; 
$curr_item++; 
} 

И я думаю, что вы можете использовать ту же концепцию и для других условных операторов.

+0

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