2010-10-03 36 views
8

Tôi mới làm quen với Codeigniter. Tôi có một hình thức trông giống như thế này.Codeigniter Chèn nhiều hàng trong SQL

<tr> 
<td><input type="text" name="Name[0]" value=""></td> 
<td><input type="text" name="Address[0]" value=""><br></td> 
<td><input type="text" name="Age[0]" value=""></td> 
<td><input type="text" name="Email[0]" value=""></td> 
</tr> 



<tr> 
<td><input type="text" name="Name[1]" value=""></td> 
<td><input type="text" name="Address[1]" value=""><br></td> 
<td><input type="text" name="Age[1]" value=""></td> 
<td><input type="text" name="Email[1]" value=""></td> 
</tr> 

Có thể có từ 0 đến n hàng, thường từ 5 đến 10 dòng. Làm cách nào để chèn chúng vào SQL? Điều này có thể với Codeigniter hay tôi nên sử dụng một tập lệnh PHP gốc?


$name=$_POST['Name']; 
$address=$_POST['Address']; 
$age=$_POST['Age']; 
$email=$_POST['Email']; 
$count = count($_POST['Name']); 



for($i=0; $i<$count; $i++) { 
$data = array(
      'name' => $name[$i], 
      'address' => $address[$i], 
      'age' => $age[$i], 
      'email' => $email[$i], 

      ); 


    $this->db->insert('mytable', $data); 
} 

Tôi đã làm điều này. Nó hoạt động. Nhưng giải pháp có vẻ không phù hợp.

câu trả lời của kevtrout có vẻ tốt hơn nhưng hiện đang ném rất nhiều lỗi.

Có cách nào để chèn tất cả dữ liệu cùng một lúc không?

+0

Xem giải pháp của tôi http: //stackoverflow.com/a/14332078/1045444 ... Bạn đã chấp nhận giải pháp không hiệu quả nhất ... Chúng tôi nên sử dụng insert_batch(); –

+0

@SomnathMuluk Bạn đúng. Vui lòng xem câu hỏi được liên kết mà tôi đã hỏi sau này http://stackoverflow.com/questions/4166146/codeigniter-inserting-multidimensional-array-as-rows-in-mysql?lq=1 –

Trả lời

8

Hãy hình thức của bạn như thế này:

<tr> 
    <td><input type="text" name="user[0][name]" value=""></td> 
    <td><input type="text" name="user[0][address]" value=""><br></td> 
    <td><input type="text" name="user[0][age]" value=""></td> 
    <td><input type="text" name="user[0][email]" value=""></td> 
</tr> 
<tr> 
    <td><input type="text" name="user[1][name]" value=""></td> 
    <td><input type="text" name="user[1][address]" value=""><br></td> 
    <td><input type="text" name="user[1][age]" value=""></td> 
    <td><input type="text" name="user[1][email]" value=""></td> 
</tr> 

Sau đó, bạn chỉ đơn giản có thể làm:

foreach($_POST['user'] as $user) 
{ 
    $this->db->insert('mytable', $user); 
} 
+0

Khi phân tích kỹ hơn, nó rất giống với giải pháp của kevtrout, $ this-> có lẽ-> nhiều hơn-> thanh lịch(); Phải tìm hiểu thêm về mảng. –

+4

Hãy xem phương thức 'insert_batch()' [http://codeigniter.com/user_guide/database/active_record.html] – Shahid

2

Biểu mẫu bạn hiển thị sẽ tạo mảng $ _POST với chỉ mục tên, địa chỉ, tuổi và email. Mỗi trong số này sẽ chứa số n "hàng" mà biểu mẫu của bạn cung cấp. Ví dụ:

array(
    'name' => array('First Name','Second Name'), 
    'address' => array ('First Address','Second Address'), 
    'age' => array('First Age','Second Age'), 
    'email' => array('First Email', 'Second Email') 
    ); 

Bạn có thể muốn sắp xếp lại mảng đó thành một nơi mà mỗi chỉ mục của mảng là "người". Điều này sẽ làm cho việc chèn thông tin vào cơ sở dữ liệu của bạn đơn giản hơn.

//subtract 1 from below to account for the assumed submit button 
$number_of_rows = count($_POST)-1; 

for($i=0;$i<$number_of_rows;$i++){ 
    $person[]['name'] = $this->input->post('Name')[$i]; 
    $person[]['address'] = $this->input->post('Address')[$i]; 
    $person[]['age'] = $this->input->post('Age')[$i]; 
    $person[]['email'] = $this->input->post('Email')[$i]; 
    } 

này sẽ tạo ra một cái gì đó như thế này:

array(
    0=>array('First Name','First Address','First Age','First Email'), 
    1=>array ('Second Name','Second Address','Second Age','Second Email') 
    ); 

Bây giờ bạn có thể sử dụng một vòng lặp để chèn mỗi người vào db.

for($y=0;$y<count($person);$y++){ 
    $this->db->insert('mytable',$person[$y]; 
} 
+0

Hiện đang trả về lỗi, sẽ đăng cập nhật Sớm. –

+0

Lỗi nào đang được ném? Tôi đã sửa lỗi cú pháp bằng '$ this-> input-> post {'Name');' ở trên. – kevtrout

+0

Đã làm điều đó! Một phần của một cuộc gọi Ajax với hàm trả về phức tạp, đó là lý do tại sao phải thay thế một ví dụ đơn giản ở trên. Xem câu trả lời của tôi dưới đây. Dường như không phải là cách Codeigniter. –

23

Nhiều chèn/mẻ chèn hiện đang được hỗ trợ bởi CodeIgniter. Nó sẽ kích hoạt một truy vấn thay vì bắn quá nhiều truy vấn.

$data =array(); 
for($i=0; $i<$count; $i++) { 
$data[$i] = array(
      'name' => $name[$i], 
      'address' => $address[$i], 
      'age' => $age[$i], 
      'email' => $email[$i], 

      ); 
} 

$this->db->insert_batch('mytable', $data); 
+0

Giả định trình điều khiển này hỗ trợ nó. Nó không hoạt động với CodeIgniter 2.1.4 và trình điều khiển sqlsrv. –

Các vấn đề liên quan