Foros del Web » Programando para Internet » PHP »

UPDATE varios registros de una columna

Estas en el tema de UPDATE varios registros de una columna en el foro de PHP en Foros del Web. Saludos, Quisiera su orientación frente a este inconveniente... tengo un formulario de la siguiente manera: Formulario: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código HTML: Ver original < form class ...
  #1 (permalink)  
Antiguo 26/05/2012, 13:45
Avatar de javiandgo  
Fecha de Ingreso: septiembre-2010
Ubicación: Cumaral-Meta, Colombia
Mensajes: 457
Antigüedad: 13 años, 7 meses
Puntos: 55
Pregunta UPDATE varios registros de una columna

Saludos,

Quisiera su orientación frente a este inconveniente... tengo un formulario de la siguiente manera:

Formulario:

Código HTML:
Ver original
  1. <form class="settings" method="post">
  2.     <div class="module">
  3.     <?php  ?>
  4.         <h3 class="site"><span>Opciones Generales</span></h3>
  5.         <div class="mods">
  6.                 <div>
  7.                     <label>Nombre del sitio:</label>
  8.                     <input type="text" name="site_name" value="<?php echo sitename; ?>">
  9.                 </div>
  10.                 <div>
  11.                     <label>Descripción corta:</label>
  12.                     <textarea name="site_desc"><?php echo sitedesc; ?></textarea>
  13.                 </div>
  14.                 <div>
  15.                     <label>Palabras clave:</label>
  16.                     <textarea name="site_keywords"><?php echo keys; ?></textarea>
  17.                 </div>
  18.                 <div>
  19.                     <label>Copyright:</label>
  20.                     <input type="text" name="site_copy" value="<?php echo copyr; ?>">
  21.                 </div>
  22.         </div>
  23.     </div>
  24.    
  25.     <div class="module">
  26.         <h3 class="proyect"><span>Contacto</span></h3>
  27.         <div class="mods">
  28.                 <div>
  29.                     <label>E-mail:</label>
  30.                     <input type="text" name="site_email" value="<?php echo siteemail; ?>">
  31.                 </div>
  32.                 <div>
  33.                     <label>Telefono:</label>
  34.                     <input type="text" name="site_phone" value="<?php echo phone; ?>">
  35.                 </div>
  36.                 <div>
  37.                     <label>Celular:</label>
  38.                     <input type="text" name="site_movil" value="<?php echo movil; ?>">
  39.                 </div>
  40.                 <div>
  41.                     <label>Dirección:</label>
  42.                     <textarea name="site_address"><?php echo address; ?></textarea>
  43.                 </div>
  44.         </div>
  45.     </div>
  46. </form>

Recojo los datos del formulario en un array con el siguiente código:


Código PHP:
Ver original
  1. if(isset($_POST['Submit'])) {
  2.  
  3. $modify = array (
  4.     $_POST['site_name'],
  5.     $_POST['site_desc'],
  6.     $_POST['site_keywords'],
  7.     $_POST['site_copy'],
  8.     $_POST['site_email'],
  9.     $_POST['site_phone'],
  10.     $_POST['site_movil'],
  11.     $_POST['site_address']
  12. );
  13.  
  14. ?>

Lo que necesito es pasar esos valores a diferentes filas de una misma columna.
La tabla tiene la siguiente estructura:

Código table:
Ver original
  1. set_id    set_name            set_value
  2. 1           site_name               el nombre del sitio
  3. 2           site_description        la descripcion del sitio
  4. 4           site_keywords           las keywords
  5. 5           copyright               el copyright
  6. 6           site_email              [email protected]
  7. 7           phone                   555555555
  8. 8           movil                   333 0322222
  9. 9           address                 la direccion

Intente leer el set_id como un array y montarlos en un bucle for junto con el array del formulario, pero no me funciono....

Declarando un Update para cada registro funciona, pero tendría que hacer un update para las 9 filas.

Código PHP:
Ver original
  1. $id_options = mysql_query ("SELECT set_id FROM settings");
  2.     $idoption=mysql_fetch_array($id_options);
  3.  
  4.     for ($i=0; $i<2; $i++) {
  5.     $save_db = mysql_query("UPDATE settings SET set_value='".$modify[$i]."' WHERE set_id=".$idoption[$i]);

Agradezco su ayuda con este inconveniente
  #2 (permalink)  
Antiguo 26/05/2012, 14:00
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: UPDATE varios registros de una columna

Sea como sea, no te vas a escapar de los 9 updates.
Solo señalar que WHERE set_id=".$idoption[$i] es confiar mucho en el orden del array $modify. Podrias montar el where a partir de set_name, entonces asegurabas el tiro.

Saludos.
  #3 (permalink)  
Antiguo 26/05/2012, 14:06
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: UPDATE varios registros de una columna

Por supuesto que se puede "escapar" de los 9 updates, si ya tienes los ID's (set_id) a los cuales les quieres hacer el update solo queda hacer lo siguiente...

Código PHP:
Ver original
  1. $sql = 'UPDATE settings SET set_value="'.$valor.'" WHERE set_id IN ('.implode(',',$arrayID).')';
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #4 (permalink)  
Antiguo 26/05/2012, 14:07
Avatar de javiandgo  
Fecha de Ingreso: septiembre-2010
Ubicación: Cumaral-Meta, Colombia
Mensajes: 457
Antigüedad: 13 años, 7 meses
Puntos: 55
Respuesta: UPDATE varios registros de una columna

Cita:
Iniciado por oscartt67 Ver Mensaje
Sea como sea, no te vas a escapar de los 9 updates.
Solo señalar que WHERE set_id=".$idoption[$i] es confiar mucho en el orden del array $modify. Podrias montar el where a partir de set_name, entonces asegurabas el tiro.

Saludos.
No entiendo muy bien lo que dices, disculpa pero no soy muy hábil con php...

Me recomiendas entonces que haga los 9 update por separado??
Para eso había intentado esto, pero pense que se podría mejorar la forma de hacerlo
Código PHP:

mysql_query
("UPDATE settings SET set_value='".$_POST['site_name']."' WHERE set_id=1");

mysql_query("UPDATE settings SET set_value='".$_POST['site_desc']."' WHERE set_id=2");

// así sucesivamente 
  #5 (permalink)  
Antiguo 26/05/2012, 14:18
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: UPDATE varios registros de una columna

nemutagk: en el código que dejas, va a insertar el mismo $valor en todos los id de $arrayid, y no es el caso. Corrígeme si me equivoco.

Código PHP:
$sql 'UPDATE settings SET set_value="'.$valor.'" WHERE set_id IN ('.implode(',',$arrayID).')'
javiandgo: espero a responderte a ver si nemutagk responde y lleva razón.
  #6 (permalink)  
Antiguo 26/05/2012, 14:40
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: UPDATE varios registros de una columna

mmm, veo que mal interprete lo que se queria hacer, pero tampoco es necesario hacer "manualmente" los "update", de hecho ya lo tienes hecho pero mal implementado...

Código PHP:
Ver original
  1. $id_options = mysql_query ("SELECT set_id,set_name FROM settings");
  2. while($idoption=mysql_fetch_assoc($id_options)) {
  3.      $sql = 'UPDATE set_name SET set_value = "'.$_POST[$idoption['set_name']].'" WHERE set_id = '.$idoption['set_id'];
  4. }

PD: efectivamente, el código que originalmente publique modificaría con un mismo valor todos los registros dentro del array $arrayID
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #7 (permalink)  
Antiguo 26/05/2012, 14:46
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: UPDATE varios registros de una columna

ok. Coincidimos.

Respecto a la propuesta de utilizar setname:
Parto de la premisa que en $_POST no recibes el id (que seria lo óptimo), de que solo va a existir en la tabla settings una fila con site_name, un site_desc,....


Código PHP:
$modify = array (
    
'site_name'=>$_POST['site_name'],
    
'site_desc'=>$_POST['site_desc'],
    
'site_keywords'=>$_POST['site_keywords'],
    
'site_copy'=>$_POST['site_copy'],
    
'site_email'=>$_POST['site_email'],
    
'site_phone'=>$_POST['site_phone'],
    
'site_movil'=>$_POST['site_movil'],
    
'site_address'=>$_POST['site_address']
);

foreach(
$modify as $setname=>$value){
     
mysql_query("UPDATE settings SET set_value='$value' WHERE set_name='$setname'");

Saludos.
  #8 (permalink)  
Antiguo 26/05/2012, 14:52
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: UPDATE varios registros de una columna

coincido, aunque es redundante tanto usar un array extra como usar la misma tabla para generar el sql, en todo caso siguiendo tu ejemplo...

Código PHP:
Ver original
  1. foreach($_POST as $setname=>$value){
  2.      mysql_query("UPDATE settings SET set_value='$value' WHERE set_name='$setname'");
  3. }
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #9 (permalink)  
Antiguo 26/05/2012, 14:55
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: UPDATE varios registros de una columna

Si, lo que dices seria correcto en el caso que en $_POST solo viajen los datos de dichos campos, pero no lo sabemos.
Saludos.
  #10 (permalink)  
Antiguo 26/05/2012, 15:09
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: UPDATE varios registros de una columna

javiandgo:
para que te quede claro porqué te propongo filtrar por set_name... ya te ha pasado lo que te podia pasar: eliminaste el registro con id=3, con lo que no te va a coincidir con la variable $i, y se te van a correr todos los valores.

Cita:
set_id set_name set_value
1 site_name el nombre del sitio
2 site_description la descripcion del sitio
4 site_keywords las keywords
5 copyright el copyright
6 site_email [email protected]
7 phone 555555555
8 movil 333 0322222
9 address la direccion
Salud!
  #11 (permalink)  
Antiguo 26/05/2012, 15:19
Avatar de javiandgo  
Fecha de Ingreso: septiembre-2010
Ubicación: Cumaral-Meta, Colombia
Mensajes: 457
Antigüedad: 13 años, 7 meses
Puntos: 55
Respuesta: UPDATE varios registros de una columna

Cierto... y de hecho no me había fijado en eso... agradezco mucho su ayuda me fue de gran utilidad.

ya implemente la forma por set_name y funciona perfecto, a la final debo hacer un refresh para que me muestre los cambios después de darle al enviar....

Les agradezco a los dos por su tiempo y sus conocimientos pasare a estudiar un poco más el código para entenderlo bien jejejeje

muchas gracias
  #12 (permalink)  
Antiguo 26/05/2012, 15:25
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: UPDATE varios registros de una columna

Cualquier duda, aquí estamos.

Etiquetas: columna, formulario, mysql, registro, registros, sql, tabla, update
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 00:33.