Foros del Web » Programando para Internet » PHP »

Actualizar varios Registros

Estas en el tema de Actualizar varios Registros en el foro de PHP en Foros del Web. Hola compañeros, vuelvo a escribirle con un problema q no le he podido dar la vuelta aun. Quiero hacer una actualizacion de varios registros,quizas parezca ...
  #1 (permalink)  
Antiguo 30/01/2012, 12:53
 
Fecha de Ingreso: enero-2011
Ubicación: Maracaibo
Mensajes: 179
Antigüedad: 13 años, 3 meses
Puntos: 2
Actualizar varios Registros

Hola compañeros, vuelvo a escribirle con un problema q no le he podido dar la vuelta aun.

Quiero hacer una actualizacion de varios registros,quizas parezca un tema de MySQL, la cuestion es que tengo un formulario donde envio un periodo de una semana del año, envio a una consulta donde me mostrara una lista con ciertos trabajadores dentro de ese rango de fechas seleccionado.

Ahora bien esa lista, tiene al lado de los trabajadores varios input text donde se podria modificar las horas trabajadas por cada dia de la semana seleccionada, ok la cuestion es la siguiente.

Estoy enviando ese formulario pero al hacer el UPDATE solo me esta actualizando los datos del ultimo trabajador de la lista, lo que hice fue meter el UPDATE dentro de un FOR pero sigue igual, colocare el codigo a ver si me pueden ayudar

horas.php
Código PHP:
<?
include("./Scripts/funcion.php");
include(
"conexion.php");
$conexion = new ControlBD();
$conexion->conectar();
$conexion->seleccionarBD();

$grupo $_POST['grupos'];
$fechaDesde cambiar_a_mysql($_POST['fch_dsd']);
$fechaHasta cambiar_a_mysql($_POST['fch_hst']);

$query="SELECT codigo,mar_codtra,MAR_HORLUN,MAR_HORMAR,MAR_HORMIE,MAR_HORJUE,MAR_HORVIE,MAR_HORSAB,MAR_HORDOM,
       MAR_HOREXT,MAR_HORNOC,MAR_HEDL,MAR_HEDM,MAR_HEDMI,MAR_HEDJ,MAR_HEDV,MAR_HEDS,MAR_HEDD,MAR_HENL,
         MAR_HENM,MAR_HENMI,MAR_HENJ,MAR_HENV,MAR_HENS,MAR_HEND,SALARIO,NOMBRE,APELLIDO,CEDULA,TURNO,
         JOR_DESCRI,FECHA_ING,FECHA_NAC,COD_DPTO,DEP_DESCRI,GRUPO,gtr_descri,cod_cargo,car_descri,
         NIVEL_EDUC,EDO_CIVIL, TRUNCATE(PERIOD_DIFF(DATE_FORMAT(CURDATE(),'%Y%m'),
         DATE_FORMAT(FECHA_NAC,'%Y%m'))/12,0) AS ANOS,MOD(PERIOD_DIFF(DATE_FORMAT(CURDATE(),'%Y%m'),
         DATE_FORMAT(FECHA_NAC,'%Y%m')),12) AS cMES FROM nmtrabajador   
       INNER JOIN nmdpto ON dep_codigo=cod_dpto   
       INNER JOIN nmgrupo ON gtr_codigo=grupo   
       INNER JOIN nmcargos ON car_codigo=cod_cargo 
       INNER JOIN nmjornadas ON turno=jor_codigo
        INNER JOIN nmmarcacion ON mar_codtra=codigo    
        WHERE condicion='A' AND gtr_codigo='$grupo'"
;
$result=$conexion->ejecutarQuery($query);
#****************Probando con enlace a NMMARCACION para Mostrar las Marcaciones Importadas*****************************#

$date="SELECT DATE('$fechaDesde') as Hoy,
        WEEKDAY(DATE('$fechaDesde')) as DiaSemana,
        DATE_SUB(DATE('$fechaDesde'),INTERVAL WEEKDAY(DATE('$fechaHasta')) DAY) as primerDiaSemana,
        DATE_ADD(DATE_SUB(DATE('$fechaDesde'),INTERVAL WEEKDAY(DATE('$fechaHasta')) DAY),INTERVAL 1 DAY) as segundoDiaSemana,
        DATE_ADD(DATE_SUB(DATE('$fechaDesde'),INTERVAL WEEKDAY(DATE('$fechaHasta')) DAY),INTERVAL 2 DAY) as tercerDiaSemana,
        DATE_ADD(DATE_SUB(DATE('$fechaDesde'),INTERVAL WEEKDAY(DATE('$fechaHasta')) DAY),INTERVAL 3 DAY) as cuartoDiaSemana,
        DATE_ADD(DATE_SUB(DATE('$fechaDesde'),INTERVAL WEEKDAY(DATE('$fechaHasta')) DAY),INTERVAL 4 DAY) as quintoDiaSemana,
        DATE_ADD(DATE_SUB(DATE('$fechaDesde'),INTERVAL WEEKDAY(DATE('$fechaHasta')) DAY),INTERVAL 5 DAY) as sextoDiaSemana,
        DATE_ADD(DATE_SUB(DATE('$fechaDesde'),INTERVAL WEEKDAY(DATE('$fechaHasta')) DAY),INTERVAL 6 DAY) as ultimoDiaSemana "
;
$fecha=$conexion->ejecutarQuery($date);
$semana=mysql_fetch_array($fecha);

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=latin1" />
<title>Horas Laborales</title>
<script type="text/javascript" src="./Scripts/jquery-1.6.1.js"></script>
<link rel=stylesheet href="./Style/default.css" type="text/css">
</head>

<body>
<form name="marcacion" action="actualizar_mar.php" method="post">
<table class="horas" id="prueba">
  <thead>
    <tr>
        <th colspan="35">Nomina Personal Indirecto: </th>
    </tr>
    <tr>
        <th colspan="35">Periodo: </th>
    </tr>
 
    <tr id="m-header">
        <th rowspan="3">Cod. Trabajador</th>
        <th rowspan="3">Apellido y Nombre</th>
        <th rowspan="3">Cedula</th>
        <th rowspan="3">Clasificacion</th>
        <th rowspan="3">Afiliacion</th>
        <th rowspan="3">Sueldo Diario</th>
        <th rowspan="3">Fecha Ingreso</th>
        <th rowspan="3">Turno</th>
        <th rowspan="3"></th>
        <th colspan="3">Lunes</th>
        <th colspan="3">Martes</th>
        <th colspan="3">Miercoles</th>
        <th colspan="3">Jueves</th>
        <th colspan="3">Viernes</th>
        <th colspan="3">Sabado</th>
        <th colspan="3">Domingo</th>
    </tr>
    <tr>
        <th colspan="3"><? echo cambiar_fecha($semana['2']) ?></th>
        <th colspan="3"><? echo cambiar_fecha($semana['3']) ?></th>
        <th colspan="3"><? echo cambiar_fecha($semana['4']) ?></th>
        <th colspan="3"><? echo cambiar_fecha($semana['5']) ?></th>
        <th colspan="3"><? echo cambiar_fecha($semana['6']) ?></th>
        <th colspan="3"><? echo cambiar_fecha($semana['7']) ?></th>
        <th colspan="3"><? echo cambiar_fecha($semana['8']) ?></th>
    </tr>
    <tr>
        <th>H.N</th>
        <th>H.EXT</th>
        <th>H.E.N</th>
        <th>H.N</th>
        <th>H.EXT</th>
        <th>H.E.N</th>
        <th>H.N</th>
        <th>H.EXT</th>
        <th>H.E.N</th>
        <th>H.N</th>
        <th>H.EXT</th>
        <th>H.E.N</th>
        <th>H.N</th>
        <th>H.EXT</th>
        <th>H.E.N</th>
        <th>H.N</th>
        <th>H.EXT</th>
        <th>H.E.N</th>
        <th>H.N</th>
        <th>H.EXT</th>
        <th>H.E.N</th>
    </tr>
 </thead>
 
 <tbody style="overflow:auto;" >
<? while($array=mysql_fetch_array($result)){ ?>

    <tr>
        <td style="font-size:10px"><?=$array['codigo']?></td>
        <td style="font-size:10px"><?=$array['APELLIDO']." ".$array['NOMBRE']?></td>
        <td style="font-size:9px"><?=$array['CEDULA']?></td>
        <td style="font-size:9px"><?=$array['DEP_DESCRI']?></td>
        <td style="font-size:9px"><?=$array['gtr_descri']?></td>
        <td style="font-size:10px"><?=number_format($array['SALARIO'],2,",",".")?></td>
        <td style="font-size:9px"><?=$array['FECHA_ING']?></td>
        <td style="font-size:9px"><?=$array['JOR_DESCRI']?></td>
        <td></td>
        <td><input type="text" name="MAR_HORLUN[]" size="4" maxlength="2" class="hinput" value="<?=ROUND($array['MAR_HORLUN']); ?>" /></td>
        <td><input type="text" name="MAR_HEDL[]" size="4" maxlength="2" class="hinput" value="<?=ROUND($array['MAR_HEDL']); ?>" /></td>
        <td><input type="text" name="MAR_HENL[]" size="4" maxlength="2" class="hinput" value="<?=ROUND($array['MAR_HENL']); ?>" /></td>
        <td><input type="text" name="MAR_HORMAR[]" size="4" maxlength="2" class="hinput" value="<?=ROUND($array['MAR_HORMAR']); ?>" /></td>
        <td><input type="text" name="MAR_HEDM[]" size="4" maxlength="2" class="hinput" value="<?=ROUND($array['MAR_HEDM']); ?>" /></td>
        <td><input type="text" name="MAR_HENM[]" size="4" maxlength="2" class="hinput" value="<?=ROUND($array['MAR_HENM']); ?>" /></td>
        <td><input type="text" name="MAR_HORMIE[]" size="4" maxlength="2" class="hinput" value="<?=ROUND($array['MAR_HORMIE']); ?>" /></td>
        <td><input type="text" name="MAR_HEDMI[]" size="4" maxlength="2" class="hinput" value="<?=ROUND($array['MAR_HEDMI']); ?>" /></td>
        <td><input type="text" name="MAR_HENMI[]" size="4" maxlength="2" class="hinput" value="<?=ROUND($array['MAR_HENMI']); ?>" /></td>
        <td><input type="text" name="MAR_HORJUE[]" size="4" maxlength="2" class="hinput" value="<?=ROUND($array['MAR_HORJUE']); ?>" /></td>
        <td><input type="text" name="MAR_HEDJ[]" size="4" maxlength="2" class="hinput" value="<?=ROUND($array['MAR_HEDJ']); ?>"/></td>
        <td><input type="text" name="MAR_HENJ[]" size="4" maxlength="2" class="hinput" value="<?=ROUND($array['MAR_HENJ']); ?>" /></td>
        <td><input type="text" name="MAR_HORVIE[]" size="4" maxlength="2" class="hinput" value="<?=ROUND($array['MAR_HORVIE']); ?>" /></td>
        <td><input type="text" name="MAR_HEDV[]" size="4" maxlength="2" class="hinput" value="<?=ROUND($array['MAR_HEDV']); ?>" /></td>
        <td><input type="text" name="MAR_HENV[]" size="4" maxlength="2" class="hinput" value="<?=ROUND($array['MAR_HENV']); ?>" /></td>
        <td><input type="text" name="MAR_HORSAB[]" size="4" maxlength="2" class="hinput" value="<?=ROUND($array['MAR_HORSAB']); ?>" /></td>
        <td><input type="text" name="MAR_HEDS[]" size="4" maxlength="2" class="hinput" value="<?=ROUND($array['MAR_HEDS']); ?>" /></td>
        <td><input type="text" name="MAR_HENS[]" size="4" maxlength="2" class="hinput" value="<?=ROUND($array['MAR_HENS']); ?>" /></td>
        <td><input type="text" name="MAR_HORDOM[]" size="4" maxlength="2" class="hinput" value="<?=ROUND($array['MAR_HORDOM']); ?>" /></td>
        <td><input type="text" name="MAR_HEDD[]" size="4" maxlength="2" class="hinput" value="<?=ROUND($array['MAR_HEDD']); ?>" /></td>
        <td><input type="text" name="MAR_HEND[]" size="4" maxlength="2" class="hinput" value="<?=ROUND($array['MAR_HEND']); ?>" /></td>
        <input type="hidden" value="<?=$fechaDesde?>" name="fecha_desde[]" />
        <input type="hidden" value="<?=$fechaHasta?>" name="fecha_hasta[]" />
        <input type="hidden" value="<?=$array['codigo']?>" name="codigo_trab[]" />
    </tr>
<? }  ?>
</tbody>
</table>
<td><input type="submit" value="Actualizar" class="button"  /></td>
</form>
</body>
</html>
Este es el formulario donde envio las horas

Continuo....
  #2 (permalink)  
Antiguo 30/01/2012, 12:55
 
Fecha de Ingreso: enero-2011
Ubicación: Maracaibo
Mensajes: 179
Antigüedad: 13 años, 3 meses
Puntos: 2
Respuesta: Actualizar varios Registros

....continuacion!!!

Esta es la programacion donde recibo los datos de los campos y hago la actualizacion.

Como dije en el anterior POST solo me actualiza los datos cambiados del ultimo trabajador de la lista.

actualizar_mar.php
Código PHP:
<?php

    
include_once("conexion.php");
    include(
'./Scripts/funcion.php');
    
$conexion = new ControlBD();
    
$conexion->conectar();
    
$conexion->seleccionarBD();
    
        
$MAR_HORLUN=$_POST['MAR_HORLUN'];
        
$MAR_HEDL=$_POST['MAR_HEDL']; 
        
$MAR_HENL=$_POST['MAR_HENL']; 
        
$MAR_HORMAR=$_POST['MAR_HORMAR'];
        
$MAR_HEDM=$_POST['MAR_HEDM']; 
        
$MAR_HENM=$_POST['MAR_HENM']; 
        
$MAR_HORMIE=$_POST['MAR_HORMIE'];
        
$MAR_HEDMI=$_POST['MAR_HEDMI']; 
        
$MAR_HENMI=$_POST['MAR_HENMI']; 
        
$MAR_HORJUE=$_POST['MAR_HORJUE'];
        
$MAR_HEDJ=$_POST['MAR_HEDJ']; 
        
$MAR_HENJ=$_POST['MAR_HENJ']; 
        
$MAR_HORVIE=$_POST['MAR_HORVIE'];
        
$MAR_HEDV=$_POST['MAR_HEDV']; 
        
$MAR_HENV=$_POST['MAR_HENV']; 
        
$MAR_HORSAB=$_POST['MAR_HORSAB'];
        
$MAR_HEDS=$_POST['MAR_HEDS']; 
        
$MAR_HENS=$_POST['MAR_HENS']; 
        
$MAR_HORDOM=$_POST['MAR_HORDOM'];
        
$MAR_HEDD=$_POST['MAR_HEDD'];
        
$MAR_HEND=$_POST['MAR_HEND'];
        
$fechaDsd $_POST['fecha_desde'];
        
$fechaHst $_POST['fecha_hasta'];
        
$codigoTrab $_POST['codigo_trab'];

    for (
$i 0$i sizeof($codigoTrab); $i++) {
    
$query="UPDATE nmmarcacion SET MAR_HORLUN='$MAR_HORLUN[$i]', MAR_HEDL='$MAR_HEDL[$i]', MAR_HENL='$MAR_HENL[$i]', MAR_HORMAR='$MAR_HORMAR[$i]',
              MAR_HEDM='$MAR_HEDM[$i]', MAR_HENM='$MAR_HENM[$i]', MAR_HORMIE='$MAR_HORMIE[$i]', MAR_HEDMI='$MAR_HEDMI[$i]', MAR_HENMI='$MAR_HENMI[$i]',
              MAR_HORJUE='$MAR_HORJUE[$i]', MAR_HEDJ='$MAR_HEDJ[$i]', MAR_HENJ='$MAR_HENJ[$i]', MAR_HORVIE='$MAR_HORVIE[$i]', MAR_HEDV='$MAR_HEDV[$i]',
              MAR_HENV='$MAR_HENV[$i]', MAR_HORSAB='$MAR_HORSAB[$i]', MAR_HEDS='$MAR_HEDS[$i]', MAR_HENS='$MAR_HENS[$i]', MAR_HORDOM='$MAR_HORDOM[$i]',
              MAR_HEDD='$MAR_HEDD[$i]', MAR_HEND='$MAR_HEND[$i]'  
              WHERE MAR_CODTRA = '$codigoTrab[$i]' AND (MAR_DESDE >= '$fechaDsd[$i]' AND MAR_HASTA <= '$fechaHst[$i]')"
;
    
    }
    echo 
$query;
    
$conexion->ejecutarQuery($query);
    
$conexion->cerrarConec();
    
    echo 
'<script> alert("Marcaciones Actualizadas!!!")</script>';
    
?>
Espero puedan ayudarme y disculpen lo largo del POST

Saludos
  #3 (permalink)  
Antiguo 30/01/2012, 13:01
 
Fecha de Ingreso: mayo-2008
Mensajes: 103
Antigüedad: 15 años, 11 meses
Puntos: 14
Respuesta: Actualizar varios Registros

¿Sólo te actualiza un registro?

Quizás es porque este código:

Código PHP:
WHERE MAR_CODTRA '$codigoTrab[$i]' AND (MAR_DESDE >= '$fechaDsd[$i]' AND MAR_HASTA <= '$fechaHst[$i]')"; 
especifica que cambie sólo el registro con el MAR_CODTRA igual a $codigoTrab[$i]. Si solo hay un registro que cumple esto, sólo actualizará un registro: ese mismo.
  #4 (permalink)  
Antiguo 30/01/2012, 13:16
 
Fecha de Ingreso: octubre-2004
Ubicación: Barcelona
Mensajes: 195
Antigüedad: 19 años, 6 meses
Puntos: 7
Respuesta: Actualizar varios Registros

Hace lo que le dices, en este fragmento pones repetidamente en la variable $query un valor que se va reescribiendo a cada paso del bucle y al final ejecutas una consulta con el último valor.
Código PHP:
for ($i 0$i sizeof($codigoTrab); $i++) { 
    
$query="UPDATE nmmarcacion SET MAR_HORLUN='$MAR_HORLUN[$i]', MAR_HEDL='$MAR_HEDL[$i]', MAR_HENL='$MAR_HENL[$i]', MAR_HORMAR='$MAR_HORMAR[$i]', 
              MAR_HEDM='$MAR_HEDM[$i]', MAR_HENM='$MAR_HENM[$i]', MAR_HORMIE='$MAR_HORMIE[$i]', MAR_HEDMI='$MAR_HEDMI[$i]', MAR_HENMI='$MAR_HENMI[$i]', 
              MAR_HORJUE='$MAR_HORJUE[$i]', MAR_HEDJ='$MAR_HEDJ[$i]', MAR_HENJ='$MAR_HENJ[$i]', MAR_HORVIE='$MAR_HORVIE[$i]', MAR_HEDV='$MAR_HEDV[$i]', 
              MAR_HENV='$MAR_HENV[$i]', MAR_HORSAB='$MAR_HORSAB[$i]', MAR_HEDS='$MAR_HEDS[$i]', MAR_HENS='$MAR_HENS[$i]', MAR_HORDOM='$MAR_HORDOM[$i]', 
              MAR_HEDD='$MAR_HEDD[$i]', MAR_HEND='$MAR_HEND[$i]'   
              WHERE MAR_CODTRA = '$codigoTrab[$i]' AND (MAR_DESDE >= '$fechaDsd[$i]' AND MAR_HASTA <= '$fechaHst[$i]')"

     
    } 
    echo 
$query
    
$conexion->ejecutarQuery($query); 
Tienes que ejecutar la consulta en cada paso del bucle.
Código PHP:
for ($i 0$i sizeof($codigoTrab); $i++) { 
    
$query="UPDATE nmmarcacion SET MAR_HORLUN='$MAR_HORLUN[$i]', MAR_HEDL='$MAR_HEDL[$i]', MAR_HENL='$MAR_HENL[$i]', MAR_HORMAR='$MAR_HORMAR[$i]', 
              MAR_HEDM='$MAR_HEDM[$i]', MAR_HENM='$MAR_HENM[$i]', MAR_HORMIE='$MAR_HORMIE[$i]', MAR_HEDMI='$MAR_HEDMI[$i]', MAR_HENMI='$MAR_HENMI[$i]', 
              MAR_HORJUE='$MAR_HORJUE[$i]', MAR_HEDJ='$MAR_HEDJ[$i]', MAR_HENJ='$MAR_HENJ[$i]', MAR_HORVIE='$MAR_HORVIE[$i]', MAR_HEDV='$MAR_HEDV[$i]', 
              MAR_HENV='$MAR_HENV[$i]', MAR_HORSAB='$MAR_HORSAB[$i]', MAR_HEDS='$MAR_HEDS[$i]', MAR_HENS='$MAR_HENS[$i]', MAR_HORDOM='$MAR_HORDOM[$i]', 
              MAR_HEDD='$MAR_HEDD[$i]', MAR_HEND='$MAR_HEND[$i]'   
              WHERE MAR_CODTRA = '$codigoTrab[$i]' AND (MAR_DESDE >= '$fechaDsd[$i]' AND MAR_HASTA <= '$fechaHst[$i]')"
;
    echo 
$query
    
$conexion->ejecutarQuery($query);

  #5 (permalink)  
Antiguo 30/01/2012, 13:31
 
Fecha de Ingreso: enero-2011
Ubicación: Maracaibo
Mensajes: 179
Antigüedad: 13 años, 3 meses
Puntos: 2
Respuesta: Actualizar varios Registros

Urdaris_Nox, Pintix muchas gracias por sus respuestas y por la rapidez.

Modifique la consulta como me dijo Pintix y me funcion perfectamente, ahora si me actualiza dependiendo de la cantidad que tenga $codigoTrab.

Saludos y un millon de gracias

Etiquetas: mysql
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 11:04.