Foros del Web » Programando para Internet » PHP »

Modificar un campo de la base de datos

Estas en el tema de Modificar un campo de la base de datos en el foro de PHP en Foros del Web. Hola, estoy creando un formulario para modificar lineas de una base de datos introduciendo el id, es decir, yo tengo los siguientes registros: Código: ------------------------ ...
  #1 (permalink)  
Antiguo 09/12/2007, 15:17
Avatar de EnCeRiO  
Fecha de Ingreso: septiembre-2004
Mensajes: 375
Antigüedad: 19 años, 7 meses
Puntos: 0
Modificar un campo de la base de datos

Hola, estoy creando un formulario para modificar lineas de una base de datos introduciendo el id, es decir, yo tengo los siguientes registros:
Código:
 ------------------------
| id | nombre | telefono |
 ------------------------
| 1  | juanjo | 11522166 |
| 2  | felix  | 11525668 |
| 25 | pepe   | 32423413 |
 ------------------------
Tengo un formulario .html que apunta hacia el siguiente .php:
Código PHP:
<?php
        $link 
mysql_connect("localhost","usuario","pass");
        
mysql_select_db("bd",$link);

        
mysql_query("UPDATE table SET nombre='{$_POST['nombre']}',telefono='{$_POST['telefono']}' WHERE table.id={$_POST['id']}",$link);

        
$my_error mysql_error($link);

        if(!empty(
$my_error)) {

            echo 
"Ha habido un error al insertar los valores. $my_error"

        } else {

            echo 
"Datos modificados correctamente";
            
        }

?>
La verdad es que funciona de maravilla, pero si por ejemplo quiero modificar sólo el telefono del id 25, en el formulario introduzco 25, el nombre lo dejo en blanco y pongo el nuevo teléfono. Que pasa? que el nombre me queda en blanco... puedo hacer que si no escribo nada en la casilla nombre o en la casilla telefono no me modifique los datos que hay en la base de datos????

No se si me he explicado bien ¿?

Gracias
Saludos
__________________
Médicos Sin Fronteras
Casi todos sabemos a qué se dedican, pero no sabemos lo fácil que es hacerse socio, ¿te sobran 10 €/mes?
  #2 (permalink)  
Antiguo 09/12/2007, 15:31
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Re: Modificar un campo de la base de datos

Comprueba que las variables no estén vacias. En caso de que una de ellas lo esté, haz sólo el update de la otra.

Es decir, genera la consulta dinámicamente. Si $_POST['telefono'] está en blanco sólo haces un update del campo del nombre, y viceversa.

Otra cosa es que siempre deberías validar los datos que llegan a través de un formulario, y más aún si es para hacer una consulta a una base de datos.
  #3 (permalink)  
Antiguo 10/12/2007, 01:48
Avatar de EnCeRiO  
Fecha de Ingreso: septiembre-2004
Mensajes: 375
Antigüedad: 19 años, 7 meses
Puntos: 0
Re: Modificar un campo de la base de datos

Cita:
Iniciado por Keysher Ver Mensaje
Comprueba que las variables no estén vacias. En caso de que una de ellas lo esté, haz sólo el update de la otra.

Es decir, genera la consulta dinámicamente. Si $_POST['telefono'] está en blanco sólo haces un update del campo del nombre, y viceversa.

Otra cosa es que siempre deberías validar los datos que llegan a través de un formulario, y más aún si es para hacer una consulta a una base de datos.
Gracias por la respuesta Keysher

Lo que he puesto arriba es un ejemplo, en mi base de datos hay 17 campos así que creo que no se podrá hacer lo que me comentas.... o si se puede y no te he entendido??

A que te refieres con validar los campos del formulario? como lo hago??

Saludos
__________________
Médicos Sin Fronteras
Casi todos sabemos a qué se dedican, pero no sabemos lo fácil que es hacerse socio, ¿te sobran 10 €/mes?
  #4 (permalink)  
Antiguo 10/12/2007, 02:26
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Re: Modificar un campo de la base de datos

Siempre que un script acepte variables hay que comprobar que sean correctas. En el caso de que el origen sea un formulario (como es tu caso) puedes validarlos por medio de javascript antes de enviar el formulario, o con PHP después.

Con validar me refiero a comprobar que los campos tenga valores válidos. Si tienes un campo en la base de datos númerico y en el formulario se escriben datos no númericos, al hacer la consulta te puede devolver error. O si el campo está en blancl (como es en tu caso). Esto son sólo un par de ejemplos, también se podría aprovechar para explotar alguna vulnerabilidad (inyectar código SQL, etc...)


Aunque sean muchos campos deberías validarlos todos y comprobar que contienen valores válidos para el tipo de datos que son.

Como he comentado, esto lo puedes hacer antes o después de enviar el formulario. Si es antes, lo harías a través de javascript, con una función que se ejecute cuando le das al botón enviar (esto es sólo un ejemplo, habría mil maneras, como comprobarlo mientras se va escribiendo).

Si decides hacerlo todo mediante PHP, la comprobación la realizacías una vez que has accedido por medio de POST.

Después de validar los datos tendrás que construir la sentencia SQL (que es lo que realmente te interesaba a ti). Entiendo que quieres modificar sólo los datos que se hayan escrito en el formulario. Para ello puedes comprobarías que esas variables no estén en blanco. Puedes tener en una variable la sentencia SQL e ir completandola mientras vas comprobando los datos.

Código PHP:

$query 
"UPDATE table SET "
Luego compruebas, uno por uno, que el campo no esté en blanco, y si no lo está:

Código PHP:
$query .= "campo_que_sea='".$_POST['campo']."' "
Y después de comprobar todos los campos:

Código PHP:

$query 
.= "WHERE table.id=".$_POST['id']; 

Ten cuidado con los espacios en blanco.

De esta forma construyes la consulta sólo con los campos que no estén en blanco.

Supongo que habrá más maneras de hacerlo...
  #5 (permalink)  
Antiguo 10/12/2007, 05:32
Avatar de EnCeRiO  
Fecha de Ingreso: septiembre-2004
Mensajes: 375
Antigüedad: 19 años, 7 meses
Puntos: 0
Re: Modificar un campo de la base de datos

Cita:
Iniciado por Keysher Ver Mensaje
Siempre que un script acepte variables hay que comprobar que sean correctas. En el caso de que el origen sea un formulario (como es tu caso) puedes validarlos por medio de javascript antes de enviar el formulario, o con PHP después.

Con validar me refiero a comprobar que los campos tenga valores válidos. Si tienes un campo en la base de datos númerico y en el formulario se escriben datos no númericos, al hacer la consulta te puede devolver error. O si el campo está en blancl (como es en tu caso). Esto son sólo un par de ejemplos, también se podría aprovechar para explotar alguna vulnerabilidad (inyectar código SQL, etc...)


Aunque sean muchos campos deberías validarlos todos y comprobar que contienen valores válidos para el tipo de datos que son.

Como he comentado, esto lo puedes hacer antes o después de enviar el formulario. Si es antes, lo harías a través de javascript, con una función que se ejecute cuando le das al botón enviar (esto es sólo un ejemplo, habría mil maneras, como comprobarlo mientras se va escribiendo).

Si decides hacerlo todo mediante PHP, la comprobación la realizacías una vez que has accedido por medio de POST.

Después de validar los datos tendrás que construir la sentencia SQL (que es lo que realmente te interesaba a ti). Entiendo que quieres modificar sólo los datos que se hayan escrito en el formulario. Para ello puedes comprobarías que esas variables no estén en blanco. Puedes tener en una variable la sentencia SQL e ir completandola mientras vas comprobando los datos.

Código PHP:

$query 
"UPDATE table SET "
Luego compruebas, uno por uno, que el campo no esté en blanco, y si no lo está:

Código PHP:
$query .= "campo_que_sea='".$_POST['campo']."' "
Y después de comprobar todos los campos:

Código PHP:

$query 
.= "WHERE table.id=".$_POST['id']; 

Ten cuidado con los espacios en blanco.

De esta forma construyes la consulta sólo con los campos que no estén en blanco.

Supongo que habrá más maneras de hacerlo...
Muchísimas gracias Keysher, al llegar a casa lo pruebo!

Un saludo
__________________
Médicos Sin Fronteras
Casi todos sabemos a qué se dedican, pero no sabemos lo fácil que es hacerse socio, ¿te sobran 10 €/mes?
  #6 (permalink)  
Antiguo 10/12/2007, 13:09
Avatar de EnCeRiO  
Fecha de Ingreso: septiembre-2004
Mensajes: 375
Antigüedad: 19 años, 7 meses
Puntos: 0
Re: Modificar un campo de la base de datos

Pues (para variar) no me sale, a ver si lo he entendido bien, después de validar los datos (que esto lo haré en el formulario html, tendré que preguntar en su foro xDD) compruebo si hay alguno en blanco, y el que no este en blanco que me lo cambie en la base de datos, así (con el ejemplo de arriba) me queda el siguiente código:
Código PHP:
<?php
$link 
mysql_connect("localhost","usuario","pass");
mysql_select_db("bd",$link);

$query "UPDATE table SET ";

$query .= "nombre='".$_POST['nombre']."' ";
$query .= "telefono='".$_POST['telefono']."' ";

$query .= "WHERE table.id=".$_POST['id']; 

$my_error mysql_error($link);

if(!empty(
$my_error)) {

echo 
"Ha habido un error al insertar los valores. $my_error"

} else {

echo 
"Datos modificados correctamente";
            
}

?>
Y al darle a modificar datos me dice datos modificados correctamente, pero no me modifica nada ¿?

Gracias
Un saludo
__________________
Médicos Sin Fronteras
Casi todos sabemos a qué se dedican, pero no sabemos lo fácil que es hacerse socio, ¿te sobran 10 €/mes?
  #7 (permalink)  
Antiguo 10/12/2007, 13:20
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Re: Modificar un campo de la base de datos

Umm, te falta comprobar que no estén vacios (en el ejemplo no puse los if)

Código PHP:
<?php 
$link 
mysql_connect("localhost","usuario","pass"); 
mysql_select_db("bd",$link); 
 
$query "UPDATE table SET "

if (!empty(
$_POST['nombre'])
     
$query .= "nombre='".$_POST['nombre']."' "

if (!empty(
$_POST['telefono'])
     
$query .= "telefono='".$_POST['telefono']."' "
 
$query .= "WHERE table.id=".$_POST['id'];  
 
$my_error mysql_error($link); 
 
if(!empty(
$my_error)) { 
 
echo 
"Ha habido un error al insertar los valores. $my_error";  
 
} else { 
 
echo 
"Datos modificados correctamente"
             
}
?>
Además también te falta hacer el query, el típico mysql_query($query)

Y ten en cuenta que esto daría error si ambos campos están en blanco.

Una solución algo rápida sería incrementar un contador cada vez que pille un campo que no esté en blanco y luego comprobar que el contador sea mayor que cero.

Todo juntito:

Código PHP:
<?php 
$link 
mysql_connect("localhost","usuario","pass"); 
mysql_select_db("bd",$link); 
 
$contador 0;
$query "UPDATE table SET "

if (!empty(
$_POST['nombre']) {
     
$query .= "nombre='".$_POST['nombre']."' "
     
$contador++;
}

if (!empty(
$_POST['telefono']) {
     
$query .= "telefono='".$_POST['telefono']."' "
     
$contador++;
}

$query .= "WHERE table.id=".$_POST['id'];  

if (
$contador >0) {
     
$id_query mysql_query($query);
 
     
$my_error mysql_error($link); 
 
     if(!empty(
$my_error)) { 
 
          echo 
"Ha habido un error al insertar los valores. $my_error";  
 
     } else { 
 
         echo 
"Datos modificados correctamente"
             
    }
}
?>
OJO!! Es un código pensado rápido y sin comprobaciones, puede haber fallos (graves) y no ser la manera más correcta, pero es lo que se me ha ocurrido!
  #8 (permalink)  
Antiguo 10/12/2007, 15:46
Avatar de EnCeRiO  
Fecha de Ingreso: septiembre-2004
Mensajes: 375
Antigüedad: 19 años, 7 meses
Puntos: 0
Re: Modificar un campo de la base de datos

Gracias por la respuesta!!

El phpdesigner 8 me marca la línea:
Código PHP:
if (!empty($_POST['nombre']) { 
en rojo, y me dice Syntax error unespected '{', que no se que es ¿?

Un saludo
__________________
Médicos Sin Fronteras
Casi todos sabemos a qué se dedican, pero no sabemos lo fácil que es hacerse socio, ¿te sobran 10 €/mes?
  #9 (permalink)  
Antiguo 10/12/2007, 15:49
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Re: Modificar un campo de la base de datos

En los dos Ifs falta un parentesis al final, si te fijas, se abre el del propio if y luego el de la función empty, pero sólo cierro uno. Hay que cerrar los dos.
  #10 (permalink)  
Antiguo 10/12/2007, 15:51
Avatar de EnCeRiO  
Fecha de Ingreso: septiembre-2004
Mensajes: 375
Antigüedad: 19 años, 7 meses
Puntos: 0
Re: Modificar un campo de la base de datos

Cita:
Iniciado por EnCeRiO Ver Mensaje
Gracias por la respuesta!!

El phpdesigner 8 me marca la línea:
Código PHP:
if (!empty($_POST['nombre']) { 
en rojo, y me dice Syntax error unespected '{', que no se que es ¿?

Un saludo
Eso ya está solucionado, faltaba un ')':
Código PHP:
if (!empty($_POST['nombre'])) { 
Ahora me da error:
Ha habido un error al insertar los valores. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near... en todos los campos...


Un saludo
__________________
Médicos Sin Fronteras
Casi todos sabemos a qué se dedican, pero no sabemos lo fácil que es hacerse socio, ¿te sobran 10 €/mes?
  #11 (permalink)  
Antiguo 10/12/2007, 15:52
Avatar de EnCeRiO  
Fecha de Ingreso: septiembre-2004
Mensajes: 375
Antigüedad: 19 años, 7 meses
Puntos: 0
Re: Modificar un campo de la base de datos

jajaja cuando yo escribia tu ya me dabas la solución.


Gracias Keysher
__________________
Médicos Sin Fronteras
Casi todos sabemos a qué se dedican, pero no sabemos lo fácil que es hacerse socio, ¿te sobran 10 €/mes?
  #12 (permalink)  
Antiguo 10/12/2007, 16:31
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Re: Modificar un campo de la base de datos

Umm, puede que nos hayamos colado en algo, antes de hacer la consulta, muestrala por pantalla a ver si podemos ver qué es lo que falla.
  #13 (permalink)  
Antiguo 11/12/2007, 05:03
Avatar de EnCeRiO  
Fecha de Ingreso: septiembre-2004
Mensajes: 375
Antigüedad: 19 años, 7 meses
Puntos: 0
Re: Modificar un campo de la base de datos

Cita:
Iniciado por Keysher Ver Mensaje
Umm, puede que nos hayamos colado en algo, antes de hacer la consulta, muestrala por pantalla a ver si podemos ver qué es lo que falla.
Como?
No entiendo lo que me pides ¿?



Saludos
__________________
Médicos Sin Fronteras
Casi todos sabemos a qué se dedican, pero no sabemos lo fácil que es hacerse socio, ¿te sobran 10 €/mes?
  #14 (permalink)  
Antiguo 11/12/2007, 05:05
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Re: Modificar un campo de la base de datos

Antes de hacer el mysql_query (o después, es indiferentes), muestra por pantalla la variable $query, para ver cómo se ha construido la consulta y así ver qué es lo que falla.
  #15 (permalink)  
Antiguo 11/12/2007, 10:00
Avatar de EnCeRiO  
Fecha de Ingreso: septiembre-2004
Mensajes: 375
Antigüedad: 19 años, 7 meses
Puntos: 0
Re: Modificar un campo de la base de datos

Cita:
Iniciado por Keysher Ver Mensaje
Antes de hacer el mysql_query (o después, es indiferentes), muestra por pantalla la variable $query, para ver cómo se ha construido la consulta y así ver qué es lo que falla.
No se donde hacer eso.... el error que te he comentado antes:
Código:
Ha habido un error al insertar los valores. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'table SET nombre='33' telefono='44' WHERE table.id=1' at line 1
Sale después de enviar el formulario de modificación de los datos, como si al id 1 quisiera ponerle 33 de nombre, y 44 de telefono.


Gracias
Un saludo
__________________
Médicos Sin Fronteras
Casi todos sabemos a qué se dedican, pero no sabemos lo fácil que es hacerse socio, ¿te sobran 10 €/mes?
  #16 (permalink)  
Antiguo 11/12/2007, 11:13
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Re: Modificar un campo de la base de datos

Creo que es porque no hay coma entre los dos campos, es decir, entre el nombre="loquesea" y telefono="loquesea"

Prueba a ver si modificando un sólo campo funciona bien, si funciona bien el problema es ese. La solución puede ser algo enrevesada, si son sólo dos campos no hay problema pero si son muchos.... Habría que buscar algún otro método más efectivo.
  #17 (permalink)  
Antiguo 11/12/2007, 15:22
Avatar de EnCeRiO  
Fecha de Ingreso: septiembre-2004
Mensajes: 375
Antigüedad: 19 años, 7 meses
Puntos: 0
Re: Modificar un campo de la base de datos

Cita:
Iniciado por Keysher Ver Mensaje
Creo que es porque no hay coma entre los dos campos, es decir, entre el nombre="loquesea" y telefono="loquesea"

Prueba a ver si modificando un sólo campo funciona bien, si funciona bien el problema es ese. La solución puede ser algo enrevesada, si son sólo dos campos no hay problema pero si son muchos.... Habría que buscar algún otro método más efectivo.
Donde debo colocar la coma???

Un saludo
__________________
Médicos Sin Fronteras
Casi todos sabemos a qué se dedican, pero no sabemos lo fácil que es hacerse socio, ¿te sobran 10 €/mes?
  #18 (permalink)  
Antiguo 12/12/2007, 08:41
Avatar de EnCeRiO  
Fecha de Ingreso: septiembre-2004
Mensajes: 375
Antigüedad: 19 años, 7 meses
Puntos: 0
Re: Modificar un campo de la base de datos

Hola Keysher, ya lo tengo hecho, lo he hecho de uno en uno, es decir un <form> para cada uno, me ha llevado más trabajo pero me lo he pasado bien jejeje

Ahora estoy en lo de validar el formulario, lo tengo casi todo listo, unicamente me falta saber como validar un radio de hombre y mujer:
Código HTML:
<tr>
<td width="297"><font face="Verdana" size="1">Sexo: </font></td>
<td align="left"> 
<p align="left"><font face="Verdana" size="1">Hombre<font size="1"><input type="radio" value="hombre" name="sexo"></font>
<font size="1">Mujer<input type="radio" value="mujer" name="sexo"></font></font></td>
</tr> 
Lo he probado con:
Código:
//validar sexo
if (document.nombre_formulario.sexo.checked==0){
alert("Debe especificar su sexo")
document.inscribirse.sexo.focus()
return false;
}
Pero nada...

Un saludo
__________________
Médicos Sin Fronteras
Casi todos sabemos a qué se dedican, pero no sabemos lo fácil que es hacerse socio, ¿te sobran 10 €/mes?

Última edición por EnCeRiO; 12/12/2007 a las 13:25
  #19 (permalink)  
Antiguo 12/12/2007, 09:13
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Re: Modificar un campo de la base de datos

Ummm, pues eso es tema de JavaScript, no estoy muy seguro, pero creo que el nombre tiene que ser el mismo y cambia el value.

<input TYPE="Radio" name="Sexo" value="0">
<input TYPE="Radio" name="Sexo" value="1">

Luego para saber si está checkeado o no sería hacer la comprobación: Sexo[0].checked==True

Pero vamos, ya te digo que hace iempo que no ando con eso.
  #20 (permalink)  
Antiguo 12/12/2007, 13:27
Avatar de EnCeRiO  
Fecha de Ingreso: septiembre-2004
Mensajes: 375
Antigüedad: 19 años, 7 meses
Puntos: 0
Re: Modificar un campo de la base de datos

Cita:
Iniciado por Keysher Ver Mensaje
Ummm, pues eso es tema de JavaScript, no estoy muy seguro, pero creo que el nombre tiene que ser el mismo y cambia el value.

<input TYPE="Radio" name="Sexo" value="0">
<input TYPE="Radio" name="Sexo" value="1">

Luego para saber si está checkeado o no sería hacer la comprobación: Sexo[0].checked==True

Pero vamos, ya te digo que hace iempo que no ando con eso.
No me sale pero es igual, seguiré intentandolo a ver si suena la flauta


Muchísimas gracias por tu ayuda
Saludos
__________________
Médicos Sin Fronteras
Casi todos sabemos a qué se dedican, pero no sabemos lo fácil que es hacerse socio, ¿te sobran 10 €/mes?
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 22:24.