Foros del Web » Programando para Internet » PHP »

Ayuda ayuda por favor

Estas en el tema de Ayuda ayuda por favor en el foro de PHP en Foros del Web. Un saludo muchachos si me pudieran ayudar se los agradeceria la pregunta es como realizar un update con foreach este es mi codigo para actualizar ...
  #1 (permalink)  
Antiguo 16/01/2010, 00:13
 
Fecha de Ingreso: septiembre-2008
Mensajes: 16
Antigüedad: 16 años, 1 mes
Puntos: 0
Ayuda ayuda por favor

Un saludo muchachos si me pudieran ayudar se los agradeceria la pregunta es como realizar un update con foreach este es mi codigo para actualizar pero solo me guarda el ultimo valor de la variable. ayuda por favor, con INSERT me fuo funciona perfectamente pero no asi con UPDATE. o si no lo utilizan de esta manera me pueden colocar ejemplos o algo, la verdad esto es para mi proyecto para poder graduarme de licenciado, es parte de un sistema de requisicion


Código PHP:
$result_id pg_query("SELECT * FROM requisicion WHERE id_requisicion=id_requisicion");

while(
$row_id pg_fetch_array($result_id))

{


foreach(
$_POST['renglon'] as $row=>$ren)
{
$renglon=pg_escape_string($ren);
$articulo=pg_escape_string($_POST['articulo'][$row]);
$descripcion=pg_escape_string($_POST['descripcion'][$row]);
$unidad=pg_escape_string($_POST['unidad'][$row]);
$cantidad=pg_escape_string($_POST["cantidad"][$row]);
$id_requisicion=$row_id['id_requisicion'];

$query "UPDATE articulo_requisicion SET renglon='$renglon',articulo='$articulo',descripcion='$descripcion',unidad='$unidad',cantidad='$cantidad' WHERE num_requisicion=$id_requisicion"


$result pg_query($query) or die('Insercion de datos errada' pg_last_error());
}

  #2 (permalink)  
Antiguo 16/01/2010, 04:36
Avatar de maturano  
Fecha de Ingreso: enero-2010
Ubicación: /home/
Mensajes: 537
Antigüedad: 14 años, 10 meses
Puntos: 36
Respuesta: Ayuda ayuda por favor

El por qué no te funcione, ¡ni idea!. ¿Cuál es el formato de tu formulario (sobre todo)?, ¿Qué tipo de datos representan esas variables?.

Algo es un hecho, tu código asusta. Tienes un arreglo asociativo recibido por POST que recorres para recibir otro arreglo igual recibido por POST .... y de segundo nivel . Eso debe estar muy mal.

Compara a que si lograras tener algo como:
Código PHP:
Ver original
  1. while ($row = pg_fetch_array($result_id)) {
  2.     foreach ($_POST['requsicion'] as $requisicion) {
  3.         $articulo       = pg_escape_string($requisicion['articulo']);
  4.         $descripcion    = pg_escape_string($requisicion['descripcion']);
  5.         $unidad         = pg_escape_string($requisicion['unidad']);
  6.         $cantidad       = pg_escape_string($requisicion["cantidad"]);
  7.         $id_requisicion = $row['id_requisicion'];
  8.         // bla, bla bla bla
  9.     }
  10. }

Sin tener idea de lo que trata el sistema (¿se supone que el que sea un "sistema de requisiciones" debería aclarar cómo funciona tu código? ) el código da una idea de cómo está asociada la información; Se recibe una cantidad de requisiciones vía POST, cada requisición tiene características como un ártículo, descripción, unidad y cantidad. Fuera de que sea correcto o no, el código tiene más sentido, ¿o no? (sin mencionar el formato )

Igual la nota que parece el único dato que ocupas tu consulta a la BD inicial es el 'id_requisicion', sin embargo, traes todos los campos. Bien puedes solo consultar lo necesario.

Por último, POR FAVOR, coloca títulos descriptivos. No puedes tener un nick que haga referencia a Linux y Debian () y colocar títulos así!
__________________
I ♥ The Music!
  #3 (permalink)  
Antiguo 16/01/2010, 04:41
 
Fecha de Ingreso: enero-2010
Ubicación: México
Mensajes: 22
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Ayuda ayuda por favor

mm.. $_POST["renglon"] es un array cierto ?

A mi me parece que es un problema de como estás plateando el codigo. ¿Podrías explicar un poco más lo que debe hacer tu codigo? para darme una idea y poder ayudarte.

Bueno... lo que hace tu codigo es updatear X numero de veces (Segun el foreach) una fila (o más) de la tabla. Es logico que siempre quedará el ultimo valor.

saludos.
  #4 (permalink)  
Antiguo 16/01/2010, 08:27
 
Fecha de Ingreso: septiembre-2008
Mensajes: 16
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Ayuda ayuda por favor

ok voy a explicar voy a mostrar los codigos ok,
aqui el codigo para añadir campos de textos con nombres renglon[], articulo[] entre otros
Código Javascript:
Ver original
  1. <table   border="0.5" align="center" width="700" id="tablaFormulario">
  2.  
  3.        
  4.  
  5.  
  6.  
  7.  
  8.  
  9. </table>
  10.  
  11.      
  12.  
  13.       <tr>
  14.  
  15.         <td align="center"><input type="button" onClick="addarticulo()" value="Añadir" class="buttonb" ></td>
  16.  
  17.   <td align="center"><input type="button" onClick="removePerson()" value="Borrar" class="buttonb" ></td>      
  18. </tr>
  19.  
  20.         <script language="javascript" type="text/javascript">
  21.  
  22.  
  23.  
  24.  
  25.  
  26.        
  27.  
  28.     var indiceFilaFormulario=1;
  29.  
  30.    
  31.  
  32.  
  33. function addarticulo(){
  34.  
  35. var renglon=<?=$contador-1;?>//extraemos el valor de la variable renglon
  36.  
  37.  
  38.  
  39.     myNewRow = document.getElementById("tablaFormulario").insertRow(-1);
  40.  
  41.     myNewRow.id=indiceFilaFormulario;
  42.  
  43.     myNewCell=myNewRow.insertCell(-1);
  44.  
  45. alterno2=indiceFilaFormulario+renglon;
  46.        
  47.  
  48.     myNewCell.innerHTML="<td align='center'><input type='text' size='1' onFocus='this.blur()' value='"+alterno2+"' name='renglon[]' ></td>";
  49.  
  50.     myNewCell=myNewRow.insertCell(-1);
  51.  
  52.     myNewCell.innerHTML="<td align='center'> <textarea rows='1' cols='21' name='articulo[]' value='articulo[]' id='articulo' type='text'></textarea></td>";
  53.  
  54.     myNewCell=myNewRow.insertCell(-1);
  55.  
  56.     myNewCell.innerHTML="<td><textarea rows='1' cols='21'  name='descripcion[]' type='text'  ></textarea></td>";
  57.  
  58.     myNewCell=myNewRow.insertCell(-1);
  59.  
  60.     myNewCell.innerHTML="<td><input  type='text' size='4'  name='unidad[]'></td>";
  61.  
  62.     myNewCell=myNewRow.insertCell(-1);
  63.  
  64.     myNewCell.innerHTML="<td align='center'><input  type='text' size='4'  onkeyup='sumar()' name='cantidad[]'></td>";
  65.  
  66.  
  67.  
  68.     indiceFilaFormulario++;
  69.  
  70.     }
  71.  
  72.  
  73.  
  74.  
  75.     function removePerson(){
  76.  
  77.    
  78. if (indiceFilaFormulario >=2){
  79.                 // grab the element again!
  80.  
  81.                 var tbl = document.getElementById("tablaFormulario");
  82.  
  83.                 // grab the length!
  84.  
  85.                 var lastRow = tbl.rows.length;
  86.  
  87.                 // delete the last row if there is more than one row!
  88.  
  89.                 if (lastRow > -1) tbl.deleteRow(lastRow -1);
  90.  
  91.             indiceFilaFormulario--;
  92. }
  93.  
  94.     }
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102. </script>
  103.  
  104.    
  105.    
  106.  
  107.            
  108.  
  109.  </table>

este codigo me genera campos de textos dinamicamente, pero todos con el nombre 'renglon[]' y asi con cada uno de los campos, es decir en forma de array

ahora en la base de datos esta asi son dos tablas requisiciones y articulos de requisicion


CREATE TABLE requisicion
(
id_requisicion serial NOT NULL,
para character(30) NOT NULL,
departamento_solicitante character(35) NOT NULL,
autorizado_por character(50) NOT NULL,
concepto_requisicion character(255),
observaciones character(255),
persona_solicitante character(70) NOT NULL,
tipo_de_requisicion character(20),
fecha_requisicion date,
CONSTRAINT "Clave Primaria" PRIMARY KEY (id_requisicion)
)




CREATE TABLE articulo_requisicion
(
num_requisicion integer,
renglon integer NOT NULL,
articulo character(255) NOT NULL,
descripcion character(255),
cantidad integer,
unidad character(30),
id_articulos serial NOT NULL
)



ok necesito ir insertando en la base de datos cada unos de los campos que valla generando en articulo requisicion asi como también el "id_requisicion" en la tabla articulo_requisicion ya que actualmente solo me hace el UPDATE solo el ultimo registro que se ah introducido, como anteriormente dije el INSERT si me funciona pero el UPDATE no.

aqui coloco el INSERT, Este codigo me funciona bien al menos eso es lo que parece.
Código PHP:
Ver original
  1. foreach($_POST['renglon'] as $row=>$ren)
  2. {
  3. $renglon=pg_escape_string($ren);
  4. $articulo=pg_escape_string($_POST['articulo'][$row]);
  5. $descripcion=pg_escape_string($_POST['descripcion'][$row]);
  6. $unidad=pg_escape_string($_POST['unidad'][$row]);
  7. $cantidad=pg_escape_string($_POST["cantidad"][$row]);
  8.  
  9. $query = "INSERT  INTO articulo_requisicion (renglon,articulo,descripcion,unidad,cantidad,num_requisicion)  
  10.  
  11. VALUES ('".$renglon."','".$articulo."','".$descripcion."','".$unidad."','".$cantidad."','".$id_requisicion."')";
  12.  
  13.  
  14. $result = pg_query($query) or die('Insercion de datos errada' . pg_last_error());
  15. }


Entonces lo que necesesito es hacer el UPDATE A los campos de articulo_requisicion
  #5 (permalink)  
Antiguo 16/01/2010, 08:30
 
Fecha de Ingreso: septiembre-2008
Mensajes: 16
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Ayuda ayuda por favor

Cita:
Iniciado por Luis_Fantasma Ver Mensaje
mm.. $_POST["renglon"] es un array cierto ?

A mi me parece que es un problema de como estás plateando el codigo. ¿Podrías explicar un poco más lo que debe hacer tu codigo? para darme una idea y poder ayudarte.

Bueno... lo que hace tu codigo es updatear X numero de veces (Segun el foreach) una fila (o más) de la tabla. Es logico que siempre quedará el ultimo valor.

saludos.

Si eso es correcto es un array
Compañero como prodria hacer para que me actualice cada uno de los array, gracias

Etiquetas: favor
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 23:18.