Foros del Web » Programando para Internet » PHP »

:::problema::: Actualizar registros dentro de un do while

Estas en el tema de :::problema::: Actualizar registros dentro de un do while en el foro de PHP en Foros del Web. estoy desarrollando un sistema y tengo problemas en un documento, en este se consultan todos los usuarios con la cuenta desactivada por medio de un ...
  #1 (permalink)  
Antiguo 04/06/2010, 11:22
 
Fecha de Ingreso: diciembre-2006
Mensajes: 12
Antigüedad: 17 años, 4 meses
Puntos: 0
:::problema::: Actualizar registros dentro de un do while

estoy desarrollando un sistema y tengo problemas en un documento, en este se consultan todos los usuarios con la cuenta desactivada por medio de un repetir región...

lo que quiero hacer es que en el mismo do while de los registro se pueda actualizar...

lo que funciona: hace las consultas de los registros perfectamente.
lo que NO funciona: solo esta actualizando el ultimo registro y necesito que actualice una linea por ves...


mi codigo es este:

Código PHP:
<form action="<?php echo $editFormAction?>" id="form1" name="form1" method="POST">
       <?php do { ?>
          <table width="899" border="0" align="center">
            <tr bgcolor="#E6F0FF" class="azul_claro3">
              <td width="60" align="center" valign="middle" class="Estilo2"><?php echo $row_clientes['id']; ?></td>
              <td width="150" align="center" valign="middle" class="Estilo2"><?php echo $row_clientes['codclient']; ?></td>
              <td width="250" align="center" valign="middle" class="Estilo2"><?php echo $row_clientes['empresa']; ?></td>
              <td width="150" align="center" valign="middle" class="Estilo2"><?php echo $row_clientes['fecha']; ?></td>
              <td align="center" valign="middle" class="Estilo2"><p>
                <input name="id" type="text" id="id" value="<?php echo $row_clientes['id']; ?>" size="3" class="Estilo2"/>
                <select name="nivel" id="nivel" class="Estilo2">
                  <option value="0" <?php if (!(strcmp(0$row_clientes['nivel']))) {echo "selected=\"selected\"";} ?>>Desactivada</option>
                  <option value="3" <?php if (!(strcmp(3$row_clientes['nivel']))) {echo "selected=\"selected\"";} ?>>Usuario</option>
                </select>
                <input name="guardar2" type="submit" class="Estilo2" id="guardar2" value="Guardar"/>
              <?php echo $updateSQL;?></td>
            </tr>
          </table>

 <?php 
if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
$updateSQL sprintf("UPDATE clientes SET nivel=%s WHERE id=%s",
    
GetSQLValueString($_POST['nivel'], "text"),
    
GetSQLValueString($_POST['id'], "int"));

mysql_select_db($database_system$system);
$Result1 mysql_query($updateSQL$system) or die(mysql_error());
//
}
?>
<?php 
} while ($row_clientes mysql_fetch_assoc($clientes)); ?>
<input type="hidden" name="MM_update" value="form1" />
     </form>
  #2 (permalink)  
Antiguo 04/06/2010, 13:18
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: :::problema::: Actualizar registros dentro de un do while

te recuerdo que los name deben ser únicos, y lo que consigues en tu bucle es poner el mismo para todos los elementos...

¿ahora entiendes porque solo toma el último??

la solución es definir y tratar los elementos como un arreglo, osea...
Código HTML:
<input name="foo[]"/> 
y así entonces, en tu PHP procesas dicho arreglo $_POST['foo'] con un bucle, y bingo!! ;)
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 04/06/2010, 16:31
 
Fecha de Ingreso: diciembre-2006
Mensajes: 12
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: :::problema::: Actualizar registros dentro de un do while

si yo sabia.... yo intente con un código pero ya lo borre porque no me funcionaba nada que era con algo así de $i++ no recuerdo... me puedes explicar un poco como podria usar ese foo[] de verdad estoy lost...


antes de eso lo pobre con <input name="<?php echo id.$id; ?>"/> y igual con el input name de nivel declarando antes <?php $id = $id + 1 ; ?>

para el input name cambia segun la linea PERO le dije echo al $updateSQL;
y me aparece null....

UPDATE clientes SET nivel=NULL WHERE id=NULL
  #4 (permalink)  
Antiguo 04/06/2010, 16:42
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: :::problema::: Actualizar registros dentro de un do while

es sencillo, la notación name[] consigue un arreglo al llegar a PHP...

entonces, iteramos con un ciclo...
Código PHP:
foreach ($_POST['name'] as $key => $value// ... 
donde $key podría ser el ID relacionado, o también el $value
Código PHP:
$sql "DELETE FROM tabla WHERE id = $key"
el HTML necesario es similar a esto
Código HTML:
<input name="var[ID]" value="ID"/> 
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 04/06/2010, 17:08
 
Fecha de Ingreso: diciembre-2006
Mensajes: 12
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: :::problema::: Actualizar registros dentro de un do while

hice lo que me dijistes pero me sale este error... T_T

Warning: Invalid argument supplied for foreach() in D:\\\\.php on line 142 Query was empty

esta es la linea
foreach ($_POST['id'] as $key => $value)
  #6 (permalink)  
Antiguo 04/06/2010, 17:21
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: :::problema::: Actualizar registros dentro de un do while

y si existen los name="id[]" o como tienes el HTML requerido?? ¿segura que has enviado ya el formulario??
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 05/06/2010, 14:08
 
Fecha de Ingreso: diciembre-2006
Mensajes: 12
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: :::problema::: Actualizar registros dentro de un do while

son dos uno es el id
Código HTML:
Ver original
  1. <input name="id" type="text" id="id" value="<?php echo $row_clientes['id']; ?>" size="3" class="Estilo2"/>

y el otro es el nivel

Código HTML:
Ver original
  1. <select name="nivel" id="nivel" class="Estilo2">
  2.                   <option value="0" <?php if (!(strcmp(0, $row_clientes['nivel']))) {echo "selected=\"selected\"";} ?>>Desactivada</option>
  3.                   <option value="3" <?php if (!(strcmp(3, $row_clientes['nivel']))) {echo "selected=\"selected\"";} ?>>Usuario</option>
  4.                 </select>

y tambien esta el boton guardar

Código HTML:
Ver original
  1. <input name="guardar2" type="submit" class="Estilo2" id="guardar2" value="Guardar"/>

lo que no entiendo es si el esta en un do while y dentro de este esta el formulacio los dos input el boton de guardar y el codigo de actualizacion hay mismo no deberia de tener problemas en guardar porq si le digo guardar no deberia guardarse esa sola linea?????
  #8 (permalink)  
Antiguo 05/06/2010, 16:00
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: :::problema::: Actualizar registros dentro de un do while

Cita:
Iniciado por leizahj Ver Mensaje
[...] lo que no entiendo es si el esta en un do while y dentro de este esta el formulacio los dos input el boton de guardar y el codigo de actualizacion hay mismo no deberia de tener problemas en guardar porq si le digo guardar no deberia guardarse esa sola linea?????
precisamente ese es tu error, estas confundiendo un while() de PHP con un formulario en HTML, con lo cual, no son lo mismo...

es cierto que con el bucle puedes crear varios inputs, y todo con sus datos sin problema... pero debes entender -segun tu sabías- que los name deben ser únicos, y tu siempre usas el mismo dentro del bucle...

te pido que reflexiones, revisa el código HTML de tu formulario ya en el navegador.. y verás que varios <input/> comparten el mismo name, ¿es cierto o no?

y esa es la clave del problema, en PHP se traducen esos name a un índice en alguna super-variable como $_POST de modo que siempre sobre-escribe el mismo name, y resulta en el ultimo del formulario siempre...

entiende que PHP se pre-procesa, por tanto una cosa es imprimir un formulario, y otra distinta es procesarlo... no puedes ni siquiera imaginar que puedes hacer ambas cosas en un mismo while() ...

así de sencillo, por favor lee lo que se te comenta.. y usa la notación de array, etc, etc...
Código HTML:
<input name="id[]"/> 
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 06/06/2010, 09:57
 
Fecha de Ingreso: diciembre-2006
Mensajes: 12
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: :::problema::: Actualizar registros dentro de un do while

AUUCCHHHH..!!!!

solucionado pero gracias!!!!

la cosa quedo asi....

Código PHP:
Ver original
  1. <form action="<?php echo $editFormAction; ?>" id="form1" name="form1" method="POST">
  2.        <?php do {   ?>
  3.           <table width="899" border="0" align="center">
  4.             <tr bgcolor="#E6F0FF" class="azul_claro3">
  5.               <td width="60" align="center" valign="middle" class="Estilo2"><?php echo $row_clientes['id']; ?></td>
  6.               <td width="150" align="center" valign="middle" class="Estilo2"><?php echo $row_clientes['codclient']; ?></td>
  7.               <td width="250" align="center" valign="middle" class="Estilo2"><?php echo $row_clientes['empresa']; ?></td>
  8.               <td width="150" align="center" valign="middle" class="Estilo2"><?php echo $row_clientes['fecha']; ?></td>
  9.               <td align="center" valign="middle" class="Estilo2"><p>
  10.                 <input name="id[]" type="text" id="id" value="<?php echo $row_clientes['id']; ?>" size="3" class="Estilo2"/>
  11.                 <select name="nivel[]" id="nivel" class="Estilo2">
  12.                   <option value="0" <?php if (!(strcmp(0, $row_clientes['nivel']))) {echo "selected=\"selected\"";} ?>>Desactivada</option>
  13.                   <option value="3" <?php if (!(strcmp(3, $row_clientes['nivel']))) {echo "selected=\"selected\"";} ?>>Usuario</option>
  14.                 </select>
  15.                 <input name="guardar" type="submit" class="Estilo2" id="guardar" value="Guardar"/>
  16.               <?php //echo $updateSQL;?></td>
  17.             </tr>
  18.           </table>
  19.  
  20.  <?php
  21.  
  22.  
  23. if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
  24.     foreach ($_POST['id'] as $key => $value){
  25. $updateSQL = sprintf("UPDATE clientes SET nivel=%s WHERE id=%s",
  26.     GetSQLValueString($_POST['nivel'][$key], "text"),
  27.     GetSQLValueString($_POST['id'][$key], "int"));
  28.  
  29. mysql_select_db($database_system, $system);
  30. $Result1 = mysql_query($updateSQL, $system) or die(mysql_error());
  31. }}
  32. ?>
  33. <?php } while ($row_clientes = mysql_fetch_assoc($clientes)); ?>
  34. <input type="hidden" name="MM_update" value="form1" />
  35.      </form>

Etiquetas: registros
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 05:34.