Insertar campos en una tabla usando el ID de usuario. Ayuda!!

Muy buenas.
Hoy soy yo el que acude al foro!
Necestio ayuda con un php.
Estoy insertando unos datos en la bd. Hasta hay todo claro.
<?php
include("../comp/conexion.php");
mysql_query("INSERT INTO perfil (prov,ciudad)
        VALUES ('{$_POST['provincia']}','{$_POST['ciudad']}'),$conexion);
		if (mysql_errno($conexion))
		{
			echo "No se pudo insertar los datos en la tabla. Error" .mysql_errno() ." - ".mysql_error();
			mysql_close($conexion);
		}	else{
			$conexion;
			echo"los datos se grabaron con exito!!";
			}
}
?>
Esto funciona.
Pero lo que realmente quiero es recoja una id de usuario.
Formulario de envio de datos. Le paso el id de sesion para que en la fila correspondiente me inserte los datos que le facilito.
Se que es un poco problematico hacer este envio así ya que podria intentarse hacer una inyección.
<form enctype="multipart/form-data" action="subir/enviar_cuidad.php?id=<?=$_SESSION['id_perfil']?>" method="POST">
    			<p>Provincia</p>
				<input name="provincia" type="text"/>
                <p>Ciudad</p>
                <input name="ciudad" type="text"/>
				<input type="submit" value="enviar" />
			 </form>
Y este es el php de inserción.
Pero por algun motivo que desconozco no consigo que suceda lo logico.
Que seria como ya comente que los datos pasados por el formulario se insertaran el la fila del id_perfil.
<?php
include("../comp/conexion.php");
session_start();
if(isset($_SESSION['id_perfil'])) {
mysql_query("INSERT INTO perfil (prov,ciudad)
        VALUES ('{$_POST['provincia']}','{$_POST['ciudad']}') WHERE id_perfil = $_SESSION[id_perfil]",$conexion);
		if (mysql_errno($conexion))
		{
			echo "No se pudo insertar los datos en la tabla. Error" .mysql_errno() ." - ".mysql_error();
			mysql_close($conexion);
		}	else{
			$conexion;
			echo"los datos se grabaron con exito!!";
			}
}
?>
Alguien sabria decirme cual es el fallo?
Un saludo y gracias por vuestro tiempo.
Hola:

¿Cuál es el resultado? ¿Algún error basándose en los echo del final?.

Por otro lado, si pasas el ID a través de la URL, ¿para qué usas $_SESSION['id_perfil'] en la consulta? $_GET['id'] sería lo mismo :P.

Sinceramente, no hay fallo :P; debería funcionar.
skaparate escribió:Hola:

¿Cuál es el resultado? ¿Algún error basándose en los echo del final?.

Por otro lado, si pasas el ID a través de la URL, ¿para qué usas $_SESSION['id_perfil'] en la consulta? $_GET['id'] sería lo mismo :P.

Sinceramente, no hay fallo :P; debería funcionar.
El error que da al enviar tal y como mostre el codigo es el siguiente.
No se pudo insertar los datos en la tabla. Error1064 - 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 'WHERE id_perfil = 3' at line 2
Comentar que lo estoy probando en localhost. Xampp
Si dejo el codigo de la siguiente manera.
El formulario seria igual.
<div class="edit">
	<form enctype="multipart/form-data" action="subir/enviar_cuidad.php?id=<?=$_SESSION['id_perfil']?>" method="POST">
    			<p>Provincia</p>
				<input name="provincia" type="text"/>
                <p>Ciudad</p>
                <input name="ciudad" type="text"/>
				<input type="submit" value="enviar" />
			 </form>
</div>
Y el php de inserción lo dejo así. Vamos sin el where
<?php
include("../comp/conexion.php");
session_start();
if(isset($_SESSION['id_perfil'])) {
mysql_query("INSERT INTO perfil (prov,ciudad)
		VALUES ('{$_POST['provincia']}','{$_POST['ciudad']}')",$conexion);
		if (mysql_errno($conexion))
		{
			echo "No se pudo insertar los datos en la tabla. Error" .mysql_errno() ." - ".mysql_error();
			mysql_close($conexion);
		}	else{
			$conexion;
			echo"los datos se grabaron con exito!!";
			}
}
?>
Los datos si suben a la bd pero no se insertan en la fila correspondiente, si no en otra nueva fila!
Aaaaaaaaaah, ahora entiendo XD... quieres actualizar los datos, cierto? En ese caso no se usa INSERT, sino UPDATE:

"UPDATE perfil SET prov = '$_POST[provincia]', ciudad = '$_POST[ciudad]' WHERE id_perfil = $_SESSION[id_perfil]"

Claro que si el usuario no existe, entonces no podrás insertar los datos, pues esta forma sólo los actualiza.
skaparate escribió:Aaaaaaaaaah, ahora entiendo XD... quieres actualizar los datos, cierto? En ese caso no se usa INSERT, sino UPDATE:

"UPDATE perfil SET prov = '$_POST[provincia]', ciudad = '$_POST[ciudad]' WHERE id_perfil = $_SESSION[id_perfil]"

Claro que si el usuario no existe, entonces no podrás insertar los datos, pues esta forma sólo los actualiza.
No habria problema con esto. Ya que si no existe el usuario, este no estara registrado y por tanto no accedera a esta sección de la web.
Pero esto sigue sin funcionar.
Comprendo como bien dices que no es un insert ya que el usuario ya existe en la bd y por tanto es un update, pero no consigo que se rellene dicho campo.
Una locura que no entiendo la verdad.....
Hmmm que extraño... cuando cosas como esta pasan, lo primero que debes hacer es mostrar los valores de todas las variables involucradas, o sea:

echo $_SESSION['id_perfil'] . '<br /><br />';
print_r( $_POST );

Podrías mostrar la consulta también para asegurarte de que quede como debe. También intenta esto (después de ejecutar la consulta):

if( mysql_affected_rows( $conexion ) == 1 ) {
  echo "Datos cambiados";
} else {
  echo 'Posible error: ' . mysql_error( $conexion ) . '<br />';
}
Muy buenas.
estuve leyendo nuevamente todo lo que me comentaste y cambie un par de cosas en el update que hago a la tabla.
<form action="subir/enviar_cuidad.php?id=<?=$_SESSION['id_perfil']?>" method="POST">
                <input type="text" name="provincia" title="Provincia" maxlength="30" placeholder="Provincia" autocomplete="off" required 			x-moz-errormessage="Debe de indicar la provincia" >
                <input type="text" name="ciudad" title="Ciudad" maxlength="30" placeholder="Ciudad" autocomplete="off" required x-moz-errormessage="Debe de indicar la población">
				<input type="submit" value="enviar" />
			 </form>
<?php
    session_start();
    // comprobamos que se haya iniciado la sesión
    if(isset($_SESSION['id_perfil'])) {
		$prov=$_POST['provincia'];
		$ciudad=$_POST['ciudad'];

	include("../comp/conexion.php");
	//mysql_query("INSERT INTO perfil (prov,ciudad) VALUES ('{$_POST['provincia']}','{$_POST['ciudad']}')",$conexion);
			//$sql="UPDATE perfil SET prov = '$_POST[provincia]', ciudad = '$_POST[ciudad]' WHERE email = '$_SESSION[email]'";
			$sql="UPDATE perfil SET prov = '$prov', ciudad = '$ciudad' WHERE id_perfil = '$_SESSION[id_perfil]'";
			if (mysql_errno($conexion))
			{
				echo "No se pudo insertar los datos en la tabla. Error" .mysql_errno() ." - ".mysql_error();
				mysql_close($conexion);
			}	else{
				$conexion;
				echo"los datos se grabaron con exito!!";
				echo $sql;
				}
	}
?>
el resultado es correcto en principio ya que la $sql me imprime lo siguiente.
los datos se grabaron con exito!!UPDATE perfil SET prov = 'madrid', ciudad = 'madrid' WHERE id_perfil = '3'
pero no se vuelca a la BD y la verdad que no lo entiendo ya que hasta lo que mi cabeza da de si deberia de suceder eso.
Los campos de la tabla perfil son prov y ciudad, que son de tipo varchar.
Alguien sabria que es lo que sucede?
Un saludo
creo que asi te podria funcionar

<?php 
session_start(); 

if(!isset($_SESSION['provincia']) || ($_SESSION['ciudad']) || ($_SESSION['id_perfil'])) { 
$prov = $_SESSION = $_POST['provincia']; 
$ciudad = $_SESSION = $_POST['ciudad']; 

$sql="UPDATE perfil SET prov = '$prov', ciudad = '$ciudad' WHERE id_perfil = 'id_perfil'"; 

} 
?> 
En ese último trozo de código, el único error es que no ejecutas nunca la consulta XD:

<?php
    session_start();
    // comprobamos que se haya iniciado la sesión
    if(isset($_SESSION['id_perfil'])) {
		$prov=$_POST['provincia'];
		$ciudad=$_POST['ciudad'];

	include("../comp/conexion.php");
	//mysql_query("INSERT INTO perfil (prov,ciudad) VALUES ('{$_POST['provincia']}','{$_POST['ciudad']}')",$conexion);
			//$sql="UPDATE perfil SET prov = '$_POST[provincia]', ciudad = '$_POST[ciudad]' WHERE email = '$_SESSION[email]'";
			$sql="UPDATE perfil SET prov = '$prov', ciudad = '$ciudad' WHERE id_perfil = '$_SESSION[id_perfil]'";
			[COLOR="#FF0000"]$resultado = mysql_query( $sql );[/COLOR]
			if (mysql_errno($conexion))
			{
				echo "No se pudo insertar los datos en la tabla. Error" .mysql_errno() ." - ".mysql_error();
				mysql_close($conexion);
			}	else{
				$conexion; // Y esto, para qué es? No estás haciendo nada con esta línea :P.
				echo"los datos se grabaron con exito!!";
				echo $sql;
				}
	}
?>
skaparate escribió:En ese último trozo de código, el único error es que no ejecutas nunca la consulta XD:

<?php
    session_start();
    // comprobamos que se haya iniciado la sesión
    if(isset($_SESSION['id_perfil'])) {
		$prov=$_POST['provincia'];
		$ciudad=$_POST['ciudad'];

	include("../comp/conexion.php");
	//mysql_query("INSERT INTO perfil (prov,ciudad) VALUES ('{$_POST['provincia']}','{$_POST['ciudad']}')",$conexion);
			//$sql="UPDATE perfil SET prov = '$_POST[provincia]', ciudad = '$_POST[ciudad]' WHERE email = '$_SESSION[email]'";
			$sql="UPDATE perfil SET prov = '$prov', ciudad = '$ciudad' WHERE id_perfil = '$_SESSION[id_perfil]'";
			[COLOR="#FF0000"]$resultado = mysql_query( $sql );[/COLOR]
			if (mysql_errno($conexion))
			{
				echo "No se pudo insertar los datos en la tabla. Error" .mysql_errno() ." - ".mysql_error();
				mysql_close($conexion);
			}	else{
				$conexion; // Y esto, para qué es? No estás haciendo nada con esta línea :P.
				echo"los datos se grabaron con exito!!";
				echo $sql;
				}
	}
?>
Comprobe lo que me comentas y cambie el php
<?php
    session_start();
    // comprobamos que se haya iniciado la sesión
    if(isset($_SESSION['id_perfil'])) {
		$prov=$_POST['provincia'];
		$ciudad=$_POST['ciudad'];

	include("../comp/conexion.php");
	//mysql_query("INSERT INTO perfil (prov,ciudad) VALUES ('{$_POST['provincia']}','{$_POST['ciudad']}')",$conexion);
			//$sql="UPDATE perfil SET prov = '$_POST[provincia]', ciudad = '$_POST[ciudad]' WHERE email = '$_SESSION[email]'";
			$sql="UPDATE perfil SET prov = '$prov', ciudad = '$ciudad' WHERE id_perfil = '$_SESSION[id_perfil]'";
			if (mysql_errno($conexion))
			{
				echo "No se pudo insertar los datos en la tabla. Error" .mysql_errno() ." - ".mysql_error();
				mysql_close($conexion);
			}	else{
				$conexion;
				echo"los datos se grabaron con exito!!";
				echo $sql;
				}
	}
?>
Una vez que relleno el formulario y envio a la bd esto es lo que se almacena en la variable.
los datos se grabaron con exito!!UPDATE perfil SET prov = 'madrid', ciudad = 'madrid' WHERE id_perfil = '3'
Que hasta lo que yo entiendo esta correcto, pero que no se vuelca a la fila de la tabla que contiene el id_perfil 3
Que podria estar fallando.
Bueno por suerte ya esta solucionado y finalmente fue una chorrada, ya que mi codigo estaba correcto.
Se que me queda por modificarlo un poco para evitar las inyecciones, pero por lo menos ya esta funcionando.
Muchas gracias a todos.
Dejo el php con el error solucionado por si a alguien alguna vez le hace falta.
<?php
    session_start();
    // comprobamos que se haya iniciado la sesión
    if(isset($_SESSION['id_perfil'])) {
		$prov=$_POST['provincia'];
		$ciudad=$_POST['ciudad'];

	include("../comp/conexion.php");
	//mysql_query("INSERT INTO perfil (prov,ciudad) VALUES ('{$_POST['provincia']}','{$_POST['ciudad']}')",$conexion);
			//$sql="UPDATE perfil SET prov = '$_POST[provincia]', ciudad = '$_POST[ciudad]' WHERE email = '$_SESSION[email]'";
			$sql=mysql_query("UPDATE perfil SET prov = '$prov', ciudad = '$ciudad' WHERE id_perfil = '$_SESSION[id_perfil]'");
			if (mysql_errno($conexion))
			{
				echo "No se pudo insertar los datos en la tabla. Error" .mysql_errno() ." - ".mysql_error();
				mysql_close($conexion);
			}	else{
				$conexion;
				echo"los datos se grabaron con exito!!";
				echo $sql;
				}
	}
?>