update - extraer datos de mysql a formulario php
insertando varias filas en la base de datos en codeigniter (3)
Posible duplicado:
insertar múltiples filas a través de una matriz php en mysql
Estoy tratando de insertar solo datos completos en la base de datos. mi controlador
$code=$_POST[''code''];
$rate=$_POST[''rate''];
$quantity=$_POST[''quantity''];
//$total=$_POST[''rate'']*$_POST[''quantity''];
$count = count($_POST[''code'']);
for($i=0; $i<$count; $i++) {
$data = array(
''shop''=>$shop->$this->input->post(''shop''),
''code'' => $code[$i],
''rate'' => $rate[$i],
''quantity'' => $quantity[$i],
''total'' =>($rate[$i]*$quantity[$i])
);
$this->load->model(''buy_product_model'');
$this->buy_product_model->add_product($data);
tengo una lista desplegable para seleccionar la tienda y para esa tienda he creado 15 campos de entrada. los campos están en la parte superior. El problema es si solo lleno solo uno o dos valores, crea 15 filas en la base de datos y 15 reparan el tiempo el nombre de la tienda. ¿Alguien puede solucionar este problema?
Basado en esta parte de tu pregunta:
tengo una lista desplegable para seleccionar la tienda y para esa tienda he creado 15 campos de entrada. los campos están en la parte superior. El problema es si solo lleno solo uno o dos valores, crea 15 filas en la base de datos y 15 reparan el tiempo el nombre de la tienda. ¿Alguien puede solucionar este problema?
Parece ser un problema de diseño de la base de datos más que un error en su código. Si su tabla tiene una columna llamada Nombre de tienda y está insertando datos en ella, la repetirá quince veces.
Sugeriría dividir la tabla y vincularla a través de una unión entre ellos así:
Table Shops:
ID
Name
Table Products:
ID
shopID // This links to the first table on shopID=ID
... and so on for your *product* information
en lugar de manipular $ _POST en el controlador, manipúlelo en un modelo como este
Su controlador
$this->load->model(''buy_product_model'');
$this->buy_product_model->add_product($this->input->post());
EDITAR
Asegúrese de que los campos de formulario en formato html estén en forma de matriz como esta
<input type="text" name="code[]" />
Tu modelo
public function buy_product_model($postdata){
extract($postdata);
$count = count($code);
for($i=0; $i<$count; $i++) {
$data = array(
''shop''=>$shop,
''code'' => $code[$i],
''rate'' => $rate[$i],
''quantity'' => $quantity[$i],
''total'' =>($rate[$i]*$quantity[$i])
);
$this->db->insert(''[YOUR TABLE]'', $data);
}
}
ASEGÚRESE DE CAMBIAR [SU TABLA] CON LA SUYA
agregue el resto del código que tiene en el método add_product
de su modelo e itere a través de un bucle como lo hizo en su controlador.
Editar:
Compruebe la parte ''shop''=>$shop->$this->input->post(''shop'')
en su bucle
finalmente lo arreglo. ahí está mi vista
<?php for($i = 1; $i <=10; $i++):?>
<tr>
<td>
<?php echo $i;?>
</td>
<td>
<input type="text" name="code[]" value="<?php echo '''';?>" id="code" />
</td>
<td>
<input type="text" name="rate[]" value="<?php echo '''';?>" id="rate" />
</td>
<td>
<input type="text" name="quantity[]" value="<?php echo '''';?>" id="quantity" />
</td>
</tr>
<?php endfor;?>
aquí está mi controlador
if (empty($_POST))
{
$this->index();
}
else
{
//insert to database
$this->load->model(''buy_product_model'');
$data= $this->buy_product_model->add_product();
//echo "success";
$this->index();
}
modelo//
$data = array();
$todayDate = date(''Y-m-d'');
for($i = 0; $i < count($_POST[''code'']); $i++)
{
if($_POST[''code''][$i] != '''')
{
$data[] = array(
''code'' => $_POST[''code''][$i],
''shop'' => $_POST[''shop''],
''rate'' => $_POST[''rate''][$i],
''quantity'' => $_POST[''quantity''][$i],
''total'' =>( $_POST[''rate''][$i]*$_POST[''quantity''][$i]),
''date'' => $todayDate
);
}
}
$dataCount = count($data);
if($dataCount)
{
$this->db->insert_batch(''purchase'', $data);
}
return $dataCount;