PHP - Actualizar multiples registros

 
Vista:
sin imagen de perfil
Val: 8
Ha aumentado su posición en 6 puestos en PHP (en relación al último mes)
Gráfica de PHP

Actualizar multiples registros

Publicado por Carlos Alberto (4 intervenciones) el 20/12/2019 18:40:46
Buenas tardes, el tema es el siguiente, tengo una tabla nombres asi
idr | orden | nombre
1 | 1 | A
2 | 3 | B
3 | 2 | C
4 | 5 | D
5 | 4 | E

y tengo una formulario con el que quiero q se pueda modificar el valor de "orden" asi
1
2
3
4
5
6
7
8
9
10
11
$da = mysqli_query($conn,"select * from nombres order by orden);
echo'<form method="post">';
while ($das = mysqli_fetch_assoc($da)){
echo
'
<input type="hidden" name="idr" value="'.$das[idr].'">
<input type="number" name="orden" value="'.$das[orden].'">
'
}
echo'<button>ACEPTAR</button></form>'


lo que quiero es actualizar cada orden dependiente del idr que es el id del campo

Agradezco la ayuda q me puedan brindar
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 Kathyu
Val: 2.120
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Actualizar multiples registros

Publicado por Kathyu (680 intervenciones) el 20/12/2019 19:01:03
1- no mezcle código php con html, aperture y cierre cada uno de ellos por separado.
2- hágalo con un foreach
3- busque ejemplos, intente hacerlo y cuando ya no pueda mas nos presenta sus avances y créame que estaremos felices de ayudarle
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: 8
Ha aumentado su posición en 6 puestos en PHP (en relación al último mes)
Gráfica de PHP

Actualizar multiples registros

Publicado por Carlos Alberto (4 intervenciones) el 20/12/2019 19:46:15
Gracias por responder, el codigo corregido lo tengo asi
1
2
3
4
5
6
7
8
9
<?php
$da = mysqli_query($conn,"select * from nombres order by orden);?>
<form method="post">
<?php while ($das = mysqli_fetch_assoc($da)){?>
<input type="hidden" name="idr" value="'<?php echo $das[idr]?>'">
<input type="number" name="orden" value="'<?php echo $das[orden]?>'">
<?php }?>
<button>ACEPTAR</button>
</form>

encontre un ejemplo en el modifico los input asi
1
2
<input type="hidden" name="idr[]" value="'<?php echo $das[idr]?>'">
<input type="number" name="orden[]" value="'<?php echo $das[orden]?>'">

es decir poner llaves cuadradas al final del name
y al recibir los datos el codigo asi

1
2
3
4
5
foreach($_POST['orden'] as $valor)
{
 $sql_query = "update ordenes set orden='$valor' where idr='$_POST[idr]'";
 $get_result = $conn->query($sql_query);
}
pero me deja el mismo valor para todos lo intente de dos maneras pero no me funcionan, la manera es asi

1. (Me genera error)
1
2
3
4
5
foreach(($_POST['orden'] as $valor) && ($_POST['idr'] as $id))
{
 $sql_query = "update ordenes set orden='$valor' where idr='$id'";
 $get_result = $conn->query($sql_query);
}

2. (No funciona)

1
2
3
4
5
6
7
8
foreach($_POST['orden'] as $valor)
{
  foreach($_POST['idr'] as $id)
  {
    $sql_query = "update ordenes set orden='$valor' where idr='$id'";
    $get_result = $conn->query($sql_query);
 }
}

De nuevo 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 Kathyu
Val: 2.120
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Actualizar multiples registros

Publicado por Kathyu (680 intervenciones) el 06/01/2020 18:57:57
Antes de responder tengo una duda, porque quiere modificar algo que ya tiene guardado?? osea el orden viene de la DB y según veo su input es un number entonces usted ese campo lo va a modificar, es así?

ok teniendo esa duda pseudo resuelta vamos a lo que vamos

1- Si, las [] hacen que sus variables pasen como array y que sean usadas en un foreach
2- Se lo voy a mostrar de dos formas una con POO y otra con estructurada por todo y todo

2.1 Estructurada
1
2
3
4
5
6
7
8
9
10
11
12
// Esto viene del form html con []
$priv_array = $_POST['priv'];
// ID del user
$id_usuario = $_POST['id_usuario'];
 
// Este array ($priv_array) es el que ya viene en el POST
foreach($priv_array as $priv){
 
	// Con cada vuelta actualizará los privilegios de cada usuario
	// basandose en el $id_usuario
	$sql_update = $mysqli->query("UPDATE privilegio SET privilegio=1,updatedby='$updatedby' WHERE id='$priv' AND usuario = '$id_usuario' ");
}

Cabe mencionar que esto funciona perfectamente

2.2 POO
1
2
3
4
5
6
7
8
9
// $fuenteCierra trae el array de las Fuentes que voy a cerrar
foreach ($fuenteCierra as $fcr){
	// Aca recojo el ID de cada una, vea que aca ya guardo a manera temporal
	// los ID's de cada fuente, esto lo hago adentro del foreach
	$fuente = $fcr['id'];
 
	// Por cada vuelta ejecuto el script de cerrarFuente
	$cerrar = $querys->cerrarFuente($fuente);
}

Este ejemplo tambien funciona al 100%


Ahora, como usted tiene dos array lo que debe hacer es definir su array máster y ese seria con el que haría el foreach que en su caso tendrían que ser los ID's ya que esos los pone ocultos osea que esos no se tocan, y dentro del foreach poner o recorrer su otro array y así cuando ejecute su query pasaría sus dos variables

por cierto acá tengo ejemplos viejos en estructurada para poder manejar los indices, póngale mucho coco a esto

1
2
3
4
5
6
7
8
// Insertando Familiares
foreach($_POST['nombref'] as $index => $nombre_f) {
    $parentesco_f = $_POST['parentesco'][$index];
    $nacimiento_f = $_POST['nacimientof'][$index];
    $direccion_f = $_POST['direccionf'][$index];
    $telefono_f = $_POST['telefonof'][$index];
    $insert_f = $mysqli->query("INSERT INTO empleado_familia VALUES ( '','$nit','$nombre_f','$parentesco_f','$nacimiento_f','$direccion_f','$telefono_f','$nick','$real_time') ") or trigger_error($mysqli->error);
}

Protip: Ojo con esos campos hidden, que con solo pasarlos a text en el html se les puede cambiar valor y le harían un degenere de respeto en su DB xD
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