Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Insertar Varios Registros con ForEach

Estas en el tema de Insertar Varios Registros con ForEach en el foro de PHP en Foros del Web. Hola ha todo como están tengo el siguiente codigo array @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original $nsp_data_pv = array ( 'nsp_programa_1' => $nsp_programa_1 ,   ...
  #1 (permalink)  
Antiguo 26/09/2015, 18:29
 
Fecha de Ingreso: abril-2015
Mensajes: 304
Antigüedad: 9 años
Puntos: 2
Insertar Varios Registros con ForEach

Hola ha todo como están tengo el siguiente codigo
array
Código PHP:
Ver original
  1. $nsp_data_pv = array('nsp_programa_1' => $nsp_programa_1 ,
  2.             'nsp_valor_venta_1' => $nsp_valor_venta_1,
  3.             'nsp_programa_2' => $nsp_programa_2,
  4.             'nsp_valor_venta_2' => $nsp_valor_venta_2);
  5. // esta es la función para la inserción en la bd
  6. registrar_seguimiento_pap($nsp_data,$nsp_data_pv);
aqui mi query para la inserción
Código PHP:
Ver original
  1. $seg_id_pap = mysql_insert_id();
  2.   $query_pap_servicio = "INSERT INTO seg_pap_servicio(seg_pap_id,jc_servicio_id,seg_pap_valor_venta) VALUES";
  3.   foreach ($nsp_data_pv as $value) {
  4.     $query_pap_servicio.= "('".$seg_id_pap."','".$value."','".$value."')";
  5.   }
  6. mysql_query($query_pap_servicio, $link) or die(mysql_error());
  7.   echo $query_pap_servicio
cuando la inserción me sale este error
Código MySQL:
Ver original
  1. You have an error in your SQL syntax;
  2. ('48','2500','2500')('48','15','15')('48','9000','9000')
estube viendo y en my $query_pap_servicio que esta dentro del foreach y hace varias inserciones y creo que por eso el error no se si estoy haciendo bien
  #2 (permalink)  
Antiguo 26/09/2015, 18:39
 
Fecha de Ingreso: septiembre-2008
Mensajes: 38
Antigüedad: 15 años, 7 meses
Puntos: 2
Entre los paréntesis de cada registro, va una coma para separarlos... De igual manera... Si los datos son de tipo numérico ... No deben de ir con comillas al insertarlo.
  #3 (permalink)  
Antiguo 28/09/2015, 08:18
 
Fecha de Ingreso: abril-2015
Mensajes: 304
Antigüedad: 9 años
Puntos: 2
Respuesta: Insertar Varios Registros con ForEach

Gracias por contestar ahora lo estoy haciendo así
Código PHP:
Ver original
  1. $seg_id_pap = mysql_insert_id();
  2.   $query_pap_servicio = "INSERT INTO seg_pap_servicio(seg_pap_id,jc_servicio_id,seg_pap_valor_venta) VALUES";
  3.   foreach ($nsp_data_pv as $value) {
  4.       $query_pap_servicio.= "($seg_id_pap,$value,$value)";
  5.     }
  6.   mysql_query($query_pap_servicio, $link) or die(mysql_error());
y el error es el mismo así
Código MySQL:
Ver original
  1. YOu have an error in your SQL syntax;
  2. syntax to user near '(53,25000,25000)(53,15,15)(53,6000,6000)
no se si estoy haciendo mal mi foreach
  #4 (permalink)  
Antiguo 28/09/2015, 09:38
 
Fecha de Ingreso: enero-2007
Mensajes: 285
Antigüedad: 17 años, 3 meses
Puntos: 21
Respuesta: Insertar Varios Registros con ForEach

la coma.. entre cada registro

Código:
 foreach ($nsp_data_pv as $value) {
      $query_pap_servicio.= "($seg_id_pap,$value,$value),";
    }
   $query_pap_servicio= trim( $query_pap_servicio, ',');

  mysql_query($query_pap_servicio, $link) or die(mysql_error());
igual ojo.. que segun las configuraciones de mysql.. te va a permitir cargar hasta determinado numero.. en mi caso por ejemplo es hasta 250. segun los permisos del usuario.
  #5 (permalink)  
Antiguo 28/09/2015, 10:13
 
Fecha de Ingreso: abril-2015
Mensajes: 304
Antigüedad: 9 años
Puntos: 2
Respuesta: Insertar Varios Registros con ForEach

Hola y gracias por responder pero me di cuenta de algo que creo estoy haciendo mal cuando hace el query lo envía asi
Código MySQL:
Ver original
  1. '(53,25000,25000)(53,15,15)(53,6000,6000)'
  2. //Pues creo que lo hace mal porque no separo los datos de mi array es decir la inserción es asi
  3. INSERT INTO seg_pap_servicio(seg_pap_id,jc_servicio_id,seg_pap_valor_venta) VALUES (60,60,2500) // eso seria para un registro pero como es mas de un registro por el mismo id se debeira insertar asi
  4. (60,15,2500)
  5. (60,18,4500)
porque es asi como esta enviando mi array
Código PHP:
Ver original
  1. $nsp_data_pv = array('nsp_programa_1' => $_POST['nsp_programa_1'],
  2.                     'nsp_valor_venta_1' => $_POST['nsp_valor_venta_1'],
  3.                     'nsp_programa_2' => $_POST['nsp_programa_2'],
  4.                     'nsp_valor_venta_2' => $_POST['nsp_valor_venta_2'])
y en mi foreach no estoy separando nsp_programa_1 con nsp_valor_venta_1 y el otro seria nsp_programa_2 con nsp_valor_venta_2 el foreach
Código PHP:
Ver original
  1. $seg_id_pap = mysql_insert_id();
  2.   $query_pap_servicio = "INSERT INTO seg_pap_servicio(seg_pap_id,jc_servicio_id,seg_pap_valor_venta) VALUES";
  3.   foreach ($nsp_data_pv as $value) {
  4.       $query_pap_servicio .="($seg_id_pap,$value,$value),";
  5.       echo $query_pap_servicio;
  6.     }
  7.     $query_pap_servicio= trim( $query_pap_servicio, ',');
  8.   mysql_query($query_pap_servicio, $link) or die(mysql_error());
haaaaa no se que debo hace hai llevo varios días con este problema
  #6 (permalink)  
Antiguo 28/09/2015, 15:25
 
Fecha de Ingreso: marzo-2015
Mensajes: 183
Antigüedad: 9 años, 1 mes
Puntos: 8
Respuesta: Insertar Varios Registros con ForEach

Cita:
Iniciado por BlackJccl1 Ver Mensaje
Hola y gracias por responder pero me di cuenta de algo que creo estoy haciendo mal cuando hace el query lo envía asi
Código MySQL:
Ver original
  1. '(53,25000,25000)(53,15,15)(53,6000,6000)'
  2. //Pues creo que lo hace mal porque no separo los datos de mi array es decir la inserción es asi
  3. INSERT INTO seg_pap_servicio(seg_pap_id,jc_servicio_id,seg_pap_valor_venta) VALUES (60,60,2500) // eso seria para un registro pero como es mas de un registro por el mismo id se debeira insertar asi
  4. (60,15,2500)
  5. (60,18,4500)
porque es asi como esta enviando mi array
Código PHP:
Ver original
  1. $nsp_data_pv = array('nsp_programa_1' => $_POST['nsp_programa_1'],
  2.                     'nsp_valor_venta_1' => $_POST['nsp_valor_venta_1'],
  3.                     'nsp_programa_2' => $_POST['nsp_programa_2'],
  4.                     'nsp_valor_venta_2' => $_POST['nsp_valor_venta_2'])
y en mi foreach no estoy separando nsp_programa_1 con nsp_valor_venta_1 y el otro seria nsp_programa_2 con nsp_valor_venta_2 el foreach
Código PHP:
Ver original
  1. $seg_id_pap = mysql_insert_id();
  2.   $query_pap_servicio = "INSERT INTO seg_pap_servicio(seg_pap_id,jc_servicio_id,seg_pap_valor_venta) VALUES";
  3.   foreach ($nsp_data_pv as $value) {
  4.       $query_pap_servicio .="($seg_id_pap,$value,$value),";
  5.       echo $query_pap_servicio;
  6.     }
  7.     $query_pap_servicio= trim( $query_pap_servicio, ',');
  8.   mysql_query($query_pap_servicio, $link) or die(mysql_error());
haaaaa no se que debo hace hai llevo varios días con este problema
En tu caso la manera más fácil es quitar la última , que te genera al concatenar cada registro.
Así.
Código PHP:
Ver original
  1. foreach ($nsp_data_pv as $value) {
  2.       $query_pap_servicio .="($seg_id_pap,$value,$value),";
  3.       //echo $query_pap_servicio;
  4.     }
  5.     $query_pap_servicio= substr($query_pap_servicio,0,strlen($query_pap_servicio)-1);
  #7 (permalink)  
Antiguo 28/09/2015, 15:44
 
Fecha de Ingreso: abril-2015
Mensajes: 304
Antigüedad: 9 años
Puntos: 2
Respuesta: Insertar Varios Registros con ForEach

Hola y gracias por contestar probé tu código y obtuve este resultado
Código MySQL:
Ver original
  1. INSERT INTO seg_pap_servicio(seg_pap_id,jc_servicio_id,seg_pap_valor_venta)values(123,18,18),(123,45000,45000),(123,16,16),(123,6000,600)
  2. // me percate de que hace la insercion por cada valor de mi array
mi array
Código PHP:
Ver original
  1. $nsp_data_pv = array('nsp_programa_1' => $_POST['nsp_programa_1'], // por este una insercion
  2.                     'nsp_valor_venta_1' => $_POST['nsp_valor_venta_1'],  // por este otra insercion
  3.                     'nsp_programa_2' => $_POST['nsp_programa_2'], // por este otra insercion
  4.                     'nsp_valor_venta_2' => $_POST['nsp_valor_venta_2']) // por este otra insercion
y cuando debería ser asi
Código PHP:
Ver original
  1. INSERT INTO seg_pap_servicio(seg_pap_id,jc_servicio_id,seg_pap_valor_venta) VALUES (60,60,2500) // eso seria para un registro pero como es mas de un registro por el mismo id se debeira insertar asi
  2. (60,15,2500)
mmmmm no se si tengo que cambiar o estoy bien haciendo esto
  #8 (permalink)  
Antiguo 28/09/2015, 15:52
 
Fecha de Ingreso: marzo-2015
Mensajes: 183
Antigüedad: 9 años, 1 mes
Puntos: 8
Respuesta: Insertar Varios Registros con ForEach

Quieres que para cada insert esta cree un id distinto?.
De ser así sólo tienes que usar el valor null.
Código PHP:
Ver original
  1. foreach ($nsp_data_pv as $value) {
  2.     $query_pap_servicio.= "(NULL,'".$value."','".$value."')";
  3.   }
OJO: para ello tu campo en mysql tiene que ser tipo int y auto_increment
  #9 (permalink)  
Antiguo 28/09/2015, 15:58
 
Fecha de Ingreso: abril-2015
Mensajes: 304
Antigüedad: 9 años
Puntos: 2
Respuesta: Insertar Varios Registros con ForEach

No necesariamente pues mi tabla nace de una relación de muchos a muchos
primero hago un insert luego recupero el id de ese insert aqui
Código PHP:
Ver original
  1. $query_pap = "INSERT INTO seg_pap(jc_usuario_id,jc_empresa_id,jc_contacto_id,jc_actividad_id,seg_estatus_id,seg_referencia_id,seg_pap_fecha_requerimiento,seg_pap_fecha_ultimo_contac,seg_pap_fecha_proximo_contac,jc_unidad_negocio_id,seg_pap_observaciones) VALUES($cod_user_pap,$nsp_contactoempresa,$nsp_contacto,$nsp_actividad,$nsp_estatus,$nsp_referencia,'$nsp_fecharequerimiento','$nsp_fechaultimocontacto','$nsp_fechaproximocontacto',$nsp_unidadnegocio,'$nsp_observaciones')";
  2. @mysql_query($query_pap, $link) or die(mysql_error());
  3.   $seg_id_pap = mysql_insert_id();
  4. //y luego hago el siguiente insert
  5. $query_pap_servicio = "INSERT INTO seg_pap_servicio(seg_pap_id,jc_servicio_id,seg_pap_valor_venta) VALUES";
es por ello que mencione que se debe de hacer por cada id como mencione anteriormente claro que cada id tiene su servicio y el valor del servicio
  #10 (permalink)  
Antiguo 28/09/2015, 16:04
 
Fecha de Ingreso: marzo-2015
Mensajes: 183
Antigüedad: 9 años, 1 mes
Puntos: 8
Respuesta: Insertar Varios Registros con ForEach

Te parece si pones datos estáticos acá
Código PHP:
Ver original
  1. $nsp_data_pv = array('nsp_programa_1' => $_POST['nsp_programa_1'], // por este una insercion
  2.                         'nsp_valor_venta_1' => $_POST['nsp_valor_venta_1'],  // por este otra insercion
  3.                         'nsp_programa_2' => $_POST['nsp_programa_2'], // por este otra insercion
  4.                         'nsp_valor_venta_2' => $_POST['nsp_valor_venta_2']) // por este otra insercion
reemplaza los parámetros de tus $_POST[''] por datos estáticos y como deberían
verse esos inserts como resultado final.
  #11 (permalink)  
Antiguo 28/09/2015, 16:10
 
Fecha de Ingreso: abril-2015
Mensajes: 304
Antigüedad: 9 años
Puntos: 2
Respuesta: Insertar Varios Registros con ForEach

ok seria si por ejemplo
Código PHP:
Ver original
  1. $nsp_data_pv = array('nsp_programa_1' => $_POST['15'], // por este una inserción
  2.                         'nsp_valor_venta_1' => $_POST['25000'],  // por este otra inserción
  3.                         'nsp_programa_2' => $_POST['5'], // por este otra inserción
  4.                         'nsp_valor_venta_2' => $_POST['45000']) // por este otra inserción
bueno en ese caso seria por ejemplo asi
Código MySQL:
Ver original
  1. seg_id_pap = 65
  2. /// en mi tabla donde guardo esto datos esta así que es
  3. --- seg_pap_servicio ---
  4. seg_pap_id | jc_servicio_id | seg_pap_valor_venta
  5.     65              15                         25000
  6.     65               5                         45000
pues ese debería ser el resultado de la inserción
  #12 (permalink)  
Antiguo 28/09/2015, 16:27
 
Fecha de Ingreso: marzo-2015
Mensajes: 183
Antigüedad: 9 años, 1 mes
Puntos: 8
Respuesta: Insertar Varios Registros con ForEach

Tu problema ha sido que no estas definiendo bien el array bidimensional.
Podrías reemplazarlo por la siguiente manera, claro si no tendrías problemas.

Código PHP:
Ver original
  1. /*
  2.     //PRIMER METODO
  3.     $nsp_data_pv=array(array('nsp_programa' =>15,'nsp_valor_venta' => 25000),
  4.      array('nsp_programa' =>5,'nsp_valor_venta'=>45000));
  5.      */
  6.      //SEGUNDO METODO
  7.     $nsp_data_pv[]=array('nsp_programa' =>15,'nsp_valor_venta' =>25000);
  8.      $nsp_data_pv[]=array('nsp_programa' =>5,'nsp_valor_venta' =>45000);
  9.      
  10.      $seg_id_pap =65; //mysql_insert_id();
  11.      $query_pap_servicio = "INSERT INTO seg_pap_servicio(seg_pap_id,jc_servicio_id,seg_pap_valor_venta) VALUES";
  12.      for($ni=0;$ni<count($nsp_data_pv);$ni++){
  13.         //echo $nsp_data_pv[$ni]['nsp_programa'];
  14.         $query_pap_servicio.="(". $seg_id_pap.",".$nsp_data_pv[$ni]['nsp_programa'].",".$nsp_data_pv[$ni]['nsp_valor_venta']."),";
  15.      }
  16.      $query_pap_servicio=substr($query_pap_servicio,0,strlen($query_pap_servicio)-1);
  17.      echo $query_pap_servicio;
Con ello ya puedes obtener el resultado que dejaste en tu comentario anterior.
Sólo tendrías que volver a poner los $_POST[] como antes.
Saludos.
  #13 (permalink)  
Antiguo 28/09/2015, 16:45
 
Fecha de Ingreso: abril-2015
Mensajes: 304
Antigüedad: 9 años
Puntos: 2
Respuesta: Insertar Varios Registros con ForEach

oggy_15_3 Meastrooooooo sabia que con el foreach no era esa logica habia que cambiar muchas Graciassssssss
hasta me dan ganar de llorar estaba con varios dias con este problema esto fue una gran enseñansa
  #14 (permalink)  
Antiguo 28/09/2015, 16:48
 
Fecha de Ingreso: marzo-2015
Mensajes: 183
Antigüedad: 9 años, 1 mes
Puntos: 8
Respuesta: Insertar Varios Registros con ForEach

Cita:
Iniciado por BlackJccl1 Ver Mensaje
oggy_15_3 Meastrooooooo sabia que con el foreach no era esa logica habia que cambiar muchas Graciassssssss
hasta me dan ganar de llorar estaba con varios dias con este problema esto fue una gran enseñansa
jejeje. Para eso estamos. Suerte!
  #15 (permalink)  
Antiguo 28/09/2015, 16:52
 
Fecha de Ingreso: abril-2015
Mensajes: 304
Antigüedad: 9 años
Puntos: 2
Respuesta: Insertar Varios Registros con ForEach

Cita:
Iniciado por oggy_15_3 Ver Mensaje
jejeje. Para eso estamos. Suerte!
Pues si para eso son estos lugares en la web Nuevamente Gracias

Etiquetas: foreach, mysql, registros, sql
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:24.