2012-02-29 2 views
0

사용자는 30 개 항목을 구매하려고합니다. for 루프를 만드는 것보다 다른 방법이 있습니까?여러 요청을하는 방법

어떻게이 컨트롤러 내 로컬 컴퓨터에서 아약스 요청, 모든 좋아요,하지만 호스팅에서의 오류를 제공 (30 개) 삽입

public function buy($item_id) 
{ 
    $price = $this->input->post('price'); 
    $amount = $this->input->post('amount'); 
    $sum = $this->input->post('sum'); 
    $price = intval($price); 
    $amount = intval($amount); 
    $sum = intval($sum); 

    if(!is_numeric($price) || !is_numeric($amount) || !is_numeric($sum)) 
    { 
     exit("Неверные значения"); 
     return false; 
    } 

    if(!empty($_SESSION['id'])) 
    { 
     $user_id = $_SESSION['id']; 
    } 
    else 
    { 
     echo 'not logged'; 
     exit(); 
    } 
    $q = $this->db->query("SELECT * FROM users WHERE id = ".$user_id); 
    $t = $this->db->query("SELECT * FROM items WHERE id = ".$item_id." AND 
    TO_DAYS(end) - TO_DAYS(now()) >= 0"); 
    if($this->db->affected_rows() != 0) 
    { 
     $user = $q->result_array(); 
     $item = $t->result_array(); 
     $active = $user[0]['active']; 
     $user_id = $user[0]['id']; 
     $money = $user[0]['money']; 
     $price = $item[0]['price']; 
     $bought_times = $item[0]['bought_times']; 
     $coupons = $item[0]['coupons']; 
     $discount = $item[0]['discount']; 
     $short_desc = $item[0]['short_desc']; 
     $status = ""; 

     //echo $coupons; 
     //exit(); 
     for($i = 0; $i < $amount; $i++) 
     { 
      if($coupons <= 0 || ($amount > $coupons)) 
      { 
       $status = 'out of coupons'; 
       break; 

      } 
      if($money >= $price) 
      { 
       $money = $money - $price; 
       $this->db->query("INSERT INTO user_items (`discount`, `short_desc`, `user_id`) 
       VALUES(".$discount.", '".$short_desc."', ".$user_id.")"); 
       $this->db->query("UPDATE users SET money = ".$money." WHERE id = ".$user_id); 
       $coupons -= 1; 
       $this->db->query("UPDATE items SET coupons = ".$coupons." WHERE id = ".$item_id); 
       $q = $this->db->query("SELECT * FROM users WHERE id = ".$user_id); 
       $user = $q->result_array(); 
       $money = $user[0]['money']; 
       $_SESSION['money'] = $money; 
       $status = 'buy successfull'; 
       //redirect(''); 
      } 
      else 
      { 
       // 
       $status = 'not enough money'; 
       break; 

      } 

     } 
     switch($status) 
     { 
      case 'out of coupons': 
      echo 'out of coupons'; 
      break; 

      case 'buy successfull': 
      $bought_times += 1; 
      $this->db->query("UPDATE items SET bought_times = ".$bought_times." WHERE id = ".$item_id); 
      echo 'buy successfull'; 
      break; 

      case 'not enough money': 
      echo 'not enough money'; 
      break; 
     } 
     /*foreach($q->result_array() as $u); 
     { 
      $_SESSION['id'] = $u[0]->id; 
      $_SESSION['email'] = $u[0]->email; 
      redirect(''); 

     }*/ 
     //return 'trolol'; 
    } 
    else 
    { 
     echo 'out of time'; 
    } 
    //echo $user_id; 
} 

을 만들 수 있습니다.

내가

당신이 나에게이 코드에 대한 조언을 줄 수있는 금액 돈을 빼고 쿠폰을 빼고 행이 사용자의 따라 삽입해야

?

+0

다른 말로하면, 나는이 코드를 어떻게 최적화 할 수 있을까?, 나는 아이템을 올바르게 삽입하는 루프를 만드는 법을 모릅니다. –

+0

codeigniter 카트 클래스를 사용하지 않는 이유는 무엇입니까? –

답변

1

는 하나의 타격 쿼리는 같은 쿼리 뭔가가 발생할 수 있습니다 루프를 사용하여 연결을 시도 가진 쿼리가 더 동적으로 만들 : 단 하나 개의 쿼리를 던져 당신은 수있을 것입니다 이런 식으로

INSERT INTO my_table(column1, column2, column3) VALUES ('VAL1','VAL2', 'VAL3'), ('VAL1','VAL2', 'VAL3'), ('VAL1','VAL2', 'VAL3'), ('VAL1','VAL2', 'VAL3') ... 

을하지만, 테이블에 여러 항목을 삽입하면 각 값 집합을 쉼표 (,)로 구분할 수 있습니다.

+0

하지만 루프에서 어떻게 만들 수 있습니까? 그 쉼표 사이에 루프를 넣을 수 있습니까? 금액이 –

+1

인 경우 "하지만 루프에서 어떻게 만들 수 있습니까?" => foreach 루프를 사용하여 SQL 쿼리의 값 부분을 연결하십시오. – Rooneyl

+0

감사합니다. –

관련 문제