PHP - Actualizar BD mediante tabla php

   
Vista:
Imágen de perfil de Jorge

Actualizar BD mediante tabla php

Publicado por Jorge (9 intervenciones) el 11/09/2014 16:11:22
actualizacion.fw

Hola a todos, como ven en la imagen tengo una tabla en php formada apartir de los datos de una consulta realizada a una tabla mysql, por eso las filas varian siempre, pero por ahora trabajo con dos para probar mi codigo de actualización de esos mismos datos, pero lo unico que consigo es que al actualizar un campo sea el que sea, se actualizan los dos quedando duplicada la actualizacion que hice... como puedo hacer?. Este es mi código:

if($btn=="Actualizar"){

foreach($_POST['txtnoproy'] as $key => $noproyecto){
$cantidad = $_POST['txtcotiz'][$key];
$obs = $_POST['txtobscotiz'][$key];
$nopro = $_POST['txtnopro'][$key];

$sql="update cotizaciones set idproducto='$nopro', cantidad=$cantidad, observaciones='$obs' where noproyecto='$noproyecto'";
$cs=mysql_query($sql,$cn);
}
echo "<script> alert('Se actualizo la cotizacion correctamente');
window.location='ingresoproyectos.php';</script>";
}

Aclaro que txtnopro es donde esta el nombre del producto osea idproducto de MYSQL y txtnoproy es el cuadro donde esta el codigo o numero del proyecto en el encabezado y llamando noproyecto en la BD... Gracias por su colaboración. :D
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Actualizar BD mediante tabla php

Publicado por Gonzalo (338 intervenciones) el 11/09/2014 17:29:20
tal vez sea menos complicado.

primero, eso es un <table></table>, cada registro esta entre <tr></tr> y cada campo entre <td></td>, hasta aqui no tengo problema

ahora, al momento de recuperar los textbox estos deben tener un nombre unico, de otra forma el explorador no distingue uno de otro, asi que para la columna de producto deben existir txtcotiz1 y txtcotiz2, para la columna cantidad debe haber 'txtobscotiz1', 'txtobscotiz2' y por ultimo para cada observacion debe haber 'txtnopro1' y 'txtnopro2'

problema 1: si todos los textbox en la columna 1 tienen el mismo nombre entonces para el explorador solo hay 1 textbox 'txtcotiz' (aqui podria estar el primer problema).

problema 2: como sabes a que registro pertenece cada linea? me imagino que tienes un hiden al final de cada registro donde "escondes" el numero de id de ese registro, asi al recuperarlo vas a saber a que registro pertenece.

bueno, dando por echo que todos los textbox tienen un nombre unico entonces solo debes detectar el hidden para saber que ya recuperaste el renglon completo, eso lo haces con el foreach, asi que iniciaste bien.

los campos de la fecha, proyecto y solicitantes son unicos, el problema es con los que estan en la tabla, no pueden tener el mismo nombre.

foreach($_POST as $Objeto=>$Valor)
{
if(substr($Objeto,0,8)=='txtcotiz')
{
$cantidad = $Valor;
}
if(substr($Objeto,0,8)=='txtobsco')
{
$obs = $Valor;
}
if(substr($Objeto,0,8)=='txtnopro')
{
$nopro = $Valor;
}
//posiblemente te falta este campo

if(substr($Objeto,0,8)=='HidIdReg')
{
$Id = $Valor;
//cuando encuentras el hidden significa que ya leiste el renglon completo, aqui guardas la informacion que recuperaste
//ojo con el id, ya viste porque actualiza solo 1?
$sql="update cotizaciones set idproducto='$nopro', cantidad=$cantidad, observaciones='$obs' where Id='$id";
//y guardas el registro, limpias las variables y continuas con el siguiente renglon.
}
}//fin del foreach


el problema es al momento de actualizar, tomas el id del proyecto para guardar cada registro, entonces los guarda todos en el mismo registro en lugar de guardarlos en el registro que le corresponde a cada uno.

ojala ese sea el problema.

espero sea de ayuda, suerte, salu2.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jorge

Actualizar BD mediante tabla php

Publicado por Jorge (9 intervenciones) el 11/09/2014 18:14:51
Hola Gonzalo Gracias por tu aporte es muy significativo para mi, más esa tabla no es estática por decir así, osea, no es fija; está formada basada en una consulta, lo que haría que podría ser de dos filas o más... por eso cada campo de texto no puede tener nombre unico o distintivo como me aconsejas... mira, este es mi codigo de toda la pagina...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
<?php
include("conexion.php");
?>
<?php include("seguridad.php");
?>
 
<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=big5">
<title>Cotizaci&oacute;n</title>
 
<LINK href="body.css" rel="stylesheet" type="text/css">
</head>
<body>
<header>
<h2><center>
  <font color="navy">Editar Cotizaci&oacute;n</font>
</center></h2>
</header>
<br>
<?php
$var="";
$var1="";
$var2="";
$var3="";
 
$sql="select max(nopedido) from pedidos";
$consult = mysql_query($sql);
$r = mysql_fetch_array($consult);
 
 
if(isset($_POST["btn1"])){
	$btn=$_POST["btn1"];
	$bus=$_POST["txtbus"];
	if($btn=="Buscar"){
 
		$sql="select * from contenidopedido where nopedido='$bus'";
		$cs=mysql_query($sql,$cn);
		while($resul=mysql_fetch_array($cs)){
			$var=$resul[0];
			$var1=$resul[1];
			$var2=$resul[2];
			$var3=$resul[3];
			$var4=$resul[4];
			$var5=$resul[5];
			$var6=$resul[6];
 
			}
 
		}
 
		if($btn=="Agregar"){
 
 $nopedido = $_POST['txtnopedido'];
 $noproy = $_POST['txtnoproy'];
 $user = $_POST['txtuser'];
 $fecha = $_POST['txtfecha'];
foreach($_POST['txtnopro'] as $key => $nopro)
{
 
    $cantidad = $_POST['txtcantidad'][$key];
    $obs = $_POST['txtobs'][$key];
 
		$sql="insert into contenidopedido values ($nopedido,'$nopro','$cantidad','$obs','$noproy','$user','$fecha')";
 
		$cs=mysql_query($sql,$cn);
 
}
echo "<script> alert('Se inserto correctamente el pedido');
window.location='compras.php';</script>";
		}
 
		if($btn=="Actualizar"){
 
	foreach($_POST['txtnoproy'] as $key => $noproyecto){
        $cantidad = $_POST['txtcotiz'][$key];
        $obs = $_POST['txtobscotiz'][$key];
        $nopro = $_POST['txtnopro'][$key];
 
		$sql="update cotizaciones set idproducto='$nopro', cantidad=$cantidad, observaciones='$obs' where noproyecto='$noproyecto'";
		$cs=mysql_query($sql,$cn);
		}
		echo "<script> alert('Se actualizo la cotizacion correctamente');
		window.location='ingresoproyectos.php';</script>";
		}
		if($btn=="Eliminar"){
		$noproyecto = $_POST["txtnoproy"];
 
		$sql="delete from cotizaciones where noproyecto='$noproyecto'";
 
		$cs=mysql_query($sql,$cn);
		echo "<script> alert('Se elimnino la cotizacion correctamente');
		window.location='ingresoproyectos.php';</script>";
		}
	}
 
?>
<?php
$proy=$_GET['proy'];
?>
<form name="fe" action="" method="post">
<center>
<!--<strong>No pedido:</strong>-->
<?php
$sql="select max(nopedido) from pedidos";
$consult = mysql_query($sql);
$r = mysql_fetch_array($consult);
 
 
?>
<input name="txtnopedido" type="hidden"  value="<?php echo $r[0]?>" size="1"/>
<tr>
<td width="117"><strong>Fecha: </strong><input name="txtfecha" type="text"  value=<?php echo date('m/d/Y'); ?> size="7" readonly/></td>
<td width="117"><strong>Proyecto: </strong></strong><input name="txtnoproy[]" type="text"  value=<?php echo $proy?> size="10" readonly/>
<td width="143"><strong>Solicitado por: </strong><input name="txtuser" type="text"  value=<? echo $_SESSION['usuarioactual']; ?> size="8" readonly/></td><br><br>
<?php
$sql="
SELECT cotizaciones.nocotizacion, cotizaciones.idproducto, cotizaciones.cantidad, cotizaciones.observaciones
FROM cotizaciones
INNER JOIN pedidos
WHERE cotizaciones.noproyecto = '".$proy."'
GROUP BY cotizaciones.idproducto
ORDER BY cotizaciones.noproyecto DESC";
		$cs=mysql_query($sql,$cn);
		echo"<center>
<table border='4' bordercolor='#0099FF' bgcolor='#FFFFFF'>
<tr>
<td><font color='navy'><strong>Desc. del Producto</strong></font></td>
<td><font color='navy'><strong>Cantidad<br>Cotizada</strong></font></td>
<td><font color='navy'><strong>Observaciones</strong></font></td>
</tr>";
		while($resul=mysql_fetch_array($cs)){
			$var=$resul[0];
			$var1=$resul[1];
			$var2=$resul[2];
			$var3=$resul[3];

			echo "<tr>
<td><input name='txtnopro[]' type='text'  value='$var1' size='48'/></td>
<td><input name='txtcotiz[]' type='text'  value='$var2' size='5'/>
<td><textarea name='txtobscotiz[]' type='text' size='15'>$var3</textarea></td>
 
</tr>";
			}

			echo "</table>
</center>";
?>
<!--
<table border="4" align="center" bordercolor="#0099FF" bgcolor="#FFFFFF">
 
<td><strong>Productos</strong></td>
<td><input name="txtnopro" type="text"  value="<?php echo $var1?>" size="6"/></td>
</tr>
<tr>
<td><strong>Cantidad</strong></td>
<td><input name="txtcantidad" type="text"  value="<?php echo $var2?>" size="6"/></td>
</tr>
<tr>
<td><strong>Observaciones</strong></td>
<td><textarea name="txtobs" cols="6" id="txtobs"><?php echo $var3?></textarea></td>
</tr>
<tr>
-->
<table width="200" border="4" align="center" bordercolor="#0099FF" bgcolor="#FFFFFF">
<tr align="center"><td colspan="2"><input type="submit" name="btn1"value="Eliminar"><input type="submit" name="btn1"value="Actualizar"></td>
  <tr>
    <th scope="col"><a href="ingresoproyectos.php"><img src="regresar.PNG" width="68" height="26"></a></th>
    <th scope="col"><a href="logout.php"><img src="sesion.PNG" width="97" height="24"></a></th>
  </tr>
</table>
<tr>
<tr><br />
</form>
<br />
 
 
 
<?php
if(isset($_POST["btn1"])){
	$btn=$_POST["btn1"];
 
	if($btn=="Agregara"){
 
		include("mail.php");
 
	}
	}
 
 
?>
<?php
if(isset($_POST["btn1"])){
	$btn=$_POST["btn1"];
 
	if($btn=="Agregar1"){
 
 
		$sql="select * from contenidopedido where nopedido='$nopedido'";
		$cs=mysql_query($sql,$cn);
		echo"<center>
		NO PEDIDO: $r[0]
<table border='4' bordercolor='#FFFFFF' bgcolor='#0099FF'>
<tr>
<td>Producto</td>
<td>Cantidad</td>
<td>Observaciones</td>
</tr>";
		while($resul=mysql_fetch_array($cs)){
			$var=$resul[0];
			$var1=$resul[1];
			$var2=$resul[2];
			$var3=$resul[3];

			echo "<tr>
<td>$var1</td>
<td>$var2</td>
<td>$var3</td>
 
 
</tr>";
			}

			echo "</table>
</center>";
	}
	}
?>


Cualquier duda preguntame pues estoy consultando y haciendo pruebas de mi parte y nada...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Actualizar BD mediante tabla php

Publicado por Gonzalo (338 intervenciones) el 11/09/2014 18:25:47
intenta asi


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$i=0;
while($resul=mysql_fetch_array($cs)){
 $var=$resul[0];
 $var1=$resul[1];
 $var2=$resul[2];
 $var3=$resul[3];
 
 
 echo "<tr>
 <td><input name='txtnopro$i' type='text' value='$var1' size='48'/></td>
 <td><input name='txtcotiz$i' type='text' value='$var2' size='5'/>
 <td><textarea name='txtobscotiz$i' type='text' size='15'>$var3</textarea></td>
 
  //tal vez aqui es donde no entiendo, donde guardas el id del cada registro? donde pones $var?
</tr>";
$i++;
 }

eso les da un nombre unico dependiendo de cuantos renglones regresa la consulta.

si quieres ver como funciona, modifica el post para direccionarlo a un archivo ejemplo.php y agrega este codigo

1
2
3
4
5
6
7
<?php
 
foreach($_POST as $o=>$v)
{
echo("$o => $v<br>");
}
?>

vas a ver como recupera los objetos y los valores.

estoy viendo como recuperas los valores.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jorge

Actualizar BD mediante tabla php

Publicado por Jorge (9 intervenciones) el 11/09/2014 18:49:49
Hola, el $var sería el valor extraido de nocotizacion de la BD, pero no decidio colocarlo en la tabla creada por la consulta, en esa codificación hay varias líneas inutiles por decir así pues por querer que el formulario funcione adecuadamente no me he dedicado a limpiar lo sobrante (pido disculpa por ese detalle) más la parte importante es donde doy función al botón Actualizar, las líneas de la cabecera donde esta la fecha, el proyecto y el solicitado por, y no menos importante la consulta de donde traigo los datos al formulario para trabajar luego con ellos... ahora, como soy nuevo aquí no se como hacer eso de modificar el post para redireccionar al ejemplo... igual te paso mi php donde esta la línea y te comento que mi BD se llama cotizaciones y tiene el campo nocotizacion (int), idproducto (var), cantidad (int), observaciones (var)... ;)

Y por cierto donde va el foreach que colocas de ultimo? Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Actualizar BD mediante tabla php

Publicado por Gonzalo (338 intervenciones) el 11/09/2014 18:57:58
ok, para redireccionar el post debes modificar esta linea

<form name="fe" action="" method="post">

por esta

<form name="fe" action="ejemplo.php" method="post">

solo ten cuidado, cualquier click a cualquier boton que este dentro de este form va a dirigir la informacion a ejemplo.php

bueno, pues esta interesante tu codigo, tendria que copiar los codigos y pasarlos a mi pc pero estoy en el trabajo, tendria que esperar a llegar a la casa para ver como organizaste las bd y recodificar para enviarte la respuesta y ver si te parece una solucion.

yo trabajo mejor con POO, asi que tal vez el codigo este bastante cambiado, ok?

entonces te respondo en la tarde sino mañana.

salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jorge

Actualizar BD mediante tabla php

Publicado por Jorge (9 intervenciones) el 11/09/2014 20:09:48
Ok dale gracias y consultando he visto que el problema radica en que no le digo al php la fila y columna del dato, osea por vectores... pero no domino bien esa parte... pero aclarando eso se podria actualizar un dato o varios sin afectar el restante... seguire consultando y gracias por tu colaboracion! :D
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Actualizar BD mediante tabla php

Publicado por Gonzalo (338 intervenciones) el 11/09/2014 20:28:56
el problema basico es el nombre de los textbox, deben ser diferentes, lo que yo hago es numerarlos como TexA1, TexA2, TexA3, etc, es la mejor manera que he encontrado de poder distinguir cada elemento en la pagina. has este ejercicio

archivo TablaSinIndices.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<form name="fe" action="LeerPost.php" method="post">
<table>
 
<?php
for($i=1;$i<=10;$i++)
{
echo('<tr><td>
<input type="text" name="TexBox" value=" ' . $i .' " >
</td></tr>');
?>
 
</table>
<input type="submit" value="Submit">
 
</form>

archivo LeerPost.php
1
2
3
4
5
6
7
<?php
 
foreach($_POST as $o=>$v)
{
echo("$o => $v<br>");
}
?>

veras que solo recupera el primer text box, ahora has este otro ejercicio

archivo TablaConIndices.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<form name="fe" action="LeerPost.php" method="post">
<table>
 
<?php
for($i=1;$i<=10;$i++)
{
echo('<tr><td>
<input type="text" name="TexBox' . $i . '" value=" ' . $i .' " >
</td></tr>');
?>
 
</table>
<input type="submit" value="Submit">
 
</form>

aqui si los encuentra a todos.

espero sea de ayuda, suerte, salu2.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jorge

Actualizar BD mediante tabla php

Publicado por Jorge (9 intervenciones) el 11/09/2014 21:07:33
sale asi lo que me dijiste que hiciera, y pues mira y me explico de nuevo, no pueden tener nombre diferente los campos pues esa tabla de la imagen se forma a partir de una consulta, es decir que segun el proyecto asi son los productos cotizados... en la imagen dos, pero pueden ser muchos más... y como sanear la parte de los nombres cuando no tienes un rango fijo para la tabla php... por eso debe delimitarse cada campo como unico mediante un vector o matriz, pero yo apenas estoy aprendiendo eso...
muestra
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Actualizar BD mediante tabla php

Publicado por Gonzalo (338 intervenciones) el 11/09/2014 22:30:59
correccion archivo TablaSinIndices.php

(copia a partir de aqui)

1
2
3
4
5
6
7
8
9
10
11
12
13
<form name="fe" action="LeerPost.php" method="post">
<table>
 
<?php
for($i=1;$i<=10;$i++)
{
echo('<tr><td>
<input type="text" name="TexBox" value=" ' . $i .' " >
</td></tr>');
}
?>
 
</table>

(hasta aqui)

y esto es lo que regresa, da como bueno el ultimo (pense que tomaria el primero pero ...)

TexBox => 10
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Actualizar BD mediante tabla php

Publicado por Gonzalo (338 intervenciones) el 11/09/2014 22:32:54
y aqui esta la correccion de TablaConIndices.php.

(copia a partir de aqui)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<form name="fe" action="LeerPost.php" method="post">
<table>
 
<?php
for($i=1;$i<=10;$i++)
{
echo('<tr><td>
<input type="text" name="TexBox' . $i . '" value=" ' . $i .' " >
</td></tr>');
}
?>
 
</table>
<input type="submit" value="Submit">
 
</form>

(hasta aqui)

y esto es lo que regresa:

TexBox1 => 1
TexBox2 => 2
TexBox3 => 3
TexBox4 => 4
TexBox5 => 5
TexBox6 => 6
TexBox7 => 7
TexBox8 => 8
TexBox9 => 9
TexBox10 => 10

en mi opinion este es el procedimiento que necesitas.

espero sea de ayuda, suerte, salu2.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Actualizar BD mediante tabla php

Publicado por Gonzalo (338 intervenciones) el 11/09/2014 22:40:48
y el archivo LeerPost.php este si estaba bien.

(copia a partir de aqui)

<?php

foreach($_POST as $o=>$v)
{
echo("$o => $v<br>");
}
?>

(hasta aqui)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jorge

Actualizar BD mediante tabla php

Publicado por Jorge (9 intervenciones) el 11/09/2014 22:57:03
Entiendo claramente lo que me haz comentando, voy a aplicar la base de tu codigo para que pueda asi cada campo te ner su nombre propio independientemente a cuantos sean aunque eso para actualizarlo tendra su mañita pero igual aplicare y te aviso... Gracias! :D
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jorge

Actualizar BD mediante tabla php

Publicado por Jorge (9 intervenciones) el 12/09/2014 15:50:26
Hola Gonzalo, viste mi código siempre?... estoy tratando de aplicar lo que me dijiste de ultimo y nada :/
feliz día!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar