PHP - Actualizar varios valores teniendo un foreach

 
Vista:
sin imagen de perfil

Actualizar varios valores teniendo un foreach

Publicado por Franco (31 intervenciones) el 14/05/2019 17:26:49
Hola buenas tardes a todos, necesito una ayudita con un UPDATE.
Esto queriendo actualizar los valores de esta tabla
AIUDA

Pero con mi codigo solo me actualiza el ultimo valor. Ya corroboré y mi codigo de calculo está todo bien, el tema es la actualización que solo se realiza en el ultimo dato cargado.

Codigo donde hago la consulta:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
try {
    $add = "UPDATE calculo SET puntaje_fecha=:puntaje_fecha WHERE id_calculo=:id_calculo";
    $d = $conn->prepare($add);
    $d->bindParam(':puntaje_fecha', $_POST['puntaje_fecha']);
    $d->bindParam(':id_calculo', $_POST['id_calculo']);
    $d->execute();
    $message = '';
      if ($d->execute()) {
        $message = 'DATOS ACTUALIZADOS';
      } else {
        $message = 'ERROR DE ACTUALIZACION';
      }
 
} catch (PDOException $e) {
    die("Error: " . $e->getMessage() . "<br>on line: " . $e->getLine() . "<br>on file: " . $e->getFile());
}

Codigo donde realizo el formulario:
1
2
3
4
5
6
7
8
9
10
11
<?php foreach ($ca as $c){?>
<form action="actualizar.php" method="post">
      <?php if (($p['id_fecha'])==($r['nFecha'])){
Aquí hago un supercalculo, asi que no lo pego porque seria demasiado el codigo
 
     <input type="hidden" name="puntaje_fecha" value="<?php echo $s; ?>">
     <input type="hidden" name="id_calculo" value="<?php echo $c['id_calculo']; ?>">
 
  <?php }} ?>
  <input type="submit" value="Actualiza puntos">
</form>

El foreach recorre la misma tabla de la imagen. Agradecería cualquier ayuda!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Xavi
Val: 1.009
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Actualizar varios valores teniendo un foreach

Publicado por Xavi (143 intervenciones) el 14/05/2019 18:25:19
El problema que tienes Franco, es que en el foreach introduces varias veces los mismos input hidden con el mismo name, por lo cual cuando envías el formulario, unicamente se envía el ultimo valor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Actualizar varios valores teniendo un foreach

Publicado por Franco (31 intervenciones) el 14/05/2019 18:31:57
Hola, como podría hacer para que recorra los array y me pase los input hidden y asi poder actualizar los valores apretando solo una vez el submit? Desde ya gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Georkis
Val: 75
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Actualizar varios valores teniendo un foreach

Publicado por Georkis (5 intervenciones) el 14/05/2019 23:37:33
Hola, tienes que convertir los nombres en array

1
2
3
<input type="hidden" name="puntaje_fecha[]" value="<?php echo $s; ?>">
 
     <input type="hidden" name="id_calculo[]" value="<?php echo $c['id_calculo']; ?>">

Luego tienes que recorres esos arreglos y tienes que recorrer un bucle y por cada recorrido hacer un update y listo, esto lo hice en un sitio llamado mygnet pero ya no esta online, sino te daria el ejemplo que hice, esta super sencillo...

Lo que hice fue capturar la longitud del array e hice un for(){} y por cada recorrido hacia un update...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Actualizar varios valores teniendo un foreach

Publicado por Franco (31 intervenciones) el 15/05/2019 01:05:41
Gracias, me va a servir de mucho. El unico problema a eso es que la cantidad de valores de la tabla que recorre va variando, entonces no puedo hacer un update para cada recorrido porque será distinto. Me explico?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Actualizar varios valores teniendo un foreach

Publicado por Mauro (1036 intervenciones) el 15/05/2019 16:50:53
¿Por qué no puedes hacer un update para cada uno?

Sería algo como:

1
2
3
4
5
foreach( array_keys($_POST['id_calculo']) as $k ){
    $d->bindParam(':puntaje_fecha', $_POST['puntaje_fecha'][$k]);
    $d->bindParam(':id_calculo', $_POST['id_calculo'][$k]);
    $d->execute();
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Actualizar varios valores teniendo un foreach

Publicado por Franco (31 intervenciones) el 15/05/2019 18:31:51
Lo terminé modificando de una manera similar, pero aun sin resultados

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
try {
 
    $puntaje_fechaArray = $_POST['puntaje_fecha'];
    $id_calculoArray = $_POST['id_calculo'];
 
    foreach ($puntaje_fechaArray as $key => $val){
 
 
      $puntaje_fecha = $val[$key];
      $id_calculo = $id_calculoArray[$key];
 
      $add = "UPDATE calculo SET puntaje_fecha=:puntaje_fecha WHERE id_calculo=:id_calculo";
      $d = $conn->prepare($add);
      $d->bindParam(':puntaje_fecha', $puntaje_fecha );
      $d->bindParam(':id_calculo', $id_calculo);
      $d->execute();
   }
 
  } catch (PDOException $e) {
      die("Error: " . $e->getMessage() . "<br>on line: " . $e->getLine() . "<br>on file: " . $e->getFile());
  }

Y en el formulario puse

1
2
3
4
5
6
7
8
9
10
11
12
<form action="actualizar.php" method="post">
      <?php foreach ($ca as $c){?>
      <?php if (($p['id_fecha'])==($r['nFecha'])){
 
//CALCULO
 
                  <input type="hidden" name="puntaje_fecha[]" value="<?php echo $s; ?>">
                  <input type="hidden" name="id_calculo[]" value="<?php echo $c['id_calculo']; ?>">
 
      <?php } }?>
<input type="submit" value="Actualiza puntos">
    </form>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Actualizar varios valores teniendo un foreach

Publicado por Mauro (1036 intervenciones) el 15/05/2019 18:46:02
El sql y el prepare deberían estar afuera del foreach... esa es la idea de usar sentencias preparadas.

Me parece que el problema está en:

1
$puntaje_fecha = $val[$key];

¿$val es un array? A mi me parece que no... deberías usar directamente:

1
$puntaje_fecha = $val;

En general creo que te vendría bien usar un debugger. En este video puedes ver un poco más de qué se trata y cómo usarlo:

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

Actualizar varios valores teniendo un foreach

Publicado por Franco (31 intervenciones) el 15/05/2019 20:20:21
Muy buen video, muy explicativo todo. Me será de mucha ayuda, sobretodo para mí que recién estoy incursionando en el mundo del PHP.
En el código te refieres a esto? Perdón pero esto del array se me complica y ya llevo mucho tiempo tratando de resolverlo por eso la insistencia.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$puntaje_fechaArray = $_POST['puntaje_fecha'];
    $id_calculoArray = $_POST['id_calculo'];
 
    foreach ($puntaje_fechaArray as $val){
 
 
      $puntaje_fecha = [$val];
      $id_calculo = $id_calculoArray[$val];}
 
try {
      $add = "UPDATE calculo SET puntaje_fecha=:puntaje_fecha WHERE id_calculo=:id_calculo";
      $d = $conn->prepare($add);
      $d->bindParam(':puntaje_fecha', $puntaje_fecha );
      $d->bindParam(':id_calculo', $id_calculo);
      $d->execute();
 
  }catch (PDOException $e) {
      die("Error: " . $e->getMessage() . "<br>on line: " . $e->getLine() . "<br>on file: " . $e->getFile());
  }
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Actualizar varios valores teniendo un foreach

Publicado por Mauro (1036 intervenciones) el 15/05/2019 21:57:23
No exactamente. Lo que yo decía es:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$puntaje_fechaArray = $_POST['puntaje_fecha'];
$id_calculoArray = $_POST['id_calculo'];
 
$d = $conn->prepare("UPDATE calculo SET puntaje_fecha=:puntaje_fecha WHERE id_calculo=:id_calculo");
 
foreach ($puntaje_fechaArray as $k => $val) {
      $puntaje_fecha = $val;
      $id_calculo = $id_calculoArray[$k];
 
      $d->bindParam(':puntaje_fecha', $puntaje_fecha );
      $d->bindParam(':id_calculo', $id_calculo);
      try {
          $d->execute();
     } catch (PDOException $e) {
       die("Error: " . $e->getMessage() . "<br>on line: " . $e->getLine() . "<br>on file: " . $e->getFile());
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 1.071
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Actualizar varios valores teniendo un foreach

Publicado por Yamil Bracho (888 intervenciones) el 15/05/2019 19:14:43
En la linea
$puntaje_fecha = $val[$key];

deberia ser
$puntaje_fechaArray[$key]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar