Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/05/2013, 01:03
Avatar de guardarmicorreo
guardarmicorreo
 
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
cómo insertar en un campo de llave foránea

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)

Código PHP:
Ver original
  1. if(isset($_SESSION['usuario'])) //si no existe sesión de usuario no muestra form para enviar nuevo post
  2.         {
  3.             if(isset($_POST["enviar_post"])) //si pulsa sobre enviar post
  4.             {
  5.                 //crea una instancia pasando los datos al método
  6.                 $nuevo_post=new Posts();
  7.                 $nuevo_post=$nuevo_post->crea_post($_POST["titulo_post"], $_SESSION["usuario"], $_POST["texto_post"], date('Y-m-d-G-i-s'));
  8.             }
  9.             //formulario para enviar un nuevo post
  10.         ?>
  11.         <div>
  12.         <form action="blog_index.php" method="post">
  13.             <table border="0">
  14.                 <tr>
  15.                 <th align="center" scope="colgroup">Introduzca un nuevo post</th>
  16.                 </tr>
  17.                 <tr>
  18.                     <td>
  19.                     Título
  20.                     <input type="text" name="titulo_post" /> <!-- campo para el título del post -->
  21.                     </td>
  22.                 </tr>
  23.                 <tr>
  24.                     <td>
  25.                     <textarea name="texto_post" cols="50" rows="10"></textarea> <!-- campo para el texto del post -->
  26.                     </td>
  27.                 </tr>
  28.                     <td>
  29.                     <input type="submit" name="enviar_post" value="Enviar nuevo post"/> <!-- botón para enviar el formulario por método post -->
  30.                     </td>
  31.             </table>
  32.         </form>
  33.         </div>

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

Código PHP:
Ver original
  1. public function crea_post($titulo,$usuario,$post,$fechahora) //recibe los valores necesarios para el post
  2.         {
  3.             $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
  4.             $result_conexion=Conectar::connect($consulta); //conecto a la base de datos
  5.             while($resultado=mysql_fetch_array($result_conexion))//mientras $resultado reciba valores
  6.             {
  7.                 $id=$resultado['id']; //escojo la id del usuario
  8.             }
  9.             //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
  10.             $crea_post="INSERT INTO posts VALUES (null, titulo='".$titulo."', id_usuarios='".$id."', post='".$post."', fecha='".$fechahora."')";
  11.             $result_conexion=Conectar::connect($crea_post); //conecto a la base de datos e inserto
  12.             echo "Entrada publicada con éxito";
  13.         }

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

Cita:
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 qué significa este error, por qué me devuelve este error, me falla el método por algún error de sintaxis, sabría alguna forma mejor o correcta de hacerlo?

gracias :)