Foros del Web » Programando para Internet » PHP »

Actualiza valores por ID

Estas en el tema de Actualiza valores por ID en el foro de PHP en Foros del Web. Hola, tengo el siguiente problema y espero me puedan ayudar a encontrar el error: Quiero realizar la consulta de una base de datos y posteriormente ...
  #1 (permalink)  
Antiguo 31/10/2014, 12:44
 
Fecha de Ingreso: octubre-2013
Mensajes: 79
Antigüedad: 10 años, 6 meses
Puntos: 0
Pregunta Actualiza valores por ID

Hola, tengo el siguiente problema y espero me puedan ayudar a encontrar el error:

Quiero realizar la consulta de una base de datos y posteriormente actualizar algunos campos; el problema que tengo es de que
en el momento de actualizar solo me actualiza la primera fila, abajo dejo mis codigo para que este un poco mas claro.

OBTENGO VALORES DE BASE DE DATOS

Código PHP:
include('conexion.php');   
$sql "SELECT ID, FolSeg, Fecha, Prov, FacFol, Importe, Status, Comentario, DFactura, DPO, DSoporte, DXML FROM CXPD";
mysql_query("SET NAMES 'utf8'");
$result mysql_query ($sql);
if (! 
$result){
   echo 
"La consulta SQL contiene errores.".mysql_error();
   exit();
}else {
echo 
" <table>
            <thead>
                <tr>
                    <th width=30>ID</th>
                    <th width=100>Fecha</th>
                    <th width=50>Nombre</th>
                    <th width=50>Correo</th>
                    <th width=100>Proyecto</th>
                    <th width=100>Folio</th>
                    <th width=100>Folio</th>
                    <th width=100>Folio</th>
                    <th width=100>Folio</th>
                    <th width=100>Folio</th>
                    <th width=100>Folio</th>
                    <th width=100>Folio</th>
                </tr>
            </thead>"
;
    while (
$row mysql_fetch_row($result)){
    echo 
"
    <form method='POST' action='form1.php'>     
    <td><input type='text' name='ID[]' size='20' value=$row[0] readonly></td>
    <td><input type='text' name='da1[]' size='20' value=$row[1] readonly></td>
    <td><input type='text' name='da2[]' size='20' value=$row[2] readonly></td>
    <td><input type='text' name='da3[]' size='20' value=$row[3] readonly></td>
    <td><input type='text' name='da4[]' size='20' value=$row[4] readonly></td>
    <td><input type='text' name='da5[]' size='20' value=$row[5] readonly></td>
    <td><input type='text' name='da6[]' size='20' value=$row[6] readonly></td>
    <td><input name='StatusF1[]' type='checkbox' value='APROBADA'>A</td> 
    <td><input name='StatusF1[]' type='checkbox' value='CANCELADA'>C</td> 
    <td><input type='text' name='Comentario[]' size='20' value=$row[7] readonly></td>
    <td><input type='text' name='da8[]' size='20' value=$row[8] readonly></td>
    <td><input type='text' name='da9[]' size='20' value=$row[9] readonly></td>
    <td><input type='text' name='da10[]' size='20' value=$row[10] readonly></td>
    <td><input type='text' name='da11[]' size='20' value=$row[11] readonly></td>
      </tr>
     "
;
      }
echo
"</table><input type='submit' value='Actualizar datos' name='update'></td> ";
 }        
 
mysql_close(); 

Actualizo BASE DE DATOS
Código PHP:
$ID= array();
$StatusF1= array();
$Comentario= array();

 
foreach(
$_POST['ID'] as $key=>$value)
    
$ID[]= $value;
 
foreach(
$_POST['StatusF1'] as $value)
    
$StatusF1[]= $value;
 
foreach(
$_POST['Comentario'] as $key=>$value)
    
$Comentario[]= $value;


            for(
$i=0$i<count($StatusF1); $i++)
            {
            include 
"conexion.php";
            
$sSQL="Update CXPD Set Status='$StatusF1[$i]',Comentario='$Comentario[$i]' where ID='$ID[$i]'"
mysql_query($sSQL)or die(mysql_error()); 
            } 
ASI ME APARECE LA BASE DE DATOS


CUANDO SELECCIONO LOS CAMPOS A ACTUALIZAR NO ACTUALIZA SOLO LOS PRIMEROS
  #2 (permalink)  
Antiguo 31/10/2014, 13:25
 
Fecha de Ingreso: noviembre-2009
Mensajes: 205
Antigüedad: 14 años, 5 meses
Puntos: 15
Respuesta: Actualiza valores por ID

Imprime el array StatusF1 a ver si tiene los suficientes elementos para hacer correr el bucle por todos los registros de la tabla.
Y saca el script de conexión fuera del for que no necesitas conectarte cada vez.
  #3 (permalink)  
Antiguo 31/10/2014, 13:38
 
Fecha de Ingreso: octubre-2013
Mensajes: 79
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Actualiza valores por ID

El codigo lo puse de la siguiente manera y me envia error:

Código PHP:
            for($i=0$i<count($StatusF1); $i++)
            {
            echo
"$StatusF1";
            
$sSQL="Update CXPD Set Status='$StatusF1[$i]', Comentario='$Comentario[$i]' where ID='$ID[$i]'"
mysql_query($sSQL)or die(mysql_error());
            }
mysql_close(); 
Error:
Notice: Array to string conversion in /home/kwmitcom/public_html/dotest/update_f1.php on line 80
Array
  #4 (permalink)  
Antiguo 31/10/2014, 13:41
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, 4 meses
Puntos: 2658
Respuesta: Actualiza valores por ID

Usa var_dump(), no echo... Y no lo pongas entre comillas. No es una variable de string, es un array.

Código PHP:
Ver original
  1. for($i=0; $i<count($StatusF1); $i++)
  2.             {
  3.             var_dump($StatusF1);
  4.             $sSQL="Update CXPD Set Status='$StatusF1[$i]', Comentario='$Comentario[$i]' where ID='$ID[$i]'";
  5.             }
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 31/10/2014, 13:48
 
Fecha de Ingreso: octubre-2013
Mensajes: 79
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Actualiza valores por ID

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Usa var_dump(), no echo... Y no lo pongas entre comillas. No es una variable de string, es un array.

Código PHP:
Ver original
  1. for($i=0; $i<count($StatusF1); $i++)
  2.             {
  3.             var_dump($StatusF1);
  4.             $sSQL="Update CXPD Set Status='$StatusF1[$i]', Comentario='$Comentario[$i]' where ID='$ID[$i]'";
  5.             }
Al escribir el código como me lo indicaste me imprime lo siguiente:
Código:
array(2) { [0]=> string(9) "Rechazada" [1]=> string(9) "Rechazada" } array(2) { [0]=> string(9) "Rechazada" [1]=> string(9) "Rechazada" }
  #6 (permalink)  
Antiguo 31/10/2014, 14:03
 
Fecha de Ingreso: noviembre-2009
Mensajes: 205
Antigüedad: 14 años, 5 meses
Puntos: 15
Respuesta: Actualiza valores por ID

Es lo que te decía, si quieres actualizar 21 registros necesitas 21 iteraciones no 2.
  #7 (permalink)  
Antiguo 31/10/2014, 14:05
 
Fecha de Ingreso: octubre-2013
Mensajes: 79
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Actualiza valores por ID

No me queda muy claro, podrías escribir un ejemplo en código?
  #8 (permalink)  
Antiguo 31/10/2014, 14:34
 
Fecha de Ingreso: noviembre-2009
Mensajes: 205
Antigüedad: 14 años, 5 meses
Puntos: 15
Respuesta: Actualiza valores por ID

- El bucle for evalúa la condición de control y si se da realiza una nueva iteración.
- La condición de control que has especificado es "mientras la variable de control sea menor que la cantidad de elementos en el array $StatusF1".

Si puedes entender estos 2 simples hechos notarás que el bucle solo iterará 2 veces porque la siguiente vez la condición se evaluará como FALSE.

Tu problema es que al parecer asumes que el array en cuestión va a tener tantos elementos como registros a actualizar, y no es así.
  #9 (permalink)  
Antiguo 31/10/2014, 15:42
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, 4 meses
Puntos: 2658
Respuesta: Actualiza valores por ID

Para aclarar un poco sobre lo que te dice RoyKeane, var_dump() vuelca en pantalla el array con un formato que te permite ver cuántos elementos tiene, y qué es lo que tiene cada uno:
Código BASH:
Ver original
  1. array(2)
  2.     { [0]=> string(9) "Rechazada"
  3.        [1]=> string(9) "Rechazada" }
En otras palabras, ese array obtenido tiene solo dos entradas, y cada una dice lo mismo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 31/10/2014, 23:32
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Actualiza valores por ID

Solo como recomendación, para seleccionar un valor para StatusF1, utiliza radio buttons, no checkbox. Por otra parte, no es recomendable ejecutar consultas a la BD en un bucle, mejor forma la cadena de consulta y ejecutas todo de una sola vez, para lo cual te sugiero utilizar la sintaxis CASE WHEN THEN END. Aquí puedes ver un ejemplo de su uso.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: fecha, mysql, select, sql
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 05:47.