Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] crear query desde un array

Estas en el tema de crear query desde un array en el foro de PHP en Foros del Web. ¿Como están foreros?, yo acá recurriendo a vuestra ayuda nuevamente... Tengo un problemaita con un formulario dinamico que tengo y es al recoger las variables ...
  #1 (permalink)  
Antiguo 27/04/2013, 13:19
 
Fecha de Ingreso: mayo-2012
Ubicación: shilito
Mensajes: 67
Antigüedad: 11 años, 11 meses
Puntos: 3
crear query desde un array

¿Como están foreros?, yo acá recurriendo a vuestra ayuda nuevamente...

Tengo un problemaita con un formulario dinamico que tengo y es al recoger las variables (que als envío en un arreglo), necesito que asas variables(que son 2), ingresarlas a una query para que se inserte en SQL.

¿Alguien alguna vez lo ha hecho?... si es con ejemplos mejor serie


salu2
  #2 (permalink)  
Antiguo 27/04/2013, 13:23
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: crear query desde un array

No se entiende nada de lo que dices, así que de ejemplos estamos cortos.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 27/04/2013, 13:35
 
Fecha de Ingreso: mayo-2012
Ubicación: shilito
Mensajes: 67
Antigüedad: 11 años, 11 meses
Puntos: 3
Respuesta: crear query desde un array

nada de nada wtf!!!...

haber en otras palabras...

¿tengo una variable de tipo array, cuyos valores necesito que sean insertados a una base de datos, y no como hacerlo?

que tal ahi?
  #4 (permalink)  
Antiguo 27/04/2013, 13:46
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: crear query desde un array

Primero, cálmate. Si alguien te pide que aclares, lo más probable es que no se entienda ni medio, o bien lo que dices es insuficiente para tratar de creanos un ejemplo teórico que sirva.

Veamos:
Mandas N valores en un array... y quieres meterlos en una base de datos.
- ¿Los valores componen diferentes instancias de la misma entidad?
- ¿Corresponden a los valores que tiene cada campo de una misma instancia?
- ¿En ese caso los valores siguen el mismo orden de aparicion de las columnas de la tabla?

En el primer caso, debes hacer un ciclo de inserciones, donde cada subídice será un INSERT distinto.
En el segundo caso deberás hacer una sola sentencia INSERT, asignando cada valor a la columna en el orden correspondiente.El tercero es una extensión del segundo.

En cualquiera de los casos, no se entiende tu duda. No existe diferencia técnica en enviar a crear el INSERT con un grupo de variables diferenciadas, que hacerlo con un array. La escasa diferencia parecería ser el modo de acceder a los valores al momento de crear el SQL.
Como sea, parece algo que debe aparecer hasta en los manuales de PHP...

¿Qué es lo que no te parece claro acerca de cómo lograrlo?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 27/04/2013, 14:20
 
Fecha de Ingreso: mayo-2012
Ubicación: shilito
Mensajes: 67
Antigüedad: 11 años, 11 meses
Puntos: 3
Respuesta: crear query desde un array

gracias por la ayuda gnzsoloyo, y estoy de lo mas relax.... pense que se entenderia mejor mi duda.

voy a poner el código completo, para ver si se entiende un poco mas ya que mi duda es un poco mas compleja...

Aqui esta el fomulario en el cual envío las variables.

Código PHP:
Ver original
  1. <?php
  2. include("../../validacion/sesion_valida.php");
  3. include("tipo_hrd.php");
  4. include("modelos.php");
  5. include("marcas.php");
  6.  
  7. ?>
  8.  
  9. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  10. <html xmlns="http://www.w3.org/1999/xhtml">
  11. <head>
  12. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  13. <title>Sistema Control Inventario (SCI)</title>
  14.  
  15. <link href="../estilos/default.css" rel="stylesheet" type="text/css" />
  16.  
  17. <script type="text/javascript" src="../../js/jquery-1.8.3.js"> </script>
  18. <script type="text/javascript" src="jquery.addfield.js"></script>
  19.  
  20. </head>
  21.  
  22. <body>
  23. <div id="contenedor-principal">
  24.  
  25. <h1 class="titulo-mostrar">Plataforma Control del Inventario</h1>
  26.  
  27. <h3 class="caja-izquierda"><a href="../menu_hrd.php">Volver al Menu</a><span class="forma"></span></h3>
  28.  
  29. <form id="form" name="form" method="post" action="preview_asignacion.php">
  30.  
  31.     <div id="ingreso-user"><!--ingreso user-->
  32.     <hr />
  33.     <br />
  34.    
  35.     <h3 class="titulo">Datos del Usuario</h3>
  36.    
  37.         <table width="191" class="tabla">
  38.         <p>
  39.         <tr> <th>Rut Usuario</th> <td><label for="rut"></label><input name="rut" required="required" autocomplete="off" type="text" id="rut" size="12" /></td>
  40.         </tr>
  41.         </p>
  42.       </table>
  43.    
  44.     </div>
  45.     <hr />
  46.    
  47. <div id="stylized" class="myform" style="margin:20px auto;">
  48.  
  49. <!--<div id="material_comprado"  > </div>  -->
  50.  
  51.     <h3 class="titulo">Asignar Hardware a Usuario</h3>
  52.     <br />
  53.    
  54.     <div id="div_1"><!--inicio Div repetitivo  -->
  55.        
  56.        
  57.  
  58.            
  59.             <label for="tipos"></label>
  60.             <label> Serie:</label>
  61.             <input type="text" required="required" autocomplete="off" name="series[]" id="series" style="width:100px;" />
  62.            
  63.            
  64.             <!--<label>Rotulo:</label>
  65.             <input type="text" required="required"  name="rotulo[]" autocomplete="off" id="rotulos" style="width:100px;"/>-->
  66.            
  67.             <label>Ticket:</label>
  68.             <input type="text" name="ticket[]" id="ticket" autocomplete="off" style="width:100px;" />
  69.    
  70.             <input class="bt_plus" id="1" type="button" value="+" /><div class="error_form"></div>
  71.        
  72.    
  73.     </div><!--Fin Div repetitivo  -->
  74.  
  75.  
  76.  
  77.  
  78. <!--<button type="submit" class="boton">Save</button>-->
  79. <br />
  80. <br />
  81. <hr />
  82. <div class="retiro-equipo">
  83.  
  84.   <h3 class="titulo">Ingrese los datos del Equipamiento Retirado<span class=""></span></h3>
  85.   <br />
  86.  
  87.   <div id="div_2">
  88.     <!--inicio Div repetitivo  -->
  89.     <label for="tipos2"></label>
  90.     <select name="retiro_tipos[]" id="tipos2">
  91.    
  92.     <option value="Sin Valor">Selecione el Tipo</option>
  93.      <?PHP while($muestro_tipo=mssql_fetch_array($tipos)){
  94.      echo "<option value='".$muestro_tipo['0']."'>".$muestro_tipo['0']."</option>";
  95.      } ?>
  96.     </select>
  97.      
  98.  
  99.     <label>Serie:</label>
  100.     <input type="text" name="retiro_series" id="series2" style="width:100px;" />
  101.    
  102.     <label>Rotulo:</label>
  103.     <input type="text" name="retiro_rotulos[]"  style="width:100px;" id="retiro_rotulos[]" />
  104.    
  105.     <select name="retiro_marcas[]" id="retiro_marcas[]">
  106.       <option value="Sin Valor">Selecione la Marca</option>
  107.      <?PHP while($muestro_marca=mssql_fetch_array($marcas)){
  108.      echo "<option value='".$muestro_marca['0']."'>".$muestro_marca['0']."</option>";
  109.      } ?>
  110.     </select>
  111.     <select name="retiro_modelos[]" id="retiro_modelos[]">
  112.       <option value="Sin Valor">Selecione el Modelo</option>
  113.       <?PHP while($muestro_modelo=mssql_fetch_array($modelos)){
  114.      echo "<option value='".$muestro_modelo['0']."'>".$muestro_modelo['0']."</option>";
  115.      } ?>
  116.     </select>
  117.     <label>Ticket:</label>
  118.     <input type="text" name="retiro_ticket[]" id="ticket2" style="width:100px;" />
  119.     <input class="bt_plus" id="12" type="button" value="+" />
  120.     <div class="error_form"></div>
  121.   </div>
  122.   <p>&nbsp;</p>
  123.  
  124. </div>
  125. <div class="spacer">
  126.   <p>&nbsp;    </p>
  127.   <p>
  128.     <input type="submit" name="submit" id="submit" value="Asignar Equipamiento" />
  129.   </p>
  130. </div>
  131. </form>
  132. </div>
  133.  
  134. </div><!--contenedor principal-->
  135.  
  136. </body>
  137. </html>

Este fomulario va repitiendo los campos (si necesitan el codigo JS lo agrego mas tarde para las personas que lo puedan necesitar)

Aquí va una vista previa, la cual estoy desarrollándola, para mostrar en INPUTS la información del equipo desde la base de datos. Es aquí donde estoy entrampado.

Código PHP:
Ver original
  1. <?php
  2.  
  3. include("../../validacion/sesion_valida.php");
  4. include("../../validacion/conexion.php");
  5. include("ya_asignado.php");
  6. include("estados.php");
  7. //recuperando las variables.
  8.  
  9. $rut=strtoupper(filter_input(INPUT_POST, 'rut',FILTER_SANITIZE_NUMBER_FLOAT));
  10.  
  11. //$serie=strtoupper(filter_input(INPUT_POST, 'series',FILTER_SANITIZE_URL));
  12. $serie = $_POST['series'];
  13.  
  14. $ticket1=strtoupper(filter_input(INPUT_POST, 'ticket',FILTER_SANITIZE_STRING));
  15.  
  16. if(strlen($rut)<10)
  17.     {
  18.         $dv=substr($rut,-1,1);
  19.         $rut=substr($rut,0,7);
  20.     }else{
  21.         $dv=substr($rut,-1,1);
  22.         $rut=substr($rut,0,8);
  23.         }
  24.  
  25. $cantidad_serie = count ($serie); //cuento las variables en un arreglo
  26. $indice=0;
  27.  
  28.  
  29. /* aqui es donde me encuentro ya que necesito colocar el valor de la posicion '0' en la cual va el dato de la serie del equipo y consultarla a la base de datos.
  30. */
  31.  
  32.  
  33. $ya_asignado1=mssql_query("select [SCI].[dbo].[asignacion].[serie],[SCI].[dbo].[asignacion][rut],[SCI].[dbo].[asignacion][abm] from [SCI].[dbo].[asignacion] where serie='".$serie."' order by abm desc",$conexion);
  #6 (permalink)  
Antiguo 27/04/2013, 14:20
 
Fecha de Ingreso: abril-2010
Ubicación: Saltillo Mexico
Mensajes: 83
Antigüedad: 14 años
Puntos: 4
Respuesta: crear query desde un array

si pones un ejemplo de tu array, sería mas fácil ayudar.
  #7 (permalink)  
Antiguo 27/04/2013, 16:49
 
Fecha de Ingreso: mayo-2012
Ubicación: shilito
Mensajes: 67
Antigüedad: 11 años, 11 meses
Puntos: 3
Respuesta: crear query desde un array

OK, asi viaja el array,

Array
(
[0] => a12345678
[1] => b12345678
[2] => c12345678
)
  #8 (permalink)  
Antiguo 27/04/2013, 16:59
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: crear query desde un array

Por lo que dice este segmento de código:
Código PHP:
Ver original
  1. $cantidad_serie = count ($serie); //cuento las variables en un arreglo
  2. $indice=0;
  3.  
  4.  
  5. /* aqui es donde me encuentro ya que necesito colocar el
  6. valor de la posicion '0' en la cual va el dato de la serie del equipo
  7. y consultarla a la base de datos.
  8. */
  9.  
  10.  
  11. $ya_asignado1=mssql_query("select
  12.    [SCI].[dbo].[asignacion].[serie],
  13.    [SCI].[dbo].[asignacion][rut],
  14.    [SCI].[dbo].[asignacion][abm]
  15. from [SCI].[dbo].[asignacion]
  16. where serie='".$serie."' order by abm desc",$conexion);
Tengo la impresión de que lo que necesitas hacer una única consulta que te devuelva todos los registros cuyo ID coincida con alguno de una lista obtenida en el otro formilario.
¿Es así?

En ese caso yo probaría:

Código PHP:
Ver original
  1. $cantidad_serie = count ($serie); //cuento las variables en un arreglo
  2. $indice=0;
  3.  
  4. $lista = explode(", ", $serie);
  5.  
  6. $qry = "SELECT ";
  7. $qry .= "[SCI].[dbo].[asignacion].[serie], ";
  8. $qry .= "    [SCI].[dbo].[asignacion][rut],  ";
  9. $qry .= "    [SCI].[dbo].[asignacion][abm]  ";
  10. $qry .= " FROM [SCI].[dbo].[asignacion]  ";
  11. $qry .= "WHERE serie IN($lista)  ";
  12. $qry .= "OREDER BY abm DESC";
  13. $ya_asignado1=mssql_query($qry, $conexion);
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 27/04/2013 a las 17:04
  #9 (permalink)  
Antiguo 28/04/2013, 08:18
 
Fecha de Ingreso: mayo-2012
Ubicación: shilito
Mensajes: 67
Antigüedad: 11 años, 11 meses
Puntos: 3
Respuesta: crear query desde un array

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Por lo que dice este segmento de código:
Tengo la impresión de que lo que necesitas hacer una única consulta que te devuelva todos los registros cuyo ID coincida con alguno de una lista obtenida en el otro formulario.
¿Es así?

En ese caso yo probaría:

Código PHP:
Ver original
  1. $cantidad_serie = count ($serie); //cuento las variables en un arreglo
  2. $indice=0;
  3.  
  4. $lista = explode(", ", $serie);
  5.  
  6. $qry = "SELECT ";
  7. $qry .= "[SCI].[dbo].[asignacion].[serie], ";
  8. $qry .= "    [SCI].[dbo].[asignacion][rut],  ";
  9. $qry .= "    [SCI].[dbo].[asignacion][abm]  ";
  10. $qry .= " FROM [SCI].[dbo].[asignacion]  ";
  11. $qry .= "WHERE serie IN($lista)  ";
  12. $qry .= "OREDER BY abm DESC";
  13. $ya_asignado1=mssql_query($qry, $conexion);

Como bien dices gnzsoloyo, necesito hacer una consulta con las variables llamada "Serie" que ingrese anteriormente. probe tu Codigo y me aparece la consulta vacia ($lista)...

SELECT [SCI].[dbo].[asignacion].[serie], [SCI].[dbo].[asignacion][rut], [SCI].[dbo].[asignacion][abm] FROM [SCI].[dbo].[asignacion] WHERE serie IN() OREDER BY abm DESC

en fin
  #10 (permalink)  
Antiguo 28/04/2013, 08:37
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: crear query desde un array

Cita:
Iniciado por ghost_darknet Ver Mensaje
Como bien dices gnzsoloyo, necesito hacer una consulta con las variables llamada "Serie" que ingrese anteriormente. probe tu Codigo y me aparece la consulta vacia ($lista)...

SELECT [SCI].[dbo].[asignacion].[serie], [SCI].[dbo].[asignacion][rut], [SCI].[dbo].[asignacion][abm] FROM [SCI].[dbo].[asignacion] WHERE serie IN() OREDER BY abm DESC

en fin
Pues entonces, no se si te das cuenta, pero lo que hiciste es copiar y pegar sin percatarte de que la función que te puse no era la correcta...

Eso es una prueba didáctica: si no lo notabas, es porque ni siquiera lo estás leyendo.

Lo siento, pero no pasaste la prueba.



Bueno, yendo a lo concreto, deberías haber notado ese error y buscado en el manual de PHP (que puedes consultar on-line), y habrías visto que la función correcta es implode(), no explode().
Cita:
mplode

(PHP 4, PHP 5)

implode — Une elementos de un array en un string
Descripción
Código PHP:
string implode string $glue , array $pieces )
string implode ( array $pieces 
Une elementos de un array en un string con glue (pegamento).
con lo que el código quedaría:
Código PHP:
$cantidad_serie count ($serie); //cuento las variables en un array (lo siento, no me gusta la palabra "arreglo", en todo caso "vector" o "array")
$indice=0;
 
$lista implode(", "$serie);
 
$qry "SELECT ";
$qry .= "[SCI].[dbo].[asignacion].[serie], ";
$qry .= "    [SCI].[dbo].[asignacion][rut],  ";
$qry .= "    [SCI].[dbo].[asignacion][abm]  ";
$qry .= " FROM [SCI].[dbo].[asignacion]  ";
$qry .= "WHERE serie IN($lista)  ";
$qry .= "ORDER BY abm DESC";
$ya_asignado1=mssql_query($qry$conexion); 
desde el momento en que la consulta te queda así:
Código SQL:
Ver original
  1. WHERE serie IN()
deberías haber deducido que la variable estaba vacía y haber analizado por qué.

Por cierto, el SQL también contenia un error (de tipeo en este caso), porque no es OREDER sino ORDER. Eso tampoco lo viste.

En resumen: No copies y pegues. Analiza.
De nada te va a servir en el futuro que te de la solución servida, si no comprendes por qué tienes el problema.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 28/04/2013 a las 08:55
  #11 (permalink)  
Antiguo 28/04/2013, 13:20
 
Fecha de Ingreso: mayo-2012
Ubicación: shilito
Mensajes: 67
Antigüedad: 11 años, 11 meses
Puntos: 3
Respuesta: crear query desde un array

gracias gnzsoloyo, por la paciencia y el tiempo.

La verdad es que ya estaba disquisiado con este tema... asi que fui a relajarme un rato y volvi


Eso si revise la variable (la cual no se encontraba vacía) y si bien como tu dices no revise el SQL, pero pensé que si no pasaba la variable no me sirviria.

Soy bastante nuevo en el mundo de la programacion (de hecho No me gusta mucho), pero por un tema puntual me toco entrar a este mundo.. jojojoojojojo..


saludines y gracias nuevamente.

Etiquetas: formulario, query, sql, variables
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 23:54.