Ir al contenido


Foto

cómo insertar en un campo de llave foránea


  • Por favor identifícate para responder
2 respuestas en este tema

#1 jonbra

jonbra

    Advanced Member

  • Miembros
  • PipPipPip
  • 57 mensajes

Escrito 08 mayo 2013 - 12:25

tengo dos tablas (usuarios y posts) relacionadas entre sí por llave primaria y foránea de la siguiente manera

usuarios

id|usuario|passwd

posts

id|titulo|id_usuarios|post|fecha

la relación es el id de usuarios (tipo int, primaria y auto-incrementable) con el id_usuarios(llave foránea y de tipo index) de posts.

para insertar un nuevo post hago lo siguiente con este código (comentado)


if(isset($_SESSION['usuario'])) //si no existe sesión de usuario no muestra form para enviar nuevo post
{
if(isset($_POST["enviar_post"])) //si pulsa sobre enviar post
{
//crea una instancia pasando los datos al método
$nuevo_post=new Posts();
$nuevo_post=$nuevo_post->crea_post($_POST["titulo_post"], $_SESSION["usuario"], $_POST["texto_post"], date('Y-m-d-G-i-s'));
}
//formulario para enviar un nuevo post
?>
<div>
<form action="blog_index.php" method="post">
<table border="0">
<tr>
<th align="center" scope="colgroup">Introduzca un nuevo post</th>
</tr>
<tr>
<td>
Título
<input type="text" name="titulo_post" /> <!-- campo para el título del post -->
</td>
</tr>
<tr>
<td>
<textarea name="texto_post" cols="50" rows="10"></textarea> <!-- campo para el texto del post -->
</td>
</tr>
<td>
<input type="submit" name="enviar_post" value="Enviar nuevo post"/> <!-- botón para enviar el formulario por método post -->
</td>
</table>
</form>
</div>


el método a la que apunta la instancia es el siguiente(comentado)


public function crea_post($titulo,$usuario,$post,$fechahora) //recibe los valores necesarios para el post
{
$consulta="SELECT id, usuario from usuarios where usuario='".$usuario."'"; //selecciono el id y el usuario, donde el usuario coincida con el recibido por parámetro
$result_conexion=Conectar::connect($consulta); //conecto a la base de datos
while($resultado=mysql_fetch_array($result_conexion))//mientras $resultado reciba valores
{
$id=$resultado['id']; //escojo la id del usuario
}
//finalmente con la id del usuario lo que hago en la siguiente conexion a base de datos es insertar en el campo id_usuarios el valor int obtenido anteriormente
$crea_post="INSERT INTO posts VALUES (null, titulo='".$titulo."', id_usuarios='".$id."', post='".$post."', fecha='".$fechahora."')";
$result_conexion=Conectar::connect($crea_post); //conecto a la base de datos e inserto
echo "Entrada publicada con éxito";
}


cuando realizo lo que aparece en el método me devuelve el siguiente error que no entiendo

ERROR:
Cannot add or update a child row: a foreign key constraint fails (`hoteles`.`posts`, CONSTRAINT `posts_ibfk_1` FOREIGN KEY (`id_usuarios`) REFERENCES `usuarios` (`id`))Entrada


¿alguien sabe por qué me falla el método y sabría alguna forma mejor o correcta de hacerlo?
  • 0

#2 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 08 mayo 2013 - 12:58

Buenas,

No creo que sea por eso, pero id_usuarios es un numérico, por lo que las comillas sobran.
  • 0

#3 jonbra

jonbra

    Advanced Member

  • Miembros
  • PipPipPip
  • 57 mensajes

Escrito 08 mayo 2013 - 01:06

Buenas,

No creo que sea por eso, pero id_usuarios es un numérico, por lo que las comillas sobran.


muchas gracias por tu ayuda.

el error era que los valores de VALUES estaban mal escritos. finalmente el código quedó así y funciona


public function crea_post($titulo,$usuario,$post,$fechahora) //recibe los valores necesarios para el post
{
$consulta="SELECT id, usuario from usuarios where usuario='".$usuario."'"; //selecciono el id y el usuario, donde el usuario coincida con el recibido por parámetro
$result_conexion=Conectar::connect($consulta); //conecto a la base de datos
while($resultado=mysql_fetch_array($result_conexion))//mientras $resultado reciba valores
{
$id=$resultado['id']; //escojo la id del usuario
}
//finalmente con la id del usuario lo que hago en la siguiente conexion a base de datos es insertar en el campo id_usuarios el valor int obtenido anteriormente
$crea_post="INSERT INTO posts VALUES (null, '".$titulo."', '".$id."', '".$post."', '".$fechahora."')";
$result_conexion=Conectar::connect($crea_post); //conecto a la base de datos e inserto
echo "Entrada publicada con éxito";
}

  • 0




IP.Board spam blocked by CleanTalk.