Foros del Web » Programando para Internet » PHP »

agregar y actualizar multiples registros

Estas en el tema de agregar y actualizar multiples registros en el foro de PHP en Foros del Web. como indica el titulo de este mensaje lo que pretendo es crear un script que a partir de los registros almacenados en la tabla que ...
  #1 (permalink)  
Antiguo 26/04/2011, 17:52
Avatar de floog  
Fecha de Ingreso: enero-2006
Mensajes: 191
Antigüedad: 18 años, 3 meses
Puntos: 2
agregar y actualizar multiples registros

como indica el titulo de este mensaje lo que pretendo es crear un script que a partir de los registros almacenados en la tabla que cumplan la condicion reg = 'No' se me muestren y repita para cada uno de ellos unas cajas de formulario. esto ya lo he conseguido mediante este script que he hecho
Código PHP:
<?    session_start ();
   if (isset(
$_SESSION["autentificado"])){ ?>
<html>
   <head>
   <link href="../scripts/css-core.css" rel="stylesheet" type="text/css">
    </head>
    <body>
    <? //conectamos a la bbdd
        
include ('../scripts/db-conn.php');
        
$query "SELECT * FROM c_coches WHERE reg='No' ";
        
$sql mysql_query ($query);
    
?>
    <form name="checkin" action="../scripts/checkin.php">
    <table>
        <tr>
            <td>Vehiculo</td>
            <td>Status</td>
            <td>Fila</td>
            <td>Posicion</td>
        </tr>
        <? while ($rows mysql_fetch_array ($sql)) {?>
        <tr>
            <td><? echo $rows ["chasis"]; ?></td>
            <td><select name="status">
                    <option value="Si">Si</option>
                    <option value="No">No</option>
                </select>
            </td>
            <td><input type="text" name="fila" size="5"></td>
            <td><input type="text" name="posicion" size="5"></td>
        <? ?>
    </table>
    </form>
    <strong></strong>
    </body>
</html>   
 <? //en caso de que no hubisemos iniciado session
       //tenemos que dirigir al usuario donde pueda hacerlo
      //esto es la pagina de login
    
else {
        
header ("Location:/terpor/login.php");
    }
?>
el resultado es explendido. pero el problema esta a la hora de enviar los valores que capturemos con el select ((status)) y las dos cajas de texto ((fila y posicion)). lo que pretendo es que:
1)por un lado que cada uno de los registros me los agregue a dos tablas distintas: status y ubicacion, las cuales se "relacionan" con la tabla principal mediante el valor id.
2) por otro lado actualizar la tabla "madre" en su campo reg, cambiando el estado de No a Si.

el problema es que no se como enviar los valores que se seleccionen e introduzacan en los multiples select e input text que hay... creo que tendria que hacer con un for, pero no tengo ni idea de como resolverlo.
alguna ayuda?
  #2 (permalink)  
Antiguo 27/04/2011, 12:05
Avatar de xtimed  
Fecha de Ingreso: julio-2009
Ubicación: BCN - México
Mensajes: 226
Antigüedad: 14 años, 9 meses
Puntos: 41
Respuesta: agregar y actualizar multiples registros

Una manera sencilla es guardar los valores en campos tipo hidden por ejemplo:
Código PHP:
<select name="status" onchange="javascript:document.getElementById('statusOculto').value = this.options[this.selectedIndex].value">
                    <
option value="Si">Si</option>
                    <
option value="No">No</option>
                </
select
<
input type="hidden" name="statusOculto" id="statusOculto"
Creo que algo asi seria
  #3 (permalink)  
Antiguo 27/04/2011, 12:16
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: agregar y actualizar multiples registros

todo lo que debes hacer es asignarles a los nombres de los objetos de formularios nombres unicos, para eso usa el campo id de la tabla de tu base de datos, suponiendo que la base de datos tiene un campo "id":

Código PHP:
Ver original
  1. <? while ($rows = mysql_fetch_array ($sql)) {?>
  2.         <tr>
  3.             <td><? echo $rows ["chasis"]; ?></td>
  4.             <td><select name="status<? echo $rows ["id"]; ?>">
  5.                     <option value="Si">Si</option>
  6.                     <option value="No">No</option>
  7.                 </select>
  8.             </td>
  9.             <td><input type="text" name="fila<? echo $rows ["id"]; ?>" size="5"></td>
  10.             <td><input type="text" name="posicion<? echo $rows ["id"]; ?>" size="5"></td>
  11.         <? } ?>

como verás, en los 3 campos he agregado la id al nombre de este modo los nombres quedarian algo asi:

status1
fila1
posicion1

status2
fila2
posicion2

status3
fila3
posicion3

luego solo debes obtener los campos de la misma manera

Código PHP:
Ver original
  1. <?php
  2.  
  3. while ($rows = mysql_fetch_array ($sql)) {
  4. if($_POST["status".$rows ["id"]]){
  5. $status=$_POST["status".$rows ["id"]];
  6. $fila=$_POST["fila".$rows ["id"]];
  7. $posicion=$_POST["posicion".$rows ["id"]];
  8. }
  9. } ?>
  #4 (permalink)  
Antiguo 28/04/2011, 17:28
Avatar de floog  
Fecha de Ingreso: enero-2006
Mensajes: 191
Antigüedad: 18 años, 3 meses
Puntos: 2
Respuesta: agregar y actualizar multiples registros

gracias por tu ayuda stramin, he hecho la modificacion del codigo, pero como recojo los valores en el fichero que ejecuta el update de la tabla madre y el registro de nuevos datos en la tabla hija?? necesitaria un array??
  #5 (permalink)  
Antiguo 28/04/2011, 18:14
Avatar de floog  
Fecha de Ingreso: enero-2006
Mensajes: 191
Antigüedad: 18 años, 3 meses
Puntos: 2
Respuesta: agregar y actualizar multiples registros

he estado revisando algunos post y paginas y para hacer el insert en la nueva tabla deberia usar un for... he modificado la hoja de formulario incluyendo un par de campos hidden que envien el id y el numero total de registros identificados al script de insercion de datos,
Código PHP:
<? 
   session_start 
();
   if (isset(
$_SESSION["autentificado"])){ ?>
<html>
   <head>
   <link href="../scripts/css-core.css" rel="stylesheet" type="text/css">
    </head>
    <body>
    <? //conectamos a la bbdd
        
include ('../scripts/db-conn.php');
        
$query "SELECT * FROM c_coches WHERE reg='No' ";
        
$sql mysql_query ($query);
        
$num_reg mysql_num_rows ($sql);
    
?>
    <form name="checkin" action="../scripts/checkin.php">
    <table>
        <tr>
            <td>Vehiculo</td>
            <td>Status</td>
            <td>Campa</td>
            <td>Fila</td>
            <td>Posicion</td>
            <td></td>
        </tr>
        <? while ($rows mysql_fetch_array ($sql)) {?>
        <tr>
            <td><? echo $rows ["chasis"]; ?></td>
            <td><select name="status<? echo $rows["vid"]; ?>">
                    <option value="Si">Si</option>
                    <option value="No">No</option>
                </select>
            </td>
            <td><select name="campa<? echo $rows["vid"]; ?>">
                    <option value="Parking">Parking</option>
                    <option value="Ampliacion">Ampliacion</option>
                </select>
            </td>
            <td><input type="text" name="fila<? echo $rows["vid"]; ?>" size="5"></td>
            <td><input type="text" name="posicion<? echo $rows["vid"]; ?>" size="5"></td>
            <td><input type="hidden" name="<? echo $rows["vid"]; ?>"></td>
        <? ?>
        </tr>
        <tr>
            <td colspan="6" align="center">Total registros identificados: <? echo $num_reg?><input type="hidden" name="nreg" value="<? echo $num_reg?>">
        </tr>
        <tr>
            <td colspan="6" align="center"><input type="submit" name="submit" value="submit">
    </table>
    </form>
    <strong></strong>
    </body>
</html>   
 <? //en caso de que no hubisemos iniciado session
       //tenemos que dirigir al usuario donde pueda hacerlo
      //esto es la pagina de login
    
else {
        
header ("Location:/terpor/login.php");
    }
?>
el script checkin.php seria este:
Código PHP:
<? session_start ();
include (
'db-conn.php');
//recojemos las variables del formulario
$vid $_POST["vid"];
$status=$_POST["status".$rows ["id"]];
$parking=$_POST["campa".$rows ["id"]];
$fila=$_POST["fila".$rows ["id"]];
$posicion=$_POST["posicion".$rows ["id"]];
$numreg $_POST["nreg"];

//agregamos los datos a la tabla
for ($x 1$x <= $numreg$x++) {
        
$result mysql_query("INSERT INTO c_ubicacion (vid, parking, fila, columna) VALUES ('$vid','$status', '$parking', '$fila', '$posicion'");
        }
header ("Location:/terpor/");
?>
Aparte de no agregar a la tabla c_ubicacion, cuando hay mas de 150 registros me da el sguiente error:

Request-URI Too Large

The requested URL's length exceeds the capacity limit for this server.

alguien me puede echar una mano???
  #6 (permalink)  
Antiguo 29/04/2011, 03:16
Avatar de floog  
Fecha de Ingreso: enero-2006
Mensajes: 191
Antigüedad: 18 años, 3 meses
Puntos: 2
Respuesta: agregar y actualizar multiples registros

he cambiado un poco el fichero que deberia agregar los registros a la tabla, pero sigo sin saber por que no los agrega
Código PHP:
<?php
session_start 
(); 
include (
'db-conn.php'); 

//Me está llegando el nº de registros en nreg, puedo hacer un control de errores
// si tengo en cuenta que por cada registro vendrán 5 elementos
$numreg $_POST["nreg"]; 
echo 
$numreg;
echo 
count($_POST);
if (
count($_POST) != $numreg 2)
{
   
//El num. de elem. recibidos es incoherente. 
   
echo "ERROR: nº de registros incoherente";
}

//Recorro los elementos del array $_POST a excepcion del ultimo donde vendra el num de regs enviado
for ($i 1$i <= count($_POST)-2$i $i+5)
{        
   
$vid $_POST[i];          
   
$status $_POST[i+1];
   
   
//Ignoramos los registros con 'status' que no sea 'Si'
   
if ($status != "Si")
      continue;
   
   
$parking $_POST[i+2];
   
$fila $_POST[i+3];
   
$posicion $_POST[i+4];
   
   
   
//Agregamos los datos a la tabla 'c_ubicacion'
   
   
$result "INSERT INTO c_ubicacion (vid, parking, fila, columna) VALUES ('$vid', '$parking', '$fila', '$posicion')";
   
$sql mysql_query ($result); 
   echo 
$sql;
   
//Comprobamos posibles errores en la sentencia SQL
   
if (!$sql)
   {
     
      echo 
"ERROR: insercion en 'c_ubicacion':".mysql_error();
   }
}

header ("Location:/"); 
?>
alguna sugerencia??

Etiquetas: multiples, registros
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 20:48.