Foros del Web » Programando para Internet » PHP »

bucle infinitio varios updates

Estas en el tema de bucle infinitio varios updates en el foro de PHP en Foros del Web. hago una select 8 productos relacionados con una categoría concreta nombre producto es un string podría ser el producto pelota y ha 8 diferentes tipos ...
  #1 (permalink)  
Antiguo 01/11/2011, 11:35
 
Fecha de Ingreso: febrero-2009
Mensajes: 443
Antigüedad: 15 años, 2 meses
Puntos: 1
bucle infinitio varios updates

hago una select 8 productos relacionados con una categoría concreta
nombre producto es un string podría ser el producto pelota y ha 8 diferentes tipos de pelotas estoy utilizando count para cuando le lleguen las ocho pelotas diferentes ya no entre en el while pero hay algo que no hago bien porque el bucle no para nunca

teóricamente tendría que hacer 8 updates aunque algunos no cambiarían ningún valor, lo que si estoy seguro es que el update esta bien porque con update me funciona, y en la base de datos también funciona

estaría comparando un string con un int a lo mejor es este el problema, pero si comparo un string con strint pelota con pelota cuando sabe que tiene que parar el bucle

si hago echo count($_GET['nombre_producto');
devuelve 1 pero tendría que devolver 8, no entiendo porque solo le llega 1 en la url lo enviá 8 productos y los 8 precios

Código PHP:
Ver original
  1. $num = 1;
  2.     while($_GET['nombre_producto'] <= count($_GET['nombre_producto']) ){
  3.         $query = 'UPDATE productos SET precio_producto=' .  $_GET['precio_producto'] . ' WHERE nombre_producto=  \'' . $_GET['nombre_producto'] . '\';';
  4.        
  5.         mysqli_query($link,$query) or die (mysqli_error($link));;
  6.         echo $query.'</br>';
  7.         $num++;
  8.     }
  #2 (permalink)  
Antiguo 01/11/2011, 11:41
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: bucle infinitio varios updates

¿La variable $_GET['nombre_producto'] es un array?

Porque de otra forma no tiene sentido todo lo que haces, pues count() sirve para arrays, de igual forma dentro del bucle usas la misma variable siempre y por ende jamás funcionará así.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 01/11/2011, 11:44
 
Fecha de Ingreso: febrero-2009
Mensajes: 443
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: bucle infinitio varios updates

como tendría que hacerlo?
ya e sacado el count
  #4 (permalink)  
Antiguo 01/11/2011, 11:49
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: bucle infinitio varios updates

Vuelvo a preguntar, ¿la variable que recibes por GET es un array?

Sería interesante que nos muestres como estás pasando dicha variable para poder orientarte mejor.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 01/11/2011, 12:15
 
Fecha de Ingreso: febrero-2009
Mensajes: 443
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: bucle infinitio varios updates

en el caso de la primero select de momento tengo por ejemplo caso pero cuando funciona
ira $_GET['nombre_producto_pc']

tanto categorías como productos tiene
nombre_producto _pc o _usuario
el primero es sin acentos con guiones bajos
y el otro es como lo escribiría y leería una persona

después de <= siempre variara este valor en función del producto y la categoría relacionados entre si, o tendría de hacer un count en la select

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
Código PHP:
Ver original
  1. <?php echo "<META HTTP-EQUIV='refresh' CONTENT='20; URL=$PHP_SELF'>";?>
  2.     </head>
  3.     <body>
  4.   <?php
  5.  
  6.     $hostname="***********";
  7.     $user="********";
  8.     $password="*******";
  9.     $database="*********************";
  10.     $link = mysqli_connect($hostname,$user,$password,$database);
  11.     mysqli_query ($link,'SET NAMES "utf8" ');
  12.     $query_categoria_select ="
  13.     SELECT
  14.     categories.nombre_categoria_usuario,
  15.     productos.nombre_producte_pc,
  16.     productos.nombre_producto_usuario,
  17.     productos.ruta_foto_pequeña,
  18.     productos.precio_producto
  19.     FROM productos INNER JOIN categorias
  20.     ON productos.categorias_nombre_categoria_pc = categories.nombre_categoria_pc
  21.     WHERE categories.nombre_categoria_pc = \"" .  casa . "\";";
  22.     $result_categoria_select = mysqli_query($link,$query_categoria_select);
  23.    
  24.  
  25.  ?>
  26.  
  27.     <form action="precios.php" method="get">
  28.     <table>
  29.     <tr>  
  30.     <?php
  31.    
  32.     while($row_categoria_select = mysqli_fetch_array($result_categoria_select, MYSQLI_ASSOC))
  33.     {
  34.     ?> 
  35.         <td><?php echo $row_categoria_select['nombre_producto_usuario']?></td>
  36.         <td><?php echo $row_categoria_select['ruta_foto_pequeña']?></td>
  37.         <td><input type="hidden" name="nombre_producte_pc"  value="<?php echo $row_categoria_select['nom_producto_pc']?>"></td><br/></br/>
  38.         <td><input type="text" name="precio_producto" size="5" maxlength="5" value="<?php echo  $row_categoria_select['precio_producto']?>"></td><br/>
  39.     <?php
  40.     }
  41.     ?> 
  42.     </tr>
  43.  </table>
  44.         <input type="submit" name="submit" value="submit" />  
  45.    
  46.   </form>
  47.  
  48.  
  49.   <?php
  50.  
  51.        
  52.    
  53.     $hostname="*******";
  54.     $user="********";
  55.     $password="******";
  56.     $database="*********";
  57.     $link = mysqli_connect($hostname,$user,$password,$database);
  58.     mysqli_query ($link,'SET NAMES "utf8" ');
  59.    
  60.     echo count($_GET['nombre_producto_pc']);
  61.     /*$num = 1;
  62.     while($_GET['nombre_producto_pc'] < count($_GET['nombre_producto_pc']) ){*/
  63.         $query = 'UPDATE productos SET precio_producto=' .  $_GET['precio_producto'] . ' WHERE nombre_producto_pc=  \'' . $_GET['nombre_producto_pc'] . '\';';
  64.        
  65.         mysqli_query($link,$query) or die (mysqli_error($link));;
  66.         echo $query.'</br>';
  67.         /*$num++;
  68.     }*/
  #6 (permalink)  
Antiguo 01/11/2011, 12:17
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: bucle infinitio varios updates

Para agrupar los elementos como array debes hacerlo así:
Código HTML:
<input name="nombre[]">
<input name="otro_nombre[]"> 
Así cuando lo recibas en PHP ya será un array, que puedes iterar con foreach()
Código PHP:
foreach ($_GE['nombre'] as $uno) {
  
// ...

__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 02/11/2011, 08:19
 
Fecha de Ingreso: febrero-2009
Mensajes: 443
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: bucle infinitio varios updates

esto no funciona

name="
Código PHP:
Ver original
  1. <?php nombre_producto_pc[]?>
"


Parse error: syntax error, unexpected '[' in /var/www/html/php/precios/precios.php on line 42


con respecto al $uno de donde saco esta variable lo digo de donde tiene que coger la condición
Código PHP:
Ver original
  1. foreach ($_GET['nombre_producto_pc'] as $uno) {
  2.   // ...
  3. }
  #8 (permalink)  
Antiguo 02/11/2011, 09:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: bucle infinitio varios updates

No es necesario que lo hagas con <?php echo, simplemente pon el nombre directo:
Código HTML:
Ver original
  1. <input type="text" name="productos[]" />

Saludos.
  #9 (permalink)  
Antiguo 08/11/2011, 08:03
 
Fecha de Ingreso: febrero-2009
Mensajes: 443
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: bucle infinitio varios updates

gracias GatorV y pateketrueke

con respecto el tema del <input type="text" name="productos[]" /> sirve para almacenar mas de un valor en un array no, en este caso seria un array de una dimensión string, no domino muy bien los array ni el php en general ?

por la url sale
http://www.localhost/php/precio.php?nombre_producto_pc[]=lapiz=0.20&nombre_producto_pc[]=carpeta&precio_producto_kg=5.00&submit=submit



Código HTML:
Ver original
  1. <td><input type="hidden" name="nombre_producto_pc[]"  value="<?php echo $row_categoria_select['nombre_producto_pc']?>"></td><br/></br/>

ahora el problema lo tengo en el update me devuelve array tendría que devolver el nombre

Código PHP:
Ver original
  1. $query = 'UPDATE productos SET precio_producto_kg=' .  $_GET['precio_producto_kg'] . ' WHERE nombre_producto_pc=  \'' . $_GET['nombre_producto_pc'] . '\';';

Última edición por albertrc; 08/11/2011 a las 08:13
  #10 (permalink)  
Antiguo 08/11/2011, 09:49
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: bucle infinitio varios updates

Ahora es donde debes de hacer lo que te dijo @pateketrueke, rescatar cada elemento usando un foreach y realizando el update correspondiente.

Saludos.
  #11 (permalink)  
Antiguo 08/11/2011, 11:17
 
Fecha de Ingreso: febrero-2009
Mensajes: 443
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: bucle infinitio varios updates

ya me ha salido espero que si alguien tiene algún problema similar pueda solucionarlo

haces la select
esta funcion sirve para saber cuantas filas te devuelve la select por exemplo 8 y esto lo vamos a utilizar en el for como contador
Código PHP:
Ver original
  1. $contar_numero_filas_select = mysqli_num_rows($result);


<td><input type="hidden" name="nombre_producto_pc[]" value="<?php echo $row_categoria_select['nombre_producto_pc']?>"></td><br/></br/>
<td><input type="text" name="precio_producte_kg[]" size="5" maxlength="5" value="<?php echo $row_categoria_select['precio_producto_kg']?>"> €</td>

la variable $i la cambiare por ejemplo por $hacer_varios_updates

Código PHP:
Ver original
  1. for($i = 0;$i < $contar_numero_filas_select; $i++){
  2.         echo "i:". $i ."<br/>";
  3.         $query = 'UPDATE productos SET precio_producto_kg=' .  $precio_producto_kg[$i] . ' WHERE nombre_producto_pc=  \'' . $nombre_producto_pc[$i] . '\';';
  4.         $result = mysqli_query($link,$query); /*or die (mysqli_error($link));*/
  5.         echo $query. '</br>';
  6.         echo $result. '</br>';
  7.         /*mysqli_query($link,$query) or die (mysqli_error($link));;*/
  8.         /*echo $query.'</br>';*/
  9.     }

Última edición por albertrc; 08/11/2011 a las 11:23
  #12 (permalink)  
Antiguo 08/11/2011, 15:52
 
Fecha de Ingreso: febrero-2009
Mensajes: 443
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: bucle infinitio varios updates

aunque ya funciona tengo una duda respecto con lo que hace referencia a pateketrueke

----------------------------------------------------------------------------------------------
Vuelvo a preguntar, ¿la variable que recibes por GET es un array?

Sería interesante que nos muestres como estás pasando dicha variable para poder orientarte mejor.
-------------------------------------------------------------------------------------------------------------------



cuando pones esta frase con signo de interrogación normalmente solo llega por get, post, session o cookie y todos son array o a que te refieres, cuando me haces esta pregunta,
y también se pude pasar por formulario y por defecto ninguno es array
type = "text | password | checkbox | radio | submit | reset |
file | hidden | image | button


y con respecto $contar_numero_filas_select = mysqli_num_rows($result); que hablo con el penúltimo pregunta del foro, o se podría solucionar de otra forma lo del for para hacerl el contador

Última edición por albertrc; 08/11/2011 a las 16:11

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