Foros del Web » Programando para Internet » PHP »

Problema con inputs y arrays

Estas en el tema de Problema con inputs y arrays en el foro de PHP en Foros del Web. Saludos a todos. Veréis, estoy haciendo una página que tiene que contener una tabla con los doce meses y 31 filas (que representan sus días) ...
  #1 (permalink)  
Antiguo 23/02/2009, 02:28
 
Fecha de Ingreso: marzo-2005
Mensajes: 197
Antigüedad: 19 años, 2 meses
Puntos: 1
Problema con inputs y arrays

Saludos a todos.

Veréis, estoy haciendo una página que tiene que contener una tabla con los doce meses y 31 filas (que representan sus días)

Como la tabla en sí representa un insert de 372 registros seguidos (un poco difícil de controlar si falla algo) opté por generar los campos de manera dinámica, tal que así:

Código PHP:
<table cellspacing="0" summary="table" class="broom_table">
<?php
  $dias 
= array ();

  for (
$i 0$i <= 31$i++)
    
$dias[$i] = $i;

  
$nombres = array ("Dia\Mes","enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre");
?>
  <thead><tr><?php for ($r_1 0$r_1 count ($nombres); $r_1++){?><th><?php echo $nombres[$r_1];?></th><?php }?></tr></thead>
  <tbody>
  <?php for ($r_1 1$r_1 count ($dias); $r_1 ++){?>
    <tr<?php if ($r_1 &#37; 2 == 0){echo " class=\"odd\"";}else{echo " class=\"even\"";}?>>
    <?php $aux 0;?>
    <?php for ($r_2 0$r_2 count ($nombres); $r_2++){?>
    <?php if ($aux == 0){?>
      <td><?php echo $r_1;?></td>
    <?php }else{?>
    <?php
      $sel_2 
"SELECT * FROM estadillo WHERE id_producto='" $_GET["id_producto"] . "'";
     
$que_2 mysql_query ($sel_2$dbh) or die ('I cannot execute the query because: ' mysql_error () . '<br />And the query is: ' $sel_2 '<br />');
     
$x mysql_fetch_row ($que_2);
    
?>
      <td><input type="text" name="cols[<?php echo $r_1;?>][<?php echo $r_2;?>]" value="<?php echo $x[$r_2][$r_1];?>" size="3" /></td>
   <?php }?>
   <?php $aux ++;?>
   <?php }?>
  </tr>
  <?php $i++;}?>
  <tr><td colspan="13"><input type="submit" value="Guardar" /></td></tr>
</tbody>
</table>
Después, en el formulario que recoge los inputs (mediante el método POST) hago un script así:

Código PHP:
for ($i 0$i 31$i++)
{
  for (
$j 0$j 12$j++)
  {
    
$upd "UPDATE estadillo SET " $i "_" $j "='" $_POST["cols"][$j][$i] . "' WHERE id_estadillo='" $x["id_estadillo"] . "'";
    
mysql_query ($upd$dbh) or die ('I cannot execute the query because: ' mysql_error (E_ALL) . '<br />And the query is: ' $upd '<br />');
  }

He comprobado bastante asombrado, que me falla al intentarlo una vez, pero que si refresco la página cuando me da el error, me hace la inserción sin problema... Lo cual me es un poco incómodo, porque sigue sin funcionar como yo quiero... ¿Alguien sabría decirme qué es lo que estoy haciendo mal?

Muchas gracias a todos por descontado y un saludo.

Última edición por Koden; 23/02/2009 a las 04:01
  #2 (permalink)  
Antiguo 23/02/2009, 03:46
 
Fecha de Ingreso: septiembre-2004
Mensajes: 324
Antigüedad: 19 años, 8 meses
Puntos: 13
Respuesta: Problema con inputs y arrays

" name="cols[$r_1][$r_2]" <<<< ¿no está entre codigo PHP verdad?
  #3 (permalink)  
Antiguo 23/02/2009, 04:00
 
Fecha de Ingreso: marzo-2005
Mensajes: 197
Antigüedad: 19 años, 2 meses
Puntos: 1
Respuesta: Problema con inputs y arrays

Si lo está, lo debí copiar mal (al fin y al cabo probé tanto como con cols[<?php echo $r_1;?>][<?php echo $r_2;?>] como con cols[][])

Lo edito para no dar lugar a equívocos.

Gracias por tu aporte.
  #4 (permalink)  
Antiguo 23/02/2009, 04:07
 
Fecha de Ingreso: marzo-2005
Mensajes: 197
Antigüedad: 19 años, 2 meses
Puntos: 1
Respuesta: Problema con inputs y arrays

Por cierto, el error que me da (en realidad no es un error al uso, ya que no me devuelve warning ni error, sino notice) es: Notice: Undefined offset: 0 in C:\Archivos de programa\EasyPHP 3.0\www\aplicacion\aplicacion.php on line 367

La línea 367 es la que contiene esta línea:

Código PHP:
$upd "UPDATE estadillo SET " $i "_" $j "='" $_POST["cols"][$j][$i] . "' WHERE id_estadillo='" $x["id_estadillo"] . "'"

Editado para añadir: Lo curioso es que es en ese punto (cuando da todos los notices debido a que la consulta está en un bucle) es cuando pulsas F5 y (voilá!) inserta todo sin problemas.

Última edición por Koden; 23/02/2009 a las 04:22 Razón: Dar más datos sobre el problema
  #5 (permalink)  
Antiguo 23/02/2009, 10:37
 
Fecha de Ingreso: marzo-2005
Mensajes: 197
Antigüedad: 19 años, 2 meses
Puntos: 1
Respuesta: Problema con inputs y arrays

Para más información, esto es todo lo que hace el script desde que lo envío por método POST (por cierto, no he indicado antes que hay un un hidden en un formulario que abarca toda la tabla antes citada con el id_producto)

El código sería este:

Código PHP:
$sel_1 "SELECT id_estadillo FROM estadillo WHERE id_producto='" $_POST["id_producto"] . "'";
$que_1 mysql_query ($sel_1$dbh) or die ('I cannot execute the query because: ' mysql_error () . '<br />And the query is: ' $sel_1 '<br />');
$x mysql_fetch_array ($que_1);

$n mysql_num_rows ($que_1);

if (
$n == 0)
{
  
$ins "INSERT INTO estadillo(id_producto) VALUES('" $_POST["id_producto"] . "')";
  
mysql_query ($ins$dbh) or die ('I cannot execute the query because: ' mysql_error () . '<br />And the query is: ' $ins '<br />');
}

for (
$i 0$i 31$i++)
{
  for (
$j 0$j 12$j++)
  {
    
$upd "UPDATE estadillo SET " $i "_" $j "='" $_POST["cols"][$j][$i] . "' WHERE id_estadillo='" $x["id_estadillo"] . "'";
    
mysql_query ($upd$dbh) or die ('I cannot execute the query because: ' mysql_error (E_ALL) . '<br />And the query is: ' $upd '<br />');
  }

Me resulta curioso que el hacer un echo después de la última query con la variable $upd, ya que me muestra la consulta con el id_estadillo nulo... Y es bastante raro, ya que si examinas los registros del phpMyAdmin, lo único que hace el script correctamente es insertar el id_estadillo (un autonumérico que se genera automáticamente) y el id_producto, (que paso como hidden desde la página anterior)

¿Alguna idea?



PS: Muchas gracias a todos por vuestro tiempo.
  #6 (permalink)  
Antiguo 23/02/2009, 11:31
 
Fecha de Ingreso: marzo-2005
Mensajes: 197
Antigüedad: 19 años, 2 meses
Puntos: 1
Respuesta: Problema con inputs y arrays

¡Uf!

Al final después de mucho esfuerzo dí con el problema... (Pese a que aún no entiendo bien por qué da ese problema en concreto )

el caso es que ahora, con este código funciona de maravilla:

Código PHP:
$sel_1 "SELECT id_estadillo FROM estadillo WHERE id_producto='" $_POST["id_producto"] . "'";
$que_1 mysql_query ($sel_1$dbh) or die ('I cannot execute the query because: ' mysql_error () . '<br />And the query is: ' $sel_1 '<br />');

$n mysql_num_rows ($que_1);

if (
$n == 0)
{
    
$ins "INSERT INTO estadillo(id_producto) VALUES('" $_POST["id_producto"] . "')";
    
mysql_query ($ins$dbh) or die ('I cannot execute the query because: ' mysql_error () . '<br />And the query is: ' $ins '<br />');

    @
$knd_op "new";
}

//Esto es el añadido, antes lo ponía antes de la consulta INSERT INTO
$sel_1 "SELECT id_estadillo FROM estadillo WHERE id_producto='" $_POST["id_producto"] . "'";
$que_1 mysql_query ($sel_1$dbh) or die ('I cannot execute the query because: ' mysql_error () . '<br />And the query is: ' $sel_1 '<br />');
$x mysql_fetch_array ($que_1);

for (
$i 0$i 31$i++)
{
    for (
$j 0$j 12$j++)
    {
        
$upd "UPDATE estadillo SET " $i "_" $j "='" $_POST["cols"][$j][$i] . "' WHERE id_estadillo='" $x["id_estadillo"] . "'";
        
mysql_query ($upd$dbh) or die ('I cannot execute the query because: ' mysql_error (E_ALL) . '<br />And the query is: ' $upd '<br />');
    }

El caso es que ahora (la cosa está claro es no funcionar a toda costa... ) me está dando error al visualizarlo... Y con este código

Código PHP:
<?php
    $dias 
= array ();

    for (
$i 0$i <= 31$i++)
        
$dias[$i] = $i;

    
$nombres = array ("Dia\Mes","enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre");
?>
<table cellspacing="0" summary="table" class="broom_table">
    <thead><tr><?php for ($r_1 0$r_1 count ($nombres); $r_1++){?><th><?php echo $nombres[$r_1];?></th><?php }?></tr></thead>
    <tbody>
        <?php for ($r_1 1$r_1 count ($dias); $r_1 ++){?>
        <tr<?php if ($r_1 == 0){echo " class=\"odd\"";}else{echo " class=\"even\"";}?>>
        <?php $aux 0;?>
        <?php for ($r_2 0$r_2 count ($nombres); $r_2++){?>
        <?php if ($aux == 0){?>
            <td><?php echo $r_1;?></td>
        <?php }else{?>
        <?php
            $sel_2 
"SELECT " . ($r_1 1) . "_" . ($r_2 1) . " AS campo FROM estadillo WHERE id_producto='" $_GET["id_producto"] . "'";
            
$que_2 mysql_query ($sel_2$dbh) or die ('I cannot execute the query because: ' mysql_error () . '<br />And the query is: ' $sel_2 '<br />');
            
$x mysql_fetch_row ($que_2);
        
?>
            <td><input type="text" name="cols[<?php echo ($r_1 1);?>][<?php echo ($r_2 1);?>]" value="<?php echo $x["campo"];?>" size="3" /></td>
        <?php }?>
        <?php $aux ++;?>
        <?php }?>
        </tr>
        <?php $i++;}?>
        <tr><td colspan="13"><input type="submit" value="Guardar" /></td></tr>
    </tbody>
</table>
Me da otro de esos odiosos notice (la primera vez que los veo y ya me sacan de quicio... ¡Al menos con los errores y los warning tienes a qué atenerte!) en la línea 70 del script (que es esta en concreto)

Código PHP:
<td><input type="text" name="cols[<?php echo ($r_1 1);?>][<?php echo ($r_2 1);?>]" value="<?php echo $x["campo"];?>" size="3" /></td>
El notice en cuestión es este:

Código:
<b>Notice</b>:  Undefined index:  campo in <b>C:\Archivos de programa\EasyPHP 3.0\www\aplicacion\assets\php\modulos\mod_esta.php</b> on line <b>70</b><br />
¿Alguna sugerencia?
  #7 (permalink)  
Antiguo 24/02/2009, 02:29
 
Fecha de Ingreso: marzo-2005
Mensajes: 197
Antigüedad: 19 años, 2 meses
Puntos: 1
Respuesta: Problema con inputs y arrays

Simplifico la tabla que me falla, a ver si alguien lo ve más claro y me puede echar una mano.

Código PHP:
<?php
    $dias 
= array ();

    for (
$i 0$i <= 31$i++)
        
$dias[$i] = $i;

    
$nombres = array ("Dia\Mes","enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre");
?>
<table cellspacing="0" summary="table" class="broom_table">
    <thead><tr><?php for ($r_1 0$r_1 count ($nombres); $r_1++){?><th><?php echo $nombres[$r_1];?></th><?php }?></tr></thead>
    <tbody>
        <?php for ($r_1 1$r_1 count ($dias); $r_1 ++){?>
        <tr>
        <?php for ($r_2 0$r_2 count ($nombres); $r_2++){?>
        <?php
            $sel_2 
"SELECT " . ($r_1 1) . "_" . ($r_2 1) . " AS campo FROM estadillo WHERE id_producto='" $_GET["id_producto"] . "'";
            
$que_2 mysql_query ($sel_2$dbh) or die ('I cannot execute the query because: ' mysql_error () . '<br />And the query is: ' $sel_2 '<br />');
            
$x mysql_fetch_row ($que_2);
        
?>
            <td><input type="text" name="cols[<?php echo ($r_1 1);?>][<?php echo ($r_2 1);?>]" value="<?php echo $x["campo"];?>" size="3" /></td>
        <?php }?>
        </tr>
        <?php }?>
        <tr><td colspan="13"><input type="submit" value="Guardar" /></td></tr>
    </tbody>
</table>
Gracias a todos por vuestro tiempo y un saludo.
  #8 (permalink)  
Antiguo 24/02/2009, 03:21
 
Fecha de Ingreso: marzo-2005
Mensajes: 197
Antigüedad: 19 años, 2 meses
Puntos: 1
Respuesta: Problema con inputs y arrays

He conseguido hacer que no me muestre el notice, cambiando la línea por del error por esta:

Código PHP:
<td><input type="text" name="cols[<?php echo ($r_1 1);?>][<?php echo ($r_2 1);?>]" value="<?php if (array_key_exists("campo"$x) && !empty ($x["campo"])) echo $x["campo"];?>" size="3" /></td>
Lo curioso, es que pese a que compruebo si existe la clave del array y sopeso si va vacía, a la hora de hacer el listado sigue sin mostrarme nada...
  #9 (permalink)  
Antiguo 24/02/2009, 04:47
 
Fecha de Ingreso: marzo-2005
Mensajes: 197
Antigüedad: 19 años, 2 meses
Puntos: 1
Respuesta: Problema con inputs y arrays

¡Solucionado!

Finalmente dí con la cuestión per se.

La tabla tenía que ser así:

Código PHP:
<table cellspacing="0" summary="table" class="broom_table">
    <thead><tr><?php for ($r_1 0$r_1 count ($nombres); $r_1++){?><th><?php echo $nombres[$r_1];?></th><?php }?></tr></thead>
    <tbody>
        <?php $i 0;?>
        <?php while ($i 31){?>
        <tr<?php if ($i == 0){echo " class=\"odd\"";}else{echo " class=\"even\"";}?>>
        <?php for ($j 0$j 13$j++){?>
        <?php if ($j == 0){?>
        <td><?php echo $i 1;?></td>
        <?php }else{?>
        <?php
            $sel_2 
"SELECT " $i "_" . ($j 1) . " AS campo FROM estadillo WHERE id_producto='" $_GET["id_producto"] . "'";
            
$que_2 mysql_query ($sel_2$dbh) or die ('I cannot execute the query because: ' mysql_error () . '<br />And the query is: ' $sel_2 '<br />');
            
$x mysql_fetch_array ($que_2);
        
?>
        <td><input type="text" name="cols[<?php echo $i;?>][<?php echo ($j 1);?>]" value="<?php if (!empty ($x["campo"])) echo $x["campo"];?>" size="3" /></td>
        <?php }?>
        <?php }?>
        </tr>
        <?php $i++;}?>
        <tr><td colspan="13"><input type="submit" value="Guardar" /></td></tr>
    </tbody>
</table>
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 10:58.