Autor Tema: [Problemas] Multi Update por ID's  (Leído 292 veces)

Desconectado judoka

  • PHPero Avanzado
  • ****
  • Mensajes: 255
  • Karma: 4
  • Sexo: Masculino
  • Programando hasta lo mas alto.
    • Ver Perfil
[Problemas] Multi Update por ID's
« en: 03 de Julio de 2011, 01:14:56 am »
Hola PHPeros.
Me encuentro en una situación difícil. Esa típica en la que no se te ocurre nada para hacer lo que quieres hacer.
Os explico lo que necesito hacer para que me iluminéis un poquito:

Lo que necesito es justo lo que hace la administración de un foro, editar categorias(boards) pero todas a la vez.
Es decir:
-Tengo una tabla con un while mostrando todas las categorias de una tabla en mi BD.
-Uno de los campos es `orderid`, sirve para lo que dice su nombre (decir la posición del orden en el que aparecen) y se muestra en un inputbox así:

	
  <
input type="text" name="Orderid" value="&#39;.$categoria[&#39;orderid&#39;].&#39;" style="width:18px;" maxlength="2"/>


Quiero que cuando envie el formulario. Reconozca cada uno de los inputs con sus valores y haga un UPDATE a la categoria que toca.
Es decir:
Código: [Seleccionar]
-CATEGORIA1 => orderid 1
-CATEGORIA2 => orderid 2
-CATEGORIA3 => orderid 3
Quiero que si los dejo así:
Código: [Seleccionar]
-CATEGORIA1 => orderid 3
-CATEGORIA2 => orderid 1
-CATEGORIA3 => orderid 2

Se introduzca correctamente en sus filas de la BD.
¿Problemas? Pues como los muestro con un while, no tengo forma de numerarlos.

¿Mi solución chapucera?
Mostrar con un for:

	
  for (
$i $i <= $itot $i ++) {
	
   echo&
#39;<input type="text" name="Orderid&#39;.$n.&#39;" value="&#39;.$categoria[&#39;orderid&#39;].&#39;" style="width:18px;" maxlength="2"/>&#39;;
	
  }

y al enviar el formulario introducirlos así:

	
  
$menucat=mysql_query("SELECT * FROM menucat ORDER BY `id` ASC"); //Selecciono la tabla de las categorias
	
  
$itot=mysql_num_rows($menucat); //Averiguo cuantos registros (categorias) contiene
	
  for (
$i $i <= $itot $i ++) { //Repite el bucle tantas veces como registros contenga la tabla
	
   
$editararajustes "UPDATE menucat SET orderid=&#39;".$_POST[&#39;Orderid&#39;.$i]."&#39; WHERE id=&#39;".$i."&#39; ";  //Hago UPDATE fila por fila
	
  }
          if(
mysql_query...... bla bla bla

Las tabla `menucat`contiene 3 campos:
1.-id => int, 2 //Se refiere al identificador de cada categoria
2.-orderid => int, 2 //Orden en el que se muestra la categoria Y LO QUE INTENTO MODIFICAR
3.-name => varchar, 35 //Nombre de la categoria

¿Alguna sugerencia mejor para conseguir mi meta?
¿Alguien me ayuda a corregir el código? (No me da ningún error, simplemente no hace lo que quiero que haga)


Comunidad PHPeros

[Problemas] Multi Update por ID's
« en: 03 de Julio de 2011, 01:14:56 am »

Desconectado judoka

  • PHPero Avanzado
  • ****
  • Mensajes: 255
  • Karma: 4
  • Sexo: Masculino
  • Programando hasta lo mas alto.
    • Ver Perfil
Re:[Problemas] Multi Update por ID's
« Respuesta #1 en: 04 de Julio de 2011, 01:02:47 am »
Listo, ya lo he conseguido y ahora mismo me siento dios (tranquilos, me durará 5 minutos solo).
Lo he conseguido así:
FORM:

	
  <
input type="hidden" name="id&#39;.$n.&#39;" value="&#39;.$categoria[&#39;id&#39;].&#39;"//Con esto obtengo el ID de las categorias
	
  <
input type="text" name="Orderid&#39;.$n.&#39;" value="&#39;.$categoria[&#39;orderid&#39;].&#39;" style="width:22px;" maxlength="2"/> //Con esto obtengo el orden elegido

Y la comprobación del form:

	
  if(isset(
$_POST[&#39;Editar&#39;])){
	
   
$n=1;
           
$menucat=mysql_query("SELECT * FROM menucat ORDER BY `id` ASC");
	
  
$itotal=mysql_num_rows($menucat);
	
  while(
$categoria=mysql_fetch_array($menucat)){
	
   
$orderid=$_POST[&#39;Orderid&#39;.$n];
	
   if(
$orderid >= $itotal){
	
    
$orderid=$itotal;
	
   }
	
   
$editararajustes mysql_query("UPDATE menucat SET orderid=&#39;".$orderid."&#39; WHERE id=&#39;".$_POST[&#39;id&#39;.$n]."&#39;");
	
   
$n++;
	
  
	
  }
	
  
$menucat=mysql_query("SELECT * FROM menucat ORDER BY `orderid` ASC");
	
  
$categoria=mysql_fetch_array($menucat);
	
   echo&
#39;<script>window.history(0);</script>
	
    <
div class="msg msg-ok"><p>Se ha editado todo correctamente.</p></div>
	
   &
#39;;
	
 }


Cerrad el post por favor.