Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] insertar mi foreach en mysql

Estas en el tema de insertar mi foreach en mysql en el foro de PHP en Foros del Web. Hola Saludos a todos tengo un problema con mi array a un no encuentro la forma de meter mis datos que arroja mi foreach a ...
  #1 (permalink)  
Antiguo 12/10/2016, 13:49
 
Fecha de Ingreso: junio-2014
Mensajes: 30
Antigüedad: 9 años, 9 meses
Puntos: 0
Pregunta insertar mi foreach en mysql

Hola Saludos a todos tengo un problema con mi array a un no encuentro la forma de meter mis datos que arroja mi foreach a mysql les dejos aqui mi codigo que ya llevo para que vean.


Código:
<?php 
$res = "";
$str = "";
$resta = array_filter($resta);  
foreach($resta as $valor) {
$res .= "$valor";	
}

foreach($id as $valor) {
$str .= "$valor";
}
$idd = $str;
la resta y el id los agarro de un input y llegan perfecto:
resta: 1 , 2
ID: 4, 5

los valores del foreach salen como deberían pegados -> 12 y 45

este es el codigo para actualizar mi base de dato para cuando voy a restar llamando al $idd y $res

Código:
$query = "UPDATE `inventario`.`registro` SET `unidades_r` = `unidades_r` - $res WHERE ID_R = $idd);";  
  $result = mysql_query($query);
estaba mirando este Post y se parece mucho a lo que busco pero no logro implementarlo en mi codigo, lo que el hace es como un ciclo con el for

http://www.forosdelweb.com/f18/insertar-datos-array-mysql-933073/
  #2 (permalink)  
Antiguo 12/10/2016, 16:00
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 5 meses
Puntos: 123
Respuesta: insertar mi foreach en mysql

Y cual es el error que te da exactamente? No termino de entenderte.
__________________
Unset($vida['malRollo']);
  #3 (permalink)  
Antiguo 12/10/2016, 17:19
 
Fecha de Ingreso: junio-2014
Mensajes: 30
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: insertar mi foreach en mysql

Cita:
Iniciado por xerifandtomas Ver Mensaje
Y cual es el error que te da exactamente? No termino de entenderte.
Hola xerifandtomas hasta ahora ningún error solo trato de que me salga un siclo en mi foreach y salga de esta forma.

UPDATE `inventario`.`registro` SET `unidades_r` = `unidades_r` - 1 WHERE ID_R = 5;

UPDATE `inventario`.`registro` SET `unidades_r` = `unidades_r` - 3 WHERE ID_R = 2;

UPDATE `inventario`.`registro` SET `unidades_r` = `unidades_r` - 7 WHERE ID_R = 3;

UPDATE `inventario`.`registro` SET `unidades_r` = `unidades_r` - 2 WHERE ID_R = 1;

porque yo recojo el ID y las unidades a restar gracias al foreach solo me faltaria agregar esa consulta a mi ciclo y que cada ID Y unidad a restar se le una me di a entender ? espero me puedas ayudar porque ya estoy bloqueado

Última edición por sonreiders19; 12/10/2016 a las 17:54
  #4 (permalink)  
Antiguo 12/10/2016, 18:16
 
Fecha de Ingreso: junio-2014
Mensajes: 30
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: insertar mi foreach en mysql

Puder hacer unas modificaciones al codigo pero no logro arreglarlo bien aqui les muestro

Código PHP:
<?php 
$res 
"";
$str "";
$resta array_filter($resta);  
foreach(
$resta as $valorr) {    

foreach(
$id as $valor
$str .= "UPDATE `inventario`.`registro` SET `unidades_r` = `unidades_r` - $valorr WHERE ID_R = $valor;</br>";
}
$idd $str;
echo 
"$idd";
Resultado que muestra

Código PHP:
UPDATE `inventario`.`registroSET `unidades_r` = `unidades_r` - 4 WHERE ID_R 1;
UPDATE `inventario`.`registroSET `unidades_r` = `unidades_r` - 4 WHERE ID_R 6;
UPDATE `inventario`.`registroSET `unidades_r` = `unidades_r` - 11 WHERE ID_R 1;
UPDATE `inventario`.`registroSET `unidades_r` = `unidades_r` - 11 WHERE ID_R 6
el resultado que busco seria

Código PHP:
UPDATE `inventario`.`registroSET `unidades_r` = `unidades_r` - 4 WHERE ID_R 1;
UPDATE `inventario`.`registroSET `unidades_r` = `unidades_r` - 11 WHERE ID_R 6
se parece mucho a lo que quiero pero tengo problema con el foreach de restar si trato de unirlo se duplica y salen 4 registro en vez de dos , creo que la solucion esta en unir esos dos foreach algo como foreach($resta as $valorr , $id as $valor) seguire buscando si hay algo parecido
  #5 (permalink)  
Antiguo 12/10/2016, 19:10
Avatar de manuparquegiralda  
Fecha de Ingreso: junio-2012
Ubicación: Barcelona
Mensajes: 241
Antigüedad: 11 años, 9 meses
Puntos: 39
Respuesta: insertar mi foreach en mysql

Tu problema si te he entendido bien porque no estoy seguro de haberlo hecho es que tienes un bucle dentro de otro bucle, de manera que en el ejemplo que has puesto justo arriba tienes esto:

Código PHP:
Ver original
  1. $resta = array("4","11");
  2. $id = array("1", "6");

De manera que si te fijas, en el primer foreach recorres el array $resta y dentro de éste recorres el array $id por eso te imprime los cuatro resultados. Los dos primeros corresponden al valor 4 del array $resta que dentro pasa por los dos valores del array $id (1 y 6). Despues te vuelve a pasar por el array $resta con el valor 11 y dentro de éste te vuelve a pasar por el array $id recorriendote los dos valores (1 y 6) y aquí tienes tus cuatro resultados.

Algo que no entiendo es porque pasas a $resta el array_filter() si no le estás pasando ninguna función de evaluación. Si no le pasas la funcion de callback lo que hace es eliminarte todas las entradas del array que sean false. Entonces ahí está mi duda de si las claves del array $resta son coincidentes con las del array $id ya que en tu primer mensaje pones que los array te reciben los valores con las mismas claves, de modo que no sería necesario pasar $resta por el array_filter().

Como no sé donde estás asignando los datos a los arrays $resta e $id no sé bien si la solución que te voy a dar te valdrá, pero en el caso de que las claves de los array sean iguales puedes hacer esto:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $res = "";
  4. $str = "";
  5.  
  6. foreach($resta as $k => $valor) {    
  7.     $str .= "UPDATE `inventario`.`registro` SET `unidades_r` = `unidades_r` - ".$resta[$k]." WHERE ID_R = ".$id[$k].";</br>";
  8. }
  9.  
  10. echo $str;
  11.  
  12. ?>

También te valdría un for en lugar de un foreach si los array te vienen ordenados como pones en el primer mensaje:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $res = "";
  4. $str = "";
  5.  
  6. for($k=0; isset($resta[$k]); $k++) {  
  7.     $str .= "UPDATE `inventario`.`registro` SET `unidades_r` = `unidades_r` - ".$resta[$k]." WHERE ID_R = ".$id[$k].";</br>";
  8. }
  9.  
  10. echo $str;
  11.  
  12. ?>

Si no te sirve lo que te he puesto, intenta pasarnos como reciben los valores los dos arrays con los que estás trabajando y así lo tendremos más claro.
__________________
Diseño Web - Arisman Web

Última edición por manuparquegiralda; 12/10/2016 a las 19:23
  #6 (permalink)  
Antiguo 12/10/2016, 19:59
 
Fecha de Ingreso: junio-2014
Mensajes: 30
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: insertar mi foreach en mysql

Cita:
Iniciado por manuparquegiralda Ver Mensaje
Tu problema si te he entendido bien porque no estoy seguro de haberlo hecho es que tienes un bucle dentro de otro bucle, de manera que en el ejemplo que has puesto justo arriba tienes esto:

Código PHP:
Ver original
  1. $resta = array("4","11");
  2. $id = array("1", "6");

De manera que si te fijas, en el primer foreach recorres el array $resta y dentro de éste recorres el array $id por eso te imprime los cuatro resultados. Los dos primeros corresponden al valor 4 del array $resta que dentro pasa por los dos valores del array $id (1 y 6). Despues te vuelve a pasar por el array $resta con el valor 11 y dentro de éste te vuelve a pasar por el array $id recorriendote los dos valores (1 y 6) y aquí tienes tus cuatro resultados.

Algo que no entiendo es porque pasas a $resta el array_filter() si no le estás pasando ninguna función de evaluación. Si no le pasas la funcion de callback lo que hace es eliminarte todas las entradas del array que sean false. Entonces ahí está mi duda de si las claves del array $resta son coincidentes con las del array $id ya que en tu primer mensaje pones que los array te reciben los valores con las mismas claves, de modo que no sería necesario pasar $resta por el array_filter().

Como no sé donde estás asignando los datos a los arrays $resta e $id no sé bien si la solución que te voy a dar te valdrá, pero en el caso de que las claves de los array sean iguales puedes hacer esto:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $res = "";
  4. $str = "";
  5.  
  6. foreach($resta as $k => $valor) {    
  7.     $str .= "UPDATE `inventario`.`registro` SET `unidades_r` = `unidades_r` - ".$resta[$k]." WHERE ID_R = ".$id[$k].";</br>";
  8. }
  9.  
  10. echo $str;
  11.  
  12. ?>

También te valdría un for en lugar de un foreach si los array te vienen ordenados como pones en el primer mensaje:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $res = "";
  4. $str = "";
  5.  
  6. for($k=0; isset($resta[$k]); $k++) {  
  7.     $str .= "UPDATE `inventario`.`registro` SET `unidades_r` = `unidades_r` - ".$resta[$k]." WHERE ID_R = ".$id[$k].";</br>";
  8. }
  9.  
  10. echo $str;
  11.  
  12. ?>

Si no te sirve lo que te he puesto, intenta pasarnos como reciben los valores los dos arrays con los que estás trabajando y así lo tendremos más claro.
Hola Gracias por ayudarme en mi pequeño problema

te cuento que ese metodo no me funciona ninguno de los dos me salta el siguiente error

Código PHP:
NoticeUndefined offset2 in C:xampphtdocsplanilla_2.php on line 267
UPDATE 
`inventario`.`registroSET `unidades_r` = `unidades_r` - 4 WHERE ID_R 1;
UPDATE `inventario`.`registroSET `unidades_r` = `unidades_r` - 11 WHERE ID_R = ; 
ya me habia pasado antes y uno del foro me dijo que use foreach y me funciona bien con el foreach lo que pasa es que la cadena se rompe.

.sobre lo que me dices de como los recibo, lo que pasa es que es un inventario por ejemplo tengo un tornillo en el id 1 una tuerca en el id 2 y un clavo en el id 3 si yo selecciono tuerca el codigo funciona, si selecciono dos materiales igual funciona perfecto tambien con tres materiales , el problema esta que si yo selecciono el id 1 y el id 3 se corta el array por eso me sale el error arriba, por eso uso foreach y sobre el $resta = array_filter($resta); lo uso porque en la lista de unidades todos inician con cero

Última edición por sonreiders19; 12/10/2016 a las 20:26
  #7 (permalink)  
Antiguo 12/10/2016, 21:36
 
Fecha de Ingreso: junio-2014
Mensajes: 30
Antigüedad: 9 años, 9 meses
Puntos: 0
Desacuerdo Respuesta: insertar mi foreach en mysql

Aqui de nuevo dando golpes , consegui esta forma pero no logro hacerlo automatico aqui el codigo a ver quien pueda y me ayude.

Código PHP:
<?php
 
$res 
"";
$str "";
foreach(
$id as $k => $valorr)
$idd[] = $valorr;
}
$resta array_filter($resta); 
foreach(
$resta as $k => $valor) {    
    
$str .= "UPDATE `inventario`.`registro` SET `unidades_r` = `unidades_r` - ".$resta[$k]." WHERE ID_R = ".$idd[0].";</br>";
}
 
echo 
$str;
 
?>
Resultado

Código PHP:
UPDATE `inventario`.`registroSET `unidades_r` = `unidades_r` - 4 WHERE ID_R 1;
UPDATE `inventario`.`registroSET `unidades_r` = `unidades_r` - 11 WHERE ID_R 1
Resultado que Busco

Código PHP:
UPDATE `inventario`.`registroSET `unidades_r` = `unidades_r` - 4 WHERE ID_R 1;
UPDATE `inventario`.`registroSET `unidades_r` = `unidades_r` - 11 WHERE ID_R 6
el caso es que en esta parte coloco WHERE ID_R = ".$idd[0] <- el cero y me sale ID = 1 si coloco ".$idd[1] me sale el ID = 6 , como hago para que funcione automatico?.. es lo que llevo hasta ahora Saludos espero me puedan ayudar

Última edición por sonreiders19; 12/10/2016 a las 21:45
  #8 (permalink)  
Antiguo 13/10/2016, 05:07
Avatar de manuparquegiralda  
Fecha de Ingreso: junio-2012
Ubicación: Barcelona
Mensajes: 241
Antigüedad: 11 años, 9 meses
Puntos: 39
Respuesta: insertar mi foreach en mysql

A ver pon el resultado de los dos arrays que estás tratando con un print_r antes de pasar $resta por el array_filter(); Es decir, haz esto con los resultados que te van bien y con los que te van mal y el código que estés utilizando, si no los palos de ciego los doy yo.

Código PHP:
Ver original
  1. print_r($resta);
  2. echo "<br><br>";
  3. print_r($id);

Así podré ver como son los arrays.
__________________
Diseño Web - Arisman Web
  #9 (permalink)  
Antiguo 13/10/2016, 08:13
 
Fecha de Ingreso: junio-2014
Mensajes: 30
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: insertar mi foreach en mysql

Cita:
Iniciado por manuparquegiralda Ver Mensaje
A ver pon el resultado de los dos arrays que estás tratando con un print_r antes de pasar $resta por el array_filter(); Es decir, haz esto con los resultados que te van bien y con los que te van mal y el código que estés utilizando, si no los palos de ciego los doy yo.

Código PHP:
Ver original
  1. print_r($resta);
  2. echo "<br><br>";
  3. print_r($id);

Así podré ver como son los arrays.
Hola Manupar Este es el resultado

Array ( [0] => 4 [1] => 0 [2] => 11 ) Array ( [0] => 1 [1] => 6 )

<- resta .. ID ->
  #10 (permalink)  
Antiguo 13/10/2016, 09:51
 
Fecha de Ingreso: junio-2014
Mensajes: 30
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: insertar mi foreach en mysql

abra forma de pasar mi array a esto

Array ( [0] => 4 [1] => 11 ) Array ( [0] => 1 [1] => 6 )

de esto ?

Array ( [0] => 4 [1] => 0 [2] => 11 ) Array ( [0] => 1 [1] => 6 )

asi las claves estaria con su pareja y asi poder pasarlo por el ciclo sin problema ?
  #11 (permalink)  
Antiguo 13/10/2016, 09:53
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 5 meses
Puntos: 123
Respuesta: insertar mi foreach en mysql

Supongo que tienes un formulario y que envías los datos como Array, los id con hidden y los valores como input text o number.

Suponiendo que por cada id tienes un campo para text para introducir el valor yo lo construiría de la iguiente manera, pasando el id del artículo como clave del array y no en otro campo aparte.

Código HTML:
Ver original
  1. <input type="text" name="resta[id_articulo]" value="0">


De esta manera solo tienes y necesitas un Array que tendrá como claves los id de los artículos.

Luego lo recorres con un único foreach
Código PHP:
Ver original
  1. foreach ( $_GET ['resta'] as $clave_id => $valor)
  2. {
  3.     echo "Clave $clave_id valor $valor .";
  4. }
__________________
Unset($vida['malRollo']);
  #12 (permalink)  
Antiguo 13/10/2016, 10:36
 
Fecha de Ingreso: junio-2014
Mensajes: 30
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: insertar mi foreach en mysql

Cita:
Iniciado por xerifandtomas Ver Mensaje
Supongo que tienes un formulario y que envías los datos como Array, los id con hidden y los valores como input text o number.

Suponiendo que por cada id tienes un campo para text para introducir el valor yo lo construiría de la iguiente manera, pasando el id del artículo como clave del array y no en otro campo aparte.

Código HTML:
Ver original
  1. <input type="text" name="resta[id_articulo]" value="0">


De esta manera solo tienes y necesitas un Array que tendrá como claves los id de los artículos.

Luego lo recorres con un único foreach
Código PHP:
Ver original
  1. foreach ( $_GET ['resta'] as $clave_id => $valor)
  2. {
  3.     echo "Clave $clave_id valor $valor .";
  4. }
Hola xerifandtomas me parece muy buena idea la que explicas este es el codigo del formulario de la parte donde agarro los datos, vere si meto eso que me dices gracias.

Código HTML:
<table border="10" bordercolor="red" style="font-size: 10pt"> <tr>
<TR BGCOLOR="red">
<td><font face="red"><b>Nombre</b></font></td>
<td><font face="red"><b>Unidades</b></font></td>
<td><font face="red"><b>Almacen</b></font></td>
<td><font face="red"><b>Utilizar</b></font></td>
<td><font face="red"><b>Marcar</b></font></td>
</tr> 
Código PHP:
<?php  
include("conexio.php");
 @
$nombre $_POST['nombre'];
 @
$fecha $_POST['fecha'];
  @
$almacen $_POST['almacen'];
  
$query "SELECT * FROM registro WHERE almacen LIKE '%$almacen%'";  
  
$result mysql_query($query);
   
// $query2 = "SELECT * FROM registro WHERE fecha_r >  '$fecha'";  
  //$result = mysql_query($query2);
  
$numero 0;
  
  while(
$row mysql_fetch_array($result))
  {

   echo 
"<td><center><font face=\"verdana\">" 
        
$row["nombre_r"] . "</font></td>";
    echo 
"<td><center><font face=\"verdana\">" 
        
$row["unidades_r"] . "</font></td>";
    echo 
"<td><center><font face=\"verdana\">" 
        
$row["almacen"]. "</center></font></td>"
         echo 
"<td><center><select name='resta[]'>";
        for(
$i 0$i <=$row["unidades_r"]; $i++)
         echo 
"<option value=\"$i\">$i</option>";
echo 
"</select></td>";
echo 
"<td><center>";

echo 
"<input type='checkbox' name='id[]' value=".$row["ID_R"].">";    
echo 
"</td></tr>";
    
$numero++; 

        
  } 
  echo 
"<tr><td colspan=\"15\"><center><font face=\"verdana\"><b>Total de Registros: " $numero 
      
"</b></font></td></tr>";
  
  
mysql_free_result($result);
 
?>
</table>
  #13 (permalink)  
Antiguo 13/10/2016, 13:28
Avatar de manuparquegiralda  
Fecha de Ingreso: junio-2012
Ubicación: Barcelona
Mensajes: 241
Antigüedad: 11 años, 9 meses
Puntos: 39
Respuesta: insertar mi foreach en mysql

Cita:
Iniciado por sonreiders19 Ver Mensaje
abra forma de pasar mi array a esto

Array ( [0] => 4 [1] => 11 ) Array ( [0] => 1 [1] => 6 )

de esto ?

Array ( [0] => 4 [1] => 0 [2] => 11 ) Array ( [0] => 1 [1] => 6 )

asi las claves estaria con su pareja y asi poder pasarlo por el ciclo sin problema ?

Prueba con esto:

Código PHP:
Ver original
  1. <?php
  2.   $resta = array(0 => 4, 1 => 0, 2 => 11);
  3.  $id = array(0 => 1, 1 => 6);
  4.  
  5.  echo "Arrays originales:<br>";
  6.  
  7.  print_r($resta);
  8.  print_r($id);
  9.  
  10.  $resta = array_values(array_filter($resta));
  11.  
  12.  echo "<br>Arrays arreglados:<br>";
  13.  
  14.  print_r($resta);
  15.  print_r($id);
  16.  
  17. ?>

Te dará este resultado:

Código PHP:
Arrays originales:

Array
(
    [
0] => 4
    
[1] => 0
    
[2] => 11
)
Array
(
    [
0] => 1
    
[1] => 6
)

Arrays arreglados:

Array
(
    [
0] => 4
    
[1] => 11
)
Array
(
    [
0] => 1
    
[1] => 6

__________________
Diseño Web - Arisman Web
  #14 (permalink)  
Antiguo 13/10/2016, 15:05
 
Fecha de Ingreso: junio-2014
Mensajes: 30
Antigüedad: 9 años, 9 meses
Puntos: 0
De acuerdo Respuesta: insertar mi foreach en mysql

Cita:
Iniciado por manuparquegiralda Ver Mensaje
Prueba con esto:

Código PHP:
Ver original
  1. <?php
  2.   $resta = array(0 => 4, 1 => 0, 2 => 11);
  3.  $id = array(0 => 1, 1 => 6);
  4.  
  5.  echo "Arrays originales:<br>";
  6.  
  7.  print_r($resta);
  8.  print_r($id);
  9.  
  10.  $resta = array_values(array_filter($resta));
  11.  
  12.  echo "<br>Arrays arreglados:<br>";
  13.  
  14.  print_r($resta);
  15.  print_r($id);
  16.  
  17. ?>

Te dará este resultado:

Código PHP:
Arrays originales:

Array
(
    [
0] => 4
    
[1] => 0
    
[2] => 11
)
Array
(
    [
0] => 1
    
[1] => 6
)

Arrays arreglados:

Array
(
    [
0] => 4
    
[1] => 11
)
Array
(
    [
0] => 1
    
[1] => 6

Eso mismo necesitaba todo fue gracias al array_values ? Gracias Manu el mejor, conoces un metodo para mandar mi array que es de varios Update a mysql? yo estaba investigando y consegui fue este, a un que no se como implementar mi codigo ahi.

Código PHP:
$array_ids = array('nuevonombre 1''nuevonombre 3''nuevonombre 4'); 
Código PHP:
$ids implode(','array_keys($array_ids)); $sql "UPDATE discos SET precio = CASE id "; foreach ($aray_ids as $id => $valor) { $sql .= sprintf("WHEN %d THEN %d "$id$valor); } $sql .= "END WHERE id IN ($ids)"; echo $sql
Este fue el que yo hice pero el mysql no me lo recibe, si lo pongo en la consola si funciona pero enviando por el php No. estoy usando tu ciclo for

Código PHP:
<?php
  $resta 
= array(=> 4=> 0=> 11);
 
$id = array(=> 1=> 6);
 
 echo 
"Arrays originales:<br>";
 
 
print_r($resta);
 
print_r($id);
 
 
$resta array_values(array_filter($resta));
 
 echo 
"<br>Arrays arreglados:<br>";
 
 
print_r($resta);
 
print_r($id);
 
 
$str "";
for(
$k=0; isset($resta[$k]); $k++) {
    
$str .= "UPDATE inventario.registro SET unidades_r = unidades_r - ".$resta[$k]." WHERE ID_R = ".$id[$k].";";
}
$sql $str;
 
mysql_query($sql);

echo 
"<br><br>$str";
 
?>
  #15 (permalink)  
Antiguo 13/10/2016, 17:59
Avatar de manuparquegiralda  
Fecha de Ingreso: junio-2012
Ubicación: Barcelona
Mensajes: 241
Antigüedad: 11 años, 9 meses
Puntos: 39
Respuesta: insertar mi foreach en mysql

Claro que no te funciona porque estás haciendo una consulta con la variables $str que tiene tantos UPDATES como te de el bucle separados por punto y coma. Esto no permite hacerlo PHP creo que por razones de seguridad contra inyecciones sql.

Yo lo haría así si no voy a tener un número muy alto de este tipo de actualizaciones y no me comería la cabeza más de la cuenta:

Código PHP:

<?php 
 $resta 
= array(=> 4=> 0=> 11); 
 
$id = array(=> 1=> 6); 
  
 
$resta array_values(array_filter($resta)); 
  
 for(
$k=0; isset($resta[$k]); $k++) { 
     
mysql_query("UPDATE inventario.registro SET unidades_r = unidades_r - ".$resta[$k]." WHERE ID_R = ".$id[$k]."");
 }

  
?>
También se puede utilizar el CASE de MYSQL algo así, aunque lo voy a hacer a boleo tomalo como una idea y ajustalo si no funciona:


Código PHP:
 $resta = array(=> 4=> 0=> 11); 
 
$id = array(=> 1=> 6); 
  
 
$resta array_values(array_filter($resta)); 

 
$str "";
 for(
$k=0; isset($resta[$k]); $k++) { 
    
$str .= " WHEN ".$id[$k]." THEN ".$resta[$k];
 }

 
$sql"UPDATE inventario.registro SET unidades_r CASE ID_R".$str." END WHERE ID_R IN (".implode(","$id).")";
 
mysql_query($sql); 
Repito, no sé si irá así exactamente pero si no por ahí van los tiros. Espero que todo esto te sirva para aprender a jugar con los bucles y los arrays un poquito mejor y te esfuerces en entender el código y no en copiar y pegar.

Un saludo.
__________________
Diseño Web - Arisman Web

Última edición por manuparquegiralda; 13/10/2016 a las 18:12
  #16 (permalink)  
Antiguo 13/10/2016, 18:23
 
Fecha de Ingreso: junio-2014
Mensajes: 30
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: insertar mi foreach en mysql

Cita:
Iniciado por manuparquegiralda Ver Mensaje
Claro que no te funciona porque estás haciendo una consulta con la variables $str que tiene tantos UPDATES como te de el bucle separados por punto y coma. Esto no permite hacerlo PHP creo que por razones de seguridad contra inyecciones sql.

Yo lo haría así si no voy a tener un número muy alto de este tipo de actualizaciones y no me comería la cabeza más de la cuenta:

Código PHP:

<?php 
 $resta 
= array(=> 4=> 0=> 11); 
 
$id = array(=> 1=> 6); 
  
 
$resta array_values(array_filter($resta)); 
  
 for(
$k=0; isset($resta[$k]); $k++) { 
     
mysql_query("UPDATE inventario.registro SET unidades_r = unidades_r - ".$resta[$k]." WHERE ID_R = ".$id[$k]."");
 }

  
?>
También se puede utilizar el CASE de MYSQL algo así, aunque lo voy a hacer a boleo tomalo como una idea y ajustalo si no funciona:


Código PHP:
 $resta = array(=> 4=> 0=> 11); 
 
$id = array(=> 1=> 6); 
  
 
$resta array_values(array_filter($resta)); 

 
$str "";
 for(
$k=0; isset($resta[$k]); $k++) { 
    
$str .= " WHEN ".$id[$k]." THEN ".$resta[$k];
 }

 
$sql"UPDATE inventario.registro SET unidades_r CASE ID_R".$str." END WHERE ID_R IN (".implode(","$id).")";
 
mysql_query($sql); 
Repito, no sé si irá así exactamente pero si no por ahí van los tiros. Espero que todo esto te sirva para aprender a jugar con los bucles y los arrays un poquito mejor y te esfuerces en entender el código y no en copiar y pegar.

Un saludo.
Gracias Manu tienes razon no da como quiero tu forma da asi

Código PHP:
UPDATE inventario.registro SET unidades_r CASE ID_R WHEN 1 THEN 4 WHEN 6 THEN 11 END WHERE id IN (1,6
y busco que de asi.

Código PHP:
UPDATE inventario.registro SET unidades_r = CASE ID_R WHEN 1 THEN unidades_r -4 WHEN 6 THEN unidades_r -11 END WHERE ID_R IN (1,6
eso trato e dado bastante golpes con esto primera vez que uso array , foreach, etc y he aprendido bastante vere si logro arregarlo
  #17 (permalink)  
Antiguo 13/10/2016, 19:08
 
Fecha de Ingreso: junio-2014
Mensajes: 30
Antigüedad: 9 años, 9 meses
Puntos: 0
De acuerdo Respuesta: insertar mi foreach en mysql

Listo manu solo le falto unidades_r y un = .. Gracia a las persona que me ayudaron
Código PHP:
<?php
include("conexio.php");
?>
<?php
 $resta 
= array(=> 4=> 0=> 11);  
 
$id = array(=> 1=> 6);  
 
 echo 
"Arrays originales:<br>";
 
 
print_r($resta);
 
print_r($id);
 
 
$resta array_values(array_filter($resta));
 
 echo 
"<br>Arrays arreglados:<br>";
 
 
print_r($resta);
 
print_r($id);
 

 
$str "";
 for(
$k=0; isset($resta[$k]); $k++) { 
    
$str .= " WHEN ".$id[$k]." THEN unidades_r -".$resta[$k];
 }
 
 
$whr "(".implode(","$id).")";

 
$sql"UPDATE inventario.registro SET unidades_r = CASE ID_R".$str." END WHERE ID_R IN ".$whr;

mysql_query($sql,$conexio);  
 echo 
$sql;
?>
Al FIN bueno dejare aqui el resultado seguro alguien igual que yo seguro le pase lo mismo que yo y espero se consiga con este post

Etiquetas: foreach, mysql, registro, 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 01:38.