Foros del Web » Programando para Internet » PHP »

Problema para actualizar datos con un while

Estas en el tema de Problema para actualizar datos con un while en el foro de PHP en Foros del Web. Buenas buenas!! :) Espero me puedan ayudar con la siguiente situación: Tengo un formulario donde se aprecian los datos de una venta, y se muestra ...
  #1 (permalink)  
Antiguo 02/11/2013, 13:54
 
Fecha de Ingreso: agosto-2009
Ubicación: Venezuela
Mensajes: 82
Antigüedad: 14 años, 8 meses
Puntos: 0
Problema para actualizar datos con un while

Buenas buenas!! :) Espero me puedan ayudar con la siguiente situación:

Tengo un formulario donde se aprecian los datos de una venta, y se muestra el codigo de venta, el producto vendido, la cantidad y el precio. Estoy probando con tres productos por lo tanto mi tabla me muestra 3 registros con el mismo codigo de venta, y los respectivos datos de los prductos. Resulta que debo dejar abierta la opcion d editar la cantidad y para eso tengo el siguiente formulario:

Código HTML:
<form action="javascript: fn_modificar();" method="post" name="frm_per" id="frm_per">
<input type="hidden" id="id" name="id" value="<?=$_POST['codigo_venta']?>" />
<table>
		<tr id="tr_<?=$rs_per['codigo_venta']?>">
			<td><?=$rs_per['codigo_venta']?></td>
			<td><input type="hidden" name="idp" id="idp" value="<?=$otro['id']?>"><?=$namepro?></td>
			<td><input type="text" name="cantidad" size="10" value="<?=$rs_per['cantidad']?>"></td>
            <td><?=$rs_per['precio']?></td>
        </tr>
        <td colspan="2">
            <input type="submit" value="Modificar" name="modificar">
			<input name="cancelar" type="button" id="cancelar" value="Cerrar" onclick="fn_cerrar();" />
        </td>
</table>
</form> 
Hasta ahi todo bien, pero si edito la cantidad de los tres productos, solamente en mi base de datos (en mysql) se modifica el ultimo registro. Aqui mi archivo php con la sentencia sql:

Código PHP:
<?php
    
require("../sesion/conexion.php");
    
    
$cuenta=mysql_query("SELECT count(*) FROM detalle_venta where codigo_venta='$_POST[id]'");
    
$resultado mysql_result($cuenta,0);
    
    
$i=1;
    while (
$i <= $resultado) {
        
$strsql"UPDATE detalle_venta SET cantidad='$_POST[cantidad]' WHERE id='$_POST[idp]'";
        
$result=mysql_query($strsql);
                
$i++;
        }
?>
En mi ejemplo son 3 registros y deberia meterse en el ciclo 3 veces pero nose porq solo modifica el ultimo registro. Les agradeceria mucho su ayuda please!!

Última edición por orw28; 02/11/2013 a las 14:06
  #2 (permalink)  
Antiguo 03/11/2013, 08:47
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 para actualizar datos con un while

Si tienes tres formularios solo se va a enviar uno, no puedes enviar tres formularios, y si los tres formularios tienen los mismos nombres de campo peor aún.

Para verificar lo que estás recibiendo has esto al inicio de tu script que recibe los datos:
Código PHP:
var_dump($_POST); 
¿Vienen ahí los datos de tus tres formularios?

La idea, es que si quieres recibir múltiples valores uses un único formulario y la notación de array.
Código HTML:
<input name="multi_id[99]" />
<input name="multi_id[1]" />
<input name="multi_id[3548]" /> 
Y así, al recibir los datos ya tienes varios en vez de el mismo siempre.

Consulta el manual: http://www.php.net/variables.external
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 03/11/2013, 09:18
 
Fecha de Ingreso: agosto-2009
Ubicación: Venezuela
Mensajes: 82
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Problema para actualizar datos con un while

Hola! No entendi lo que me dijiste de los tres formularios, tengo solo uno que es este:

Código HTML:
<form action="javascript: fn_modificar();" method="post" name="frm_per" id="frm_per"> 
Y dentro de él tengo 4 campos:

Código HTML:
<td><?=$rs_per['codigo_venta']?></td>
<td><input type="hidden" name="idp" id="idp" value="<?=$otro['id']?>"><?=$namepro?></td>
<td><input type="text" name="cantidad" size="10" value="<?=$rs_per['cantidad']?>"></td>
<td><?=$rs_per['precio']?></td> 
3 de ellos solo muestran info y el campo cantidad es el campo editable y tiene como value el id del producto relacionado a esa cantidad...

Creo q pudiste confundir lo q dije d los 3 registros con 3 form jeje. Quise decir q estoy probando con 3 productos en mi bd pero solo actualiza uno :(

Ah y probe lo que me dijiste:

Para verificar lo que estás recibiendo has esto al inicio de tu script que recibe los datos:

var_dump($_POST);

Y solo me muestra los datos del ultimo registro.. Porqueee???

Ayudenme please!
  #4 (permalink)  
Antiguo 03/11/2013, 10:02
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 para actualizar datos con un while

Bueno, tu lo has dicho, tienes 1 campo editable para un sólo registro, si estuvieras tratando de editar tres registros de tu BD tendrías entonces 3 campos editables, ¿o no?

En tu formulario no se entiende por ninguna parte como es que haces para mostrar 3 campos editables, sencillamente no los hay, así que no esperes afectar 3 cosas que no existen.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 03/11/2013, 10:36
 
Fecha de Ingreso: agosto-2009
Ubicación: Venezuela
Mensajes: 82
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Problema para actualizar datos con un while

Disculpa, q tonteria, se me olvido poner el while, ups!.. Lo q pasa es que resumi el codigo para mostrar solo lo necesario y se entendiera y olvidé esribir el while que me imprime los 3 registros(q uso como ejemplo), cada uno con el campo "Cantidad" editable.. Sorry!!!

Código HTML:
<form action="javascript: fn_modificar();" method="post" name="frm_per" id="frm_per">
<input type="hidden" id="id" name="id" value="<?=$_POST['codigo_venta']?>" />
<table>
        <tr>
	<th>Nro de Venta</th>
        <th>Producto</th>
	<th>Cantidad</th>
	<th>Precio/Unidad</th>
        </tr> 
Código PHP:
    <?php
        
while ($rs_per $paging->fetchResultado()){
        
$cod=$rs_per['codigo_venta'];
        
$prod=$rs_per['id'];

        
$producto=mysql_query("SELECT * FROM productos where id='$prod'");
        
$otro=mysql_fetch_array($producto);
        
$namepro=$otro['nombre_produc'];
        
$idprod=$otro['id'];

    
?>
Código HTML:
<td><?=$rs_per['codigo_venta']?></td>
    <td><input type="hidden" name="producto" id="producto" value="<?=$otro['id']?>"><?=$namepro?></td>
    <td><input type="text" name="cantidad" size="10" value="<?=$rs_per['cantidad']?>"></td>
    <td><?=$rs_per['precio']?></td>
    </tr> 
Código PHP:
<? ?>
<tr>
<input type="submit" value="Modificar" name="modificar">
<input name="cancelar" type="button" id="cancelar" value="Cerrar" onclick="fn_cerrar();" />
</td>
</tr>
</tfoot>
</table>
</form>

Asi que me muestra un form de esta manera, mas o menos:
_______________________________________
|Venta | Product | Cant| Precio |
| 10 |Laptop-----| 2----| 1234 |
| 10 |TV-----------|4-----| 5678 |
| 10 |Celular-----|8-----| 9876 |

Donde puedo editar cada una de las cantidades, pero edito las 3, y se modifica solo la de "Celular"... Espero ahora si haberme explicado
  #6 (permalink)  
Antiguo 03/11/2013, 11:35
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 para actualizar datos con un while

Bueno, pues tu problema es simple: no puedes llamar varios campos con el mismo name/id.

Y eso es lo que haces, así que no esperes a que funcione como esperas.

Te sugiero leer el manual.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 03/11/2013, 12:11
 
Fecha de Ingreso: agosto-2009
Ubicación: Venezuela
Mensajes: 82
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Problema para actualizar datos con un while

Llorare!! disculpa mi ignorancia, pero es que lo que yo entiendo es que cada vez que entra al ciclo debe leer el valor del campo "cantidad" para actualizarlo, por eso no entiendo lo que me dices de nombre repetidos, ya que el de ese campo es cantidad y el del otro campo es producto! Y por cada vez que entre en el ciclo, que debería ser tres veces, el va a leer el valor de cantidad y actualizarlo.. Ya me perdí más!
  #8 (permalink)  
Antiguo 03/11/2013, 12: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 para actualizar datos con un while

Los formularios son HTML y por lo tanto debes comprender como funcionan los formularios antes de si quiera vincularlos con programación del lado del servidor.

Es simple, si tienes un while() que imprime 3 diferentes datos está bien, pero si imprimes tres etiquetas de formulario idénticas no funcionarán igual, porque el atributo name es vital para representar nuestro valor al recibirlo en el servidor.

Al ser 3 campos idénticos no pueden mandarse en la misma ubicación con diferentes valores.

Este es un formulario que no funciona (como el tuyo):
Código HTML:
<form action="script.php">
<input name="foo" value="bar" >
<input name="foo" value="baz" >
<input name="foo" value="buzz" >
</form> 
Suponiendo que mandas eso desde tu navegador, ¿qué valor esperas recibir?

No puedes recibir los tres, eso sería absurdo, sólo puedes recibir un valor por que la clave foo es única.

Entonces lo que recibirías sería "buzz" pues es el último valor y siendo así se sobreescriben en ese orden los campos que tengan la misma clave.

¿Ahora entiendes cual es tu problema?

Como te vengo diciendo desde un inicio, lee el manual.

Ahí se explica como hacer para recibir múltiples valores, que es usando la notación de array.

Claro que entonces lo que recibirás es un array, desde luego eso ya sabes manejarlo así que no veo ninguna dificultad en ello.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 03/11/2013, 12:31
 
Fecha de Ingreso: agosto-2009
Ubicación: Venezuela
Mensajes: 82
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Problema para actualizar datos con un while

Si entiendo lo que me explicas sobre los name, ahora me tendré que ir al manual a ver como funciona para múltiples valores :)

Muchas gracias por tu paciencia y tu ayuda! Cualquier cosa pasaré de nuevo
  #10 (permalink)  
Antiguo 03/11/2013, 12:38
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Problema para actualizar datos con un while

Cita:
ahora me tendré que ir al manual a ver como funciona para múltiples valores
Ya te lo ha dicho: para que tengas tres input que puedan manejarse independientemente, cada uno de los input debe tener si o si un nombre (name) diferente.
de lo contrario estás reescribiendo el valor:
Cita:
Entonces lo que recibirías sería "buzz" pues es el último valor y siendo así se sobreescriben en ese orden los campos que tengan la misma clave.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 03/11/2013, 17:34
 
Fecha de Ingreso: agosto-2009
Ubicación: Venezuela
Mensajes: 82
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Problema para actualizar datos con un while

Hoola! Yo de nuevo por aqui.. Bueno ya tengo una parte resuelta de mi problema, y ya entendi y puse en practica lo del nombre unico asi:

<form>
<td><?=$namepro?></td>
<td><input type="text" name="<?=$otro['id']?>" size="3" value="<?=$rs_per['cantidad']?>"></td>
<td><?=$rs_per['precio']?></td>
</form>

Y me funciona perfecto porque uso var_dump($_POST); como me dijo pateketrueke en el archivo que recibe los datos y me los muestra perfectamente.. Pero ahora mi duda es como recibo el valor de ese arreglo por POST

Vi en un foro que lo hicieron asi y funciono:
$xid = $otro[id];
$nvalor = $_POST[$xid];

pero a mi no me funciona... solo necesito eso para hacer la comparacion en mi sentencia y terminar con este problemilla!

Alguna sugerencia please?? Gracias de antemano
  #12 (permalink)  
Antiguo 03/11/2013, 17: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 para actualizar datos con un while

Ahora tu problema es otro, que no sabes como se llaman tus campos, ¿eso fue lo más inteligente que se te ocurrió?

No entiendo, porque te he mencionado ya varias veces los de usar nomenclatura de array pero no prestas atención, y encima tu "solución" es más problema que otra cosa.

Imagina esto:
Código HTML:
<input name="editar_id[1]">
<input name="editar_id[2]">
<input name="editar_id[3]"> 
Imagina que los valores dentro de los corchetes son los IDs de tu base de datos, ¿no te hace más sentido leer dichos datos así?
Código PHP:
var_dump($_POST['editar_id']); 
Te lo digo de nuevo, por favor, lee el manual.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #13 (permalink)  
Antiguo 09/11/2013, 09:32
 
Fecha de Ingreso: agosto-2009
Ubicación: Venezuela
Mensajes: 82
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Problema para actualizar datos con un while

Uuuuuhh diculpa que no tenga tu inteligencia, pero supongo que tampoco tengo tu misma experiencia programando y pues equivocandose se aprende, no? Los nombres de los campos son del ejemplo que vi pero que no me funcionó, obvio se como se llaman mis campos y por eso pregunte de nuevo ya que segun yo, resolvi una parte del problema, que creo que es un problema muy tonto pero no tngo la experiencia con eso... Igual gracias, seguire viendo como lo resuelvo!

Etiquetas: formulario, mysql, registro, select, sql, tabla
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 14:59.