Foros del Web » Programando para Internet » PHP »

insert dinámico

Estas en el tema de insert dinámico en el foro de PHP en Foros del Web. Tengo un problema para insertar dinámicamente los campos en una base de datos oracle. Tengo un formulario que se ajusta a un cierto numero de ...
  #1 (permalink)  
Antiguo 24/05/2006, 17:39
 
Fecha de Ingreso: mayo-2006
Mensajes: 13
Antigüedad: 17 años, 11 meses
Puntos: 0
Exclamación insert dinámico

Tengo un problema para insertar dinámicamente los campos en una base de datos oracle.


Tengo un formulario que se ajusta a un cierto numero de textbox indicados por el usuario los cuales son desplegados por el siguiente ciclo for:

for ($i=1;$i<=$cantidad;$i++){
echo '<tr>';
echo '<td><input name="partida'.$i.'" type="text" id="partida'.$i.'" size="10" value="'.$i.'"></td>';
echo '<td><input name="descripcion'.$i.'" type="text" id="descripcion'.$i.'" size="91" maxlength="500"></td>';
echo '<td><input name="cantidad'.$i.'" type="text" id="cantidad'.$i.'" size="10"></td>';
echo '<td><input name="unidad'.$i.'" type="text" id="unidad'.$i.'" size="15"></td>';
echo '</tr>';
}

al enviar los datos las variables de los campos de texto son recibidas por:

foreach($_POST as $nombre_campo => $valor){
$asignacion = "\$" . $nombre_campo . "='" . $valor . "';";
eval($asignacion);
echo ($asignacion);

}

Lo cual despliega:

$partida1='1';
$descripcion1='articulo1';
$cantidad1='641';
$unidad1='unidad1';
$partida2='2';
$descripcion2='articulo2';
$cantidad2='642';
$unidad2='unidad2';
$partida3='3';
$descripcion3='articulo3';
$cantidad3='643';
$unidad3='unidad3'

ahora la pregunta es como puedo realizar el insert dinamicamente ya que el numero de variables dependera de la cantidad de textbox's que tenga en el formulario de origen, soy realmente nuevo en PHP+ORACLE sobre solaris
  #2 (permalink)  
Antiguo 24/05/2006, 19:43
Avatar de turco_7  
Fecha de Ingreso: diciembre-2003
Ubicación: Córdoba, Argentina
Mensajes: 1.044
Antigüedad: 20 años, 4 meses
Puntos: 19
suponiendo que si el usuario indica el numero 1, y despues le genera un form donde carga solamente una partida ..

al hacer el submit tendras estos datos a procesar ...

$partida1='1';
$descripcion1='articulo1';
$cantidad1='641';
$unidad1='unidad1';

Si quisieras guardar estos datos en tu DB .. harias insert .. si ?

si el usuario ingreso 2 haras dos insert .. osea el problema aca no me parece que sea con PHP sino con la estructura que definiste en tu DB ..

Si definiste bien la estructura y tenes muy claro que vas a insertar tantos registros como valor del numero que haya ingresado el usuario entonces, el problema seria procesar los datos ..

ya que tenes $partida1 $partida2 $partidan etc ...

seria bueno que mandes en un campo oculto la cantidad de partidas que vas a procesar, asi sabras cuando deterner el bucle y cuando dejaras de insertar datos en la DB ... osea que despues del primer for pondras un

echo "<input type='hidden' name='cantidad' value='$cantidad'>";
cuando quieras insertar tus datos en la DB tenes la cantidad de veces que vas a hacer un insert ... me explico ?

saludos
__________________
Mi Blog http://turco7.blogspot.com
Usuario Linux : 404289
Mi última página: http://www.digitalservicecba.com.ar - Reparacion de camaras digitales!
  #3 (permalink)  
Antiguo 25/05/2006, 14:18
 
Fecha de Ingreso: mayo-2006
Mensajes: 13
Antigüedad: 17 años, 11 meses
Puntos: 0
la db

El numero de items está guardado en una variable $t_items

el for es precisamente lo que no he podido estructurar



for ($i=1;$i<=$t_items;$i++){

if (empty($descripcionX)){
unset($partidaX,$descripcionX,$cantidadX,$unidadX) ;
}
else{
inserta_detalle($dbh,$partidaX,$descripcionX,$cant idadX,$unidadX);
}
}

ahora pues mi pregunta es como hacer para ir variando el nombre de las variables a enviar para que tome los siguientes valores y no repita $t_items veces los mismos valores a insertar. o quiza este mal desde el planteamiento en la forma de recibir el post?

la funcion inserta detalle

function inserta_detalle($dbh1,$v2_1, $v2_2, $v2_3,$v2_4){
$sql= 'INSERT into BS_REQ_DET (CVE_REQ, NUM_PARTIDA, DESCRIPCION, CANTIDAD, UNIDAD)values(:val2_1, :val2_2, :val2_3,:val2_4)';
$stmt2= OCIParse($dbh1, $sql);
if (!$stmt) {
//print "Error de busqueda en la base de datos!!";
}
else {
oci_bind_by_name($stmt2, ':val2_1', $v2_1);
oci_bind_by_name($stmt2, ':val2_2', $v2_2);
oci_bind_by_name($stmt2, ':val2_3', $v2_3);
oci_bind_by_name($stmt2, ':val2_4', $v2_4);
// oci_bind_by_name($stmt2, ':val2_5', $v2_5);
// oci_bind_by_name($stmt2, ':val2_6', $v2_6);

OCIExecute($stmt2);
if($stmt2){
//echo 'insercion realizada';
}
}

}

por cierto gracias por contestar
  #4 (permalink)  
Antiguo 26/05/2006, 11:56
 
Fecha de Ingreso: mayo-2006
Mensajes: 13
Antigüedad: 17 años, 11 meses
Puntos: 0
Cita:
Iniciado por turco_7
suponiendo que si el usuario indica el numero 1, y despues le genera un form donde carga solamente una partida ..

al hacer el submit tendras estos datos a procesar ...

$partida1='1';
$descripcion1='articulo1';
$cantidad1='641';
$unidad1='unidad1';

Si quisieras guardar estos datos en tu DB .. harias insert .. si ?

si el usuario ingreso 2 haras dos insert .. osea el problema aca no me parece que sea con PHP sino con la estructura que definiste en tu DB ..

Si definiste bien la estructura y tenes muy claro que vas a insertar tantos registros como valor del numero que haya ingresado el usuario entonces, el problema seria procesar los datos ..

ya que tenes $partida1 $partida2 $partidan etc ...

seria bueno que mandes en un campo oculto la cantidad de partidas que vas a procesar, asi sabras cuando deterner el bucle y cuando dejaras de insertar datos en la DB ... osea que despues del primer for pondras un

echo "<input type='hidden' name='cantidad' value='$cantidad'>";
cuando quieras insertar tus datos en la DB tenes la cantidad de veces que vas a hacer un insert ... me explico ?

saludos

El numero de items está guardado en una variable $t_items

el for es precisamente lo que no he podido estructurar



for ($i=1;$i<=$t_items;$i++){

if (empty($descripcionX)){
unset($partidaX,$descripcionX,$cantidadX,$unidadX) ;
}
else{
inserta_detalle($dbh,$partidaX,$descripcionX,$cant idadX,$unidadX);
}
}

ahora pues mi pregunta es como hacer para ir variando el nombre de las variables a enviar para que tome los siguientes valores y no repita $t_items veces los mismos valores a insertar. o quiza este mal desde el planteamiento en la forma de recibir el post?

la funcion inserta detalle

function inserta_detalle($dbh1,$v2_1, $v2_2, $v2_3,$v2_4){
$sql= 'INSERT into BS_REQ_DET (CVE_REQ, NUM_PARTIDA, DESCRIPCION, CANTIDAD, UNIDAD)values(:val2_1, :val2_2, :val2_3,:val2_4)';
$stmt2= OCIParse($dbh1, $sql);
if (!$stmt) {
//print "Error de busqueda en la base de datos!!";
}
else {
oci_bind_by_name($stmt2, ':val2_1', $v2_1);
oci_bind_by_name($stmt2, ':val2_2', $v2_2);
oci_bind_by_name($stmt2, ':val2_3', $v2_3);
oci_bind_by_name($stmt2, ':val2_4', $v2_4);
// oci_bind_by_name($stmt2, ':val2_5', $v2_5);
// oci_bind_by_name($stmt2, ':val2_6', $v2_6);

OCIExecute($stmt2);
if($stmt2){
//echo 'insercion realizada';
}
}

}

por cierto gracias por contestar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:16.