Foros del Web » Programando para Internet » PHP »

verificar que varios arreglos estan llenos

Estas en el tema de verificar que varios arreglos estan llenos en el foro de PHP en Foros del Web. Hola: Espero y alguien me pueda ayudar con el siguiente problema, resulta que tengo que insertar varios arreglos a la base de datos pero antes ...
  #1 (permalink)  
Antiguo 11/05/2009, 18:00
 
Fecha de Ingreso: abril-2009
Ubicación: México
Mensajes: 114
Antigüedad: 15 años
Puntos: 0
Pregunta verificar que varios arreglos estan llenos

Hola:
Espero y alguien me pueda ayudar con el siguiente problema, resulta que tengo que insertar varios arreglos a la base de datos pero antes debo de comprobar que estos se encuentren con datos, estoy usando el siguiente codigo

Código PHP:
if(isset($_POST['Submit'])){
$strquery='insert into area (anio, adiminstracion, personal_servicios, atencion_clientes, distribucion, informatica, comercial, planeacion, comunicacion) values';
foreach(
$_POST as $key => $campos){
for(
$i=0;$i<count($campos);$i++){
if (!empty( 
$campos[$i])) {
    
$strquery.="('$anio', '".$_POST['adiminstracion'][$i]."','".$_POST['personal_servicios'][$i]."','".$_POST['atencion_clientes'][$i]."','".$_POST['distribucion'][$i]."','".$_POST['informatica'][$i]."','".$_POST['comercial'][$i]."','".$_POST['planeacion'][$i]."','".$_POST['comunicacion'][$i]."'),";
    }
}
$strquery=substr($strquery,0,(strlen($strquery)-1)).';';        mysql_query($strquery) or die(mysql_error());
        echo 
'Los datos han sido registrado de manera satisfactoria.<br />';
}
}
}

me inserta el primer arreglo pero cuando se recorre al segundo me marca un error que es el siguiente:

Los datos han sido registrado de manera satisfactoria.
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; at line 1
  #2 (permalink)  
Antiguo 11/05/2009, 19:27
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: verificar que varios arreglos estan llenos

El problema es que adentro del foreach asignas sobre tu primer Query y eso hace que tu consulta quede mal, prueba algo asi:
Código php:
Ver original
  1. if(isset($_POST['Submit'])){
  2. $query='insert into area (anio, adiminstracion, personal_servicios, atencion_clientes, distribucion, informatica, comercial, planeacion, comunicacion) values';
  3. foreach($_POST as $key => $campos){
  4. $strquery = '';
  5. for($i=0;$i<count($campos);$i++){
  6. if (!empty( $campos[$i])) {
  7.     $strquery.="('$anio', '".$_POST['adiminstracion'][$i]."','".$_POST['personal_servicios'][$i]."','".$_POST['atencion_clientes'][$i]."','".$_POST['distribucion'][$i]."','".$_POST['informatica'][$i]."','".$_POST['comercial'][$i]."','".$_POST['planeacion'][$i]."','".$_POST['comunicacion'][$i]."'),";
  8.     }
  9. }
  10. $strquery = $query . substr($strquery,0,(strlen($strquery)-1)).';';        mysql_query($strquery) or die(mysql_error());
  11.         echo 'Los datos han sido registrado de manera satisfactoria.<br />';
  12. }
  13. }
  14. }
  15. }

Saludos.
  #3 (permalink)  
Antiguo 11/05/2009, 19:30
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: verificar que varios arreglos estan llenos

El punto y coma normalmente no hace falta al usar mysql_query().

Por otro lado, haz un echo a la consulta y muéstranos cómo tienes, ahí será más fácil ver el error.

Saludos.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #4 (permalink)  
Antiguo 11/05/2009, 20:07
 
Fecha de Ingreso: abril-2009
Ubicación: México
Mensajes: 114
Antigüedad: 15 años
Puntos: 0
Respuesta: verificar que varios arreglos estan llenos

gracias por contestar pues hice lo que me recomedo GatorV y ahora no me inserto nada en la base de datos, le agregue el echo que me pidio David el Grande y esto es lo que me arroja

SELECT adiminstracion, personal_servicios, atencion_clientes, distribucion, informatica, comercial, medicion, planeacion, comunicacion FROM problematicas_area WHERE anio='2009' You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' at line 1

por que me sale? alguien me puede decir que estoy haciendo mal?
  #5 (permalink)  
Antiguo 11/05/2009, 20:25
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: verificar que varios arreglos estan llenos

De hecho el echo debería de ser de $strquery.

Saludos.
  #6 (permalink)  
Antiguo 11/05/2009, 21:11
 
Fecha de Ingreso: abril-2009
Ubicación: México
Mensajes: 114
Antigüedad: 15 años
Puntos: 0
Respuesta: verificar que varios arreglos estan llenos

ya los inserta pero repetidos me inserta todos mis arreglos pero en 10 ocaciones me inserta lo mismo por que me hace eso?
  #7 (permalink)  
Antiguo 11/05/2009, 21:12
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: verificar que varios arreglos estan llenos

Eso sucede la inserción la estás ejecutando dentro del bucle for.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #8 (permalink)  
Antiguo 11/05/2009, 21:19
 
Fecha de Ingreso: abril-2009
Ubicación: México
Mensajes: 114
Antigüedad: 15 años
Puntos: 0
Respuesta: verificar que varios arreglos estan llenos

y entonces lo saco?? o que le hago?
  #9 (permalink)  
Antiguo 11/05/2009, 21:22
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: verificar que varios arreglos estan llenos

Déjala fuera del foreach (al terminar el bucle)

Saludos.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #10 (permalink)  
Antiguo 11/05/2009, 21:31
 
Fecha de Ingreso: abril-2009
Ubicación: México
Mensajes: 114
Antigüedad: 15 años
Puntos: 0
Respuesta: verificar que varios arreglos estan llenos

mmm perdona pero no te entiendo muy bien, primero estoy haciendo el foreach y luego el for como puedo dejar fuera el foreach me podrias dar un ejemplo por favor...
  #11 (permalink)  
Antiguo 11/05/2009, 21:33
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: verificar que varios arreglos estan llenos

Así:
Código PHP:
Ver original
  1. foreach (...) {
  2.     for (;;) {
  3.         /* Código */
  4.     }
  5. }
  6. /* Aquí haces la consulta (mysql_query) */
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #12 (permalink)  
Antiguo 11/05/2009, 21:46
 
Fecha de Ingreso: abril-2009
Ubicación: México
Mensajes: 114
Antigüedad: 15 años
Puntos: 0
Respuesta: verificar que varios arreglos estan llenos

lo estoy haciendo de la forma en que me dices dejando fuera el foreach pero ahora solo me inserta un registro y todo lo demas no
  #13 (permalink)  
Antiguo 11/05/2009, 21:50
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: verificar que varios arreglos estan llenos

Muestra el código como lo tienes ahora. Además, cuéntanos cómo está estructurado el formulario y qué es lo que hay que insertar en la base de datos. Así podremos ayudarte mejor.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #14 (permalink)  
Antiguo 11/05/2009, 21:58
 
Fecha de Ingreso: abril-2009
Ubicación: México
Mensajes: 114
Antigüedad: 15 años
Puntos: 0
Respuesta: verificar que varios arreglos estan llenos

pues el codigo que tengo es el siguienten:

Cita:
if(isset($_POST['Submit'])){
$query='insert into area (anio, adiminstracion, personal_servicios, atencion_clientes, distribucion, informatica, comercial, medicion, planeacion, comunicacion) values';
foreach($_POST as $key => $campos){
$strquery = '';
for($i=0;$i<count($campos);$i++){
if (!empty( $campos[$i])) {
$strquery.="('$rpe', '$anio', '".$_POST['adiminstracion'][$i]."','".$_POST['personal_servicios'][$i]."','".$_POST['atencion_clientes'][$i]."','".$_POST['distribucion'][$i]."','".$_POST['informatica'][$i]."','".$_POST['comercial'][$i]."','".$_POST['medicion'][$i]."','".$_POST['planeacion'][$i]."','".$_POST['comunicacion'][$i]."'),";
}
}
$strquery=$query .substr($strquery,0,(strlen($strquery)-1)).';';
echo $strquery;
}
}
mysql_query($strquery) or die(mysql_error());
echo 'Los registros han sido insertados de manera satisfactoria.<br />';
}
}
El formulario cuenta con 9 arreglos que debo insertar a la base de datos sin embargo ahora solo me inserta un registro con un solo elemento de cada arreglo.

Estos arreglos quiero verificar que se inserte unicamente si tienen datos, pues si estan vacios no tiene caso
  #15 (permalink)  
Antiguo 11/05/2009, 22:04
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: verificar que varios arreglos estan llenos

Lo que aún no entendí es, ¿para qué exactamente sirve ese foreach? Creo que para lo que quieres el bucle for ya es suficiente, y puedes colocar la llamada a mysql_query directamente dentro del bucle for.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #16 (permalink)  
Antiguo 11/05/2009, 22:13
 
Fecha de Ingreso: abril-2009
Ubicación: México
Mensajes: 114
Antigüedad: 15 años
Puntos: 0
Respuesta: verificar que varios arreglos estan llenos

no me sirve unicamente le bucle for por que si no pongo el foreach solo me inserta la misma cantidad de registros del primer arreglo es decir si en el primer arreglo solo llene una caja de texto y en el segundo 4 en la base de datos solo me inserta un registro completo no toma encuenta los demas del segundo arreglo.

Espero haberme dado a entender :)
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 16:13.