entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

No se actualizan datos en PHP

Tengo el siguiente codigo pero no me actualiza los datos, no me aparece error ni nada :S

<?php
$status = "";

if (isset($_POST["enviar"])) {
$nombre_visible = sqlValue($_POST["nombre_visible"], "text");
$sexo = sqlValue($_POST["sexo"], "text");
$patente = sqlValue($_POST["patente"], "text");
$mail = sqlValue($_POST["mail"], "text");
$edad = sqlValue($_POST["edad"], "text");
$pass= md5(md5(limpiar($_POST['pass'])));
$id = $_SESSION['id'];

$query = mysql_query("UPDATE usuarios SET nombre_visible = '$nombre_visible' sexo = '$sexo' patente = '$patente' mail = '$mail' edad = '$edad' pass = '$pass' WHERE id = $id ");
echo '<div class="modalbox movedown"><p align="center"><b><font face="Tahoma" size="2" color="#000000">Cambios guardados con exito.</font></b></p></div>
<script>
function redireccionar(){window.location="perfil";} 
setTimeout ("redireccionar()", 2000);
</script>';

}
?>

3 Respuestas

1voto

LxDAndromeda Puntos2440

Creo que te falta la extensión del archivo perfil:

function redireccionar(){window.location="perfil";} 

0voto

Mariio comentado

quite el código e igualmente no actualiza

0voto

Leonardo-Tadei comentado

Podrías poner la query que se ejecuta y la salida del error de la DB para ver hasta dónde llegaste?

3votos

Leonardo-Tadei Puntos227320

Hola @fabyold,

creo que tu query falla porque no estás separando los pares nombre=valor con comas:

$query = mysql_query("UPDATE usuarios SET nombre_visible = '$nombre_visible', sexo = '$sexo', patente = '$patente', mail = '$mail', edad = '$edad', pass = '$pass' WHERE id = $id ");

No ves el error porque no estás haciendo ningún control de errores... deberías validar que mysql_query() falla y capturar el error para verlo.

PD: las funciones mysql_*() van a dejar de existir!!!! Andá pasando a las mysqli_*() o a PDO

0voto

Mariio comentado

Al parecer otra cosa es el error, ya que igualmente sigue sin actualizar.

0voto

Mariio comentado

Agrege el campo de or die (mysql_error()); para ver si daba algun error para descubrir la causa, correctamente es un error en la consulta:

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 'Testofaasfsaf'', sexo = ''Masculino'', patente = ''ABCD-12'', mail = ''asdasd@' at line 1

Esta es la consulta:

("UPDATE usuarios SET nombre_visible = '$nombre_visible', sexo = '$sexo', patente = '$patente', mail = '$mail', edad = '$edad', pass = '$pass' WHERE id = $id ")

0voto

Leonardo-Tadei comentado

Por lo que se ve, los valores de las variables tiene comillas que rompen la secuencia de la query. El problema está en varios campos, pero se ve claramente en $patente, que queda patente = ''ABCD-12''. Fijate que no son comillas dobles, sino una comilla simple repetida.

Tenés que escapar las comillas en el contenido de las variables, o prohibirlas (sacarlas de la cadena). Para escaparlas podrías usar la función

$var = htmlspecialchars($var);

y aplicarselo a todas las variables.

0voto

white comentado

para convertir las comillas simples htmlspecialchars debería tener el flag ENT_QUOTES como segundo paramentro.

$var = htmlspecialchars($var, ENT_QUOTES);

0voto

Leonardo-Tadei comentado

Gracias por la corrección @white !

0voto

Mariio comentado

Pueden darme un ejemplo de como debería ir una variable con el htmlspecialchars? Habia investigado sobre eso hace unos días y que también se podía poner en los formularios cuando la url es de la misma página.

0voto

Leonardo-Tadei comentado

No sé si no entiendo la pergunta o si es que amerita qu ela pongas como una nueva consulta en eD...

Un ejemplo de cómo usar la función es este:

$var = htmlspecialchars($var, ENT_QUOTES);

En dónde la variable $var será sobreescrita con los caracteres codificados...

0voto

rach comentado

a mi parecer como bien dicen una razón eran las comas que te faltaban y en donde pones

WHERE id = $id " 

yo lo pondría

WHERE id = '$id' "

0voto

Leonardo-Tadei comentado

Si el ID es un valor numérico, ambas consultas con y sin comillas simples funcionan bien.

2votos

GusGarsaky Puntos5480

En lugar de hacer las consultas así con código spaghetti, puedes hacerlo más sencillo con consultas preparadas:

<?php

$query = "UPDATE usuarios SET nombre_visible = ?, sexo = ?, patente = ?,
    mail = ?, edad = ?, pass = ? WHERE id = ?";
$stmt = $conn->prepare($query);

/* El primer parametro especifica el tipo de dato de las columnas:
s = string
d = entero
*/
$stmt->bind_param("ssssdsd", $nombre_visible, $sexo, $patente, $mail,
    $edad, $pass, $id);
$stmt->execute(); // ejecuta la sentencia

0voto

Leonardo-Tadei comentado

Sería mucho mejor así, pero tendría que pasarse a PDO para usar la DB... y este es un buen motivo!

0voto

Mariio comentado

Prefiero usar mysqli xD

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta