Foros del Web » Programando para Internet » PHP »

problema para actualizar con update

Estas en el tema de problema para actualizar con update en el foro de PHP en Foros del Web. Hoy esta visto que es mi dia de dudas. veran tengo un codigo en sql que me inserta bien en base de datos. Y cuando ...
  #1 (permalink)  
Antiguo 16/10/2012, 16:26
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 11 meses
Puntos: 5
problema para actualizar con update

Hoy esta visto que es mi dia de dudas.

veran tengo un codigo en sql que me inserta bien en base de datos.

Y cuando quiero modificar los 2 datos que son, tambien me va bien.

Pero cuando quiero modificar solo uno de esos 2 datos, el otro dato se me borra.


Es decir teniendo ya en la base de datos dos datos registrados

cuando quiero hacer update en solo uno de ellos , el otro como esta vacio me quita

de la base de datos su valor por el vacio.


Y claro se tiene que quedar el valor del primero y el valor de segundo modificado.




este es el codigo que estoy utilizando:



Código SQL:
Ver original
  1. ("update deportes set
  2.                
  3.                 camiseta = '$camiseta',
  4.                 pantalon = '$pantalon'
  5.                
  6.                 where id_usuario = '$id_usuario'");

si consigo que vaya esto habre practicamente acabado y les estaria agradecidos un saludo.
  #2 (permalink)  
Antiguo 16/10/2012, 19:50
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: problema para actualizar con update

No hay error en la sentencia, simplemente que la construyes mal en programación.
Lo que tienes que hacer (en programación) es crear la sentencia de modo que sólo incluya el campo que vas a modificar.
No es tan dificil, pero no es tema de este foro...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 17/10/2012, 01:37
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 11 meses
Puntos: 5
Respuesta: problema para actualizar con update

Ante todo gracias por ayudarme con mi duda.

Me comentas que debo crear la sentencia de modo que solo incluya el campo que vo ya modificar.

Bueno los dos campos pueden ser modificados , a veces sera uno y otras veces los dos.


Pero cuando solo se modifique uno el otro debe permanecer con los datos que ya tiene , ese es el problema.

Supongo que lo que me quieres decir es algo asi:

Código SQL:
Ver original
  1. ("update deportes set
  2.                
  3.                camiseta = '$camiseta',
  4.                
  5.                where id_usuario = '$id_usuario'");
  6.  
  7.  
  8.  
  9.  
  10. ("update deportes set
  11.                
  12.                pantalon = '$pantalon'
  13.                
  14.                where id_usuario = '$id_usuario'");


Pero si es eso , tenemos las mismas digo yo, es decir si $pantalon tiene un valor nuevo se modificara en la base de datos .

Pero si $camiseta no tiene valor ( y ya tiene en la base de datos valor almacenado), entonces se actualizara quedandose vacio.

Ya que ambos updates estan en el mismo formulario con el mismo boton enviar.






Por otro lado:

gnzsoloyo eso de :" no es tan dificil" sera para el que sabe, yo como no tengo tanto nivel

por eso acudo a tutoriales en internet y cuando no encuentro salida por ningun lado acudo a este genial foro.

Respecto de que no es tema de este foro, ?¿ la pregunta mia trata sobre una duda de sql , ¿ en que foro la voy a poner sino en este?
  #4 (permalink)  
Antiguo 17/10/2012, 06: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: problema para actualizar con update

Cita:
Me comentas que debo crear la sentencia de modo que solo incluya el campo que vo ya modificar.
Bueno los dos campos pueden ser modificados , a veces sera uno y otras veces los dos.
Pero cuando solo se modifique uno el otro debe permanecer con los datos que ya tiene , ese es el problema.
Cita:
gnzsoloyo eso de :" no es tan dificil" sera para el que sabe, yo como no tengo tanto nivel
por eso acudo a tutoriales en internet y cuando no encuentro salida por ningun lado acudo a este genial foro.
Resalto estas dos cosas porque están relacionadas a la solución.
Cuando digo que no es tan difícil, me refiero a que no se necesitan grandes conocimientos ni mucha experiencia para solcionar problemas de este calibre. Sólo se necesita razonarlos, verlos, analizarlos como programador.
El uso de tutoriales, lamento decirtelo, no sirve absolutamernte de nada, porque no te ayudan a aprender a razonar los problemas como programador. Para eso sólo sirve hacer cursos reales de programación, donde sea. En esos cursos la idea no es aprender un lenguaje, sino por sobre todo a prender a razonar los problemas.
Piensalo de este modo: ¿Es tán difícil deducir que si tienes N campos que pueden actualizarse, deben evaluarse todos los campos por separado, e ir agregando sólo aquellos que se modificarán?
Para razonar un problema, no lo haces como una cosa total. Los desmenuzas en pasos (algoritmos), como por ejemplo:
Cita:
- Verificar si la variable A contiene algun valor.
- Si contiene algún valor:
* Verificar si la variable Q ya contiene algo.
* Si la variable Q contiene ya algo, agregarle el separador de bloques de asignación (la coma) .
* Agregarle la asignación al campo relacionado con A.
- Crear una cadena con la sentencia de actualización, insertando el contenido de Q en el bloque de asignaciones.
El primer conjunto de cinco lineas se repite N veces, tantas como variables haya que evaluar y campos posibles de modificar.
Llevar eso a prorgamación en realidad es extremadamente simple. La sintaxis dependerá del lenguaje y de tu habilidad para simplificarlo.
Puede terminar siendo algo tan simple como.
Código PHP:
Ver original
  1. $qry = "";
  2. if(isset($pantalon) && $pantalon!='')){
  3.     if $qry ==""
  4.  {.qry .= ', ';}
  5.     $qry .= 'pantalon = $pantalon
  6. '
  7. ;    
  8. }
  9. if(isset($camisa) && $camisa!='')){
  10.     if $qry ==""
  11.  {.qry .= ', ';}
  12.     $qry .= 'camisa = $camisa
  13. '
  14. ;    
  15. }
  16. if(isset($medias) && $medias!='')){
  17.     if $qry ==""
  18.  {.qry .= ', ';}
  19.     $qry .= 'medias = $medias
  20. '
  21. ;    
  22. }
  23. $qry = 'UPDATE tabla SET $qry WHERE id = $idbuscado';
Como puedes ver no es taaaan complicado, es un ejercicio tal que es muy probable que encuentres en cualquier tutorial básico. Simplemente tienes que desglosar el problema en partes y razonar cómo podrías hacer la menor cantidad de pasos para lograrlo.

Te he pasado el post a PHP, porque como puedes ver, el tema terminó siendo programación...
__________________
¿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 17/10/2012, 08:18
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 11 meses
Puntos: 5
Respuesta: problema para actualizar con update

gnzsoloyo:

El uso de tutoriales, lamento decirtelo, no te servira absolutamernte de nada a ti, para aprender a razonar los problemas como programador.

A mi si, no solo me sirve para saber el lenguaje sino ademas para entender su logica y como enfocan el problema y adoptar esa manera de enfocar los problemas para otros futuros.

Me sirve para la dos cosas.


Si bien es cierto no encontraba solucion en ese momento para el problema que llevaba entre manos en los tutoriales que visitaba ni tampoco encontraba la logica

en ellos para afrontar el problema que tenia.


Ahora bien tengo la sana constumbre ( aun siendo novato y haber metido la pata de manera estrepitosa poniendo codigo en el foro equivocado etc etc etc)

de poner la solucion al problema si la encuentro yo mismo , y como resulta que ya tengo la solucion al problema que plantee ayer aqui pongo la solucion:


( eso si ,es parte php y parte sql , asi que no se si poner este post aqui o en el sql o poner la primera mitad del post en el otro foro y la segunda mitad del post en este, por que la verdad es que me da ya miedo ya hasta poner el "codigo solucion" al problema no vaya a ser que me reprendas de nuevo)

Código PHP:
Ver original
  1. if(!empty($nameCamiseta)){
  2.  
  3.                 $query=mysql_query("UPDATE deportes SET camiseta = '$nameCamiseta' where id_usuario = '$id_usuario'",$link);  
  4.  
  5. }
  6.  
  7.  
  8.  
  9. if(!empty($comboPantalon)){
  10.  
  11.                 $query=mysql_query("UPDATE deportes SET tipo = '$comboPantalon' where id_usuario = '$id_usuario'",$link);  
  12.  
  13. }
  14. .
  15. .
  16. .
  17. .
  18. .etc


Ahí mi granito de arena para apoyar a este fantastico foro.

Un saludo y espero que le sirva a quien le pueda interesar.

  #6 (permalink)  
Antiguo 17/10/2012, 09:22
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: problema para actualizar con update

Perdon, pero ¿llegaste a tratar de entender el código que te propongo yo?
Ese crea una sola sentencia UPDATE para N campos de una misma tabla, mientras que lo que estás haciendo es ejecutar un update por cada columna.

Al menos dime si se entendió la propuesta.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 17/10/2012 a las 09:57
  #7 (permalink)  
Antiguo 17/10/2012, 11:45
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 11 meses
Puntos: 5
Respuesta: problema para actualizar con update

contestandote a tu pregunta sobre tu codigo-propuesta decir:


gracias gnzsoloyo por tu ayuda, pero la sintaxis la tienes mal donde pones :

Código PHP:
Ver original
  1. if(isset($pantalon) && $pantalon!=''))

deberias ponerle un parentesis que falta osea:

Código PHP:
Ver original
  1. if(isset($pantalon) && ($pantalon!=''))


tambien da fallos de sintaxis donde pones :


Código PHP:
Ver original
  1. {.qry .= ', ';}

y donde pones:


Código PHP:
Ver original
  1. if $qry ==""
  2.  
  3. yo diria que se pone asi:
  4.  
  5.  
  6. if ($qry =="") {
  7. ...
  8.  
  9. }


en definitiva no funciona ( y si lo he probado)


Lo bueno que tiene como lo has hecho tu, es que tiene solo un update a diferiencia del mio que

tiene varios updates.


En lo que ando ahora es a ver si consigo simplificar mi codigo ( que si funciona) para que solo tenga

que utilizar un solo update.



Si consigo simplificar el codigo mio a un solo update, lo pondre aqui para que cualquiera pueda

servirle, a no ser que otra persona se me adelante.
  #8 (permalink)  
Antiguo 17/10/2012, 11:53
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: problema para actualizar con update

¿Hiciste simplemente un copy+paste, sin revisar nada, y sin usar un corrector sintáctico?



Yo lo escribí con el Notepad, por lo que errores de sintaxis puede tener tranquilamente.. pero la lógica descripta no creo que los tenga.

¿No sería mejor antes de largar un taxativo "en definitiva no funciona ", que te molestases en corregir los defectos y luego probases el código depurado, antes de decir que está bien o mal?



A fin de cuentas, es en los errores donde se aprenden las cosas, ¿no te parece?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 17/10/2012, 12:08
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 11 meses
Puntos: 5
Respuesta: problema para actualizar con update

gnzsoloyo:


Seria muy facil para mi responder a tu ultimo post por la misma linea pero, creo

que seguir asi no conduce a nada constructivo, estamos para ayudarnos.

Asi que apelo al espiritu de este gran foro.

y te digo:

Por eso mismo que dices:" los errores donde se aprenden las cosas",

centremonos ( si te parece bien y asi me ayudas que es de lo que se trata)

en el codigo que me funciona y te estaria agradecido si me dieras unas indicaciones para reducir a un solo update mi codigo que te he posteado, si te parece bien ayudarme en este sentido.


Ni que decir tiene que si doy con la solucion antes, la pondre aqui como dije para la gente.

Saludos
  #10 (permalink)  
Antiguo 17/10/2012, 12:57
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 11 meses
Puntos: 5
Respuesta: problema para actualizar con update

AQUI ESTA LA SOLUCION UN HIBRIDO o mezcla ENTRE el codigo de gnzsoloyo y el mio

y funciona perfectamente para todo aquel aquella que le pueda servir:

Esta optimizado para un solo update con varios if y el codigo esta con sintaxis revisada.


Código PHP:
Ver original
  1. if(!empty($camiseta)){
  2.  
  3. $info = "camiseta = '$camiseta'";
  4.  
  5. }
  6.  
  7.  
  8.  
  9. if(!empty($pantalon)){
  10.  
  11. $info2 = "tipo = '$pantalon'";
  12.  
  13. }
  14.  
  15.  
  16.  
  17.  
  18.                 $query=mysql_query("UPDATE nombre_tabla SET $info $info2 where id_usuario = '$id_usuario'",$link);



Mil gracias gnzsoloyo por tu paciencia y ayuda , hoy me has hecho un poco mejor aprendiz de programador
  #11 (permalink)  
Antiguo 17/10/2012, 13:29
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: problema para actualizar con update

Pues el código que te dejo @gnzsoloyo es correcto, otra forma de encarar el problema es simple, agrega los elementos que quieres a un arreglo, y posteriormente arma el update con ese arreglo, un ejemplo (ojo no es código PHP, si no es pseudocódigo para que lo entiendas e implementes):

Código:
toUpdate = new Arreglo()
si (esValido(camisetas))
        toUpdate.add({campo: 'camisetas', value: camisetas})
si (esValido(pantalones))
        toUpdate.add({campo: 'pantalones', value: pantalones})

query = "UPDATE deportes SET "
query+= juntaCampos(toUpdate)
query+= " WHERE idUsuario=" + idUsuario
Así solo haces un query, con los campos que quieres modificar.

Saludos.
  #12 (permalink)  
Antiguo 18/10/2012, 02:29
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 11 meses
Puntos: 5
Respuesta: problema para actualizar con update

Hola GatorV, he leido y entendido (creo que lo he entendido) tu pseudocodigo.


Efectivamente es mejor como dices ya que asi no tendria que poner en el update

varias variables solo una que englobaria a todas.


he interpretado y hecho como o lo decias tu pero no me funciona, puedes ayudarme?, he estado haciendo multitud de pruebas pero no logro que me actualice ni uno ni otro campo ni los dos a la vez, te estaria agradecido si me dijeras en que me estoy equivocando en el codigo;





Código PHP:
Ver original
  1. if(!empty($camiseta)){
  2.  
  3. $prenda_1 = "camiseta = '$camiseta'";
  4.  
  5. }
  6.  
  7.  
  8.  
  9. if(!empty($codigo_btn_donar)){
  10.  
  11. $prenda_2 = "pantalon = '$pantalon'";
  12.  
  13. }
  14.  
  15.  
  16.  
  17.  
  18.  
  19. $todas_prendas = array($prenda_1, $prenda_2);  
  20.  
  21.  
  22. $query=mysql_query("UPDATE nombre_tabla SET $todas_prendas where id_usuario = '$id_usuario'",$link);

un saludo
  #13 (permalink)  
Antiguo 18/10/2012, 04:34
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: problema para actualizar con update

Cita:
Efectivamente es mejor como dices ya que asi no tendria que poner en el update varias variables solo una que englobaria a todas.
Si, pero ten en cuenta que los arrays existen sólo dentro del PHP. MySQL no sólo no puede tomar las variables de PHP, que no existen para el SQL, sino que ni siquiera existen los arrays en MySQL.
Ten en cuenta que la sentencia UPDATE la estás construyendo como una cadena de texto, y es esa cadena de texto lo que estás enviando. No los objetos de PHP, sino el texto.
Entonces, para que funcione, el array debe ser convertido en una única cadena, donde los valores que el array contiene queden separados por comas (obligatorio en el SQL), y para eso cuentas con inplode().
Código PHP:
Ver original
  1. if(!empty($camiseta)){
  2.  $prenda_1 = "camiseta = '$camiseta'";
  3.  }
  4. if(!empty($codigo_btn_donar)){
  5. $prenda_2 = "pantalon = '$pantalon'";
  6. }
  7. $todas_prendas = array($prenda_1, $prenda_2);  
  8.  $query=mysql_query("UPDATE nombre_tabla SET ".inplode(",", $todas_prendas)." where id_usuario = '$id_usuario'",$link);
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 18/10/2012, 04:57
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 11 meses
Puntos: 5
Respuesta: problema para actualizar con update

gnzsoloyo, he hecho lo que me dices pero cuando le doy a actualizar me dice error del servidor http 500
  #15 (permalink)  
Antiguo 18/10/2012, 06:04
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: problema para actualizar con update

Eso ya no es problema ni de PHP ni de MySQL. Hay un problema en o con el WebServer.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #16 (permalink)  
Antiguo 18/10/2012, 06:08
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 11 meses
Puntos: 5
Respuesta: problema para actualizar con update

Por lo pronto creo que hay un problema con inplode ya que no es inplode es implode con "m". pero aun asi me da error .


Seguire estrujandome la cabeza por que mi WebServer esta bien.

gracias de todos modos .

si consigo dar con la clave pos eso que lo posteo aqui
  #17 (permalink)  
Antiguo 18/10/2012, 06: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: problema para actualizar con update

Bueno, el tema no es que el WebServer esté mal o bien. Lo que te comento es que hay algún problema en o con el Webserver, y eso no lo invento yo.
Mira este link: Error HTTP 500 Internal server error (Error interno del servidor)

Es decir, algún problema se genera allí, pero peude estar causdo por muchas razones.
Te sugiero que preguntes en el Foro de WebServers.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #18 (permalink)  
Antiguo 18/10/2012, 09:10
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: problema para actualizar con update

Código PHP:
Ver original
  1. $update = array();
  2. if (!empty($camiseta)) {
  3.     $update[] = "camiseta = '$camiseta'";
  4. }
  5. if (!empty($codigo_btn_donar)) {
  6.     $update[] = "pantalon = '$pantalon'";
  7. }
  8.  
  9. $updateFields = implode(', ', $update);
  10. $query = "UPDATE nombre_tabla SET {$updateFields} where id_usuario = '{$id_usuario}'";
  11. echo $query;
  #19 (permalink)  
Antiguo 18/10/2012, 13:49
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 11 meses
Puntos: 5
Respuesta: problema para actualizar con update

gatorv:
se que hay un fallo mio en el codigo ( lo puedes ver en el codigo que me has pasado)

concretamente en la linea 5 donde dice "$codigo_btn_donar" deberia poner $pantalon, pero da igual aun corrigiendo ese error , el codigo sigue sin funcionar.

((((((

entiendo el codigo que has hecho, es asi como se debe hacer y lo entiendo.

Pero lo que no entiendo es por que no funciona.

esto es de locos.
  #20 (permalink)  
Antiguo 18/10/2012, 13:53
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: problema para actualizar con update

Revisa el error_log de tu servidor web, o si no verifica en tu PHP.ini que las directiva display_error este en On, y que error_reporting este como E_ALL.

Saludos.

Etiquetas: sql, update
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 08:02.