PHP - Insert en clave foranea

 
Vista:
sin imagen de perfil
Val: 60
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Insert en clave foranea

Publicado por carlos (33 intervenciones) el 11/12/2019 03:20:31
Hola, espero esten bien. Les hago una consulta, estuce haciendo algo y como siempre me atasque en una parte.
tengo 2 tablas; usuarios y articulos. la idea es que el usuario inicie sesión e ingrese articulos, luego se mostrara los articulos de ese usuario en su sesión.
Estos son los campos de las tablas:
Usuarios:
id_uss, tipo: int, not null, clave primaria, auto increment.
nombre, tipo: varchart, not null.
clave, tipo: varchart, not null.

Articulos:
id, tipo int, not null, clave primaria, auto increment.
nombre, tipo: varchart, not null.
idus, tipo: int, not null, index, clave foraneaa id_us de la tabla Usuarios.

Cuando hago el insert me da error al intentar insertar el usuario legeado en la clave foranea.
Les dejo los códigos de las siguientes páginas, para que vean como lo estoy haciendo y me digan que esta mal.
Las páginas son:
login.html, verificar.php, addart.php e insertar.php.
El error esta en insertar.php, puse las otras para que se entienda lo que quiero hacer.
login.html
1
2
3
4
5
6
7
8
<form action="verificar.php" method="post">
<br>
<input type="text" name="usuario">
<br>
<input type="password" name="contra">
<br>
<input type="submit" value="Entrar">
</form>

verificar.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
session_start();
if(isset($_REQUEST['usuario'],$_REQUEST['contra'])) {
    $_SESSION['n1'] = $_REQUEST['usuario'];
    $_SESSION['n2'] = $_REQUEST['contra'];
}
else  {
    ?>
<h2>Acceso denegado</h2>
<p>Acceso solo a usuarios registrados.</p>
<?php
}
$conexion = mysqli_connect("localhost","miuser","mipass","mibase");
$dato = $_REQUEST['usuario'];
$codSeguro = mysqli_real_escape_string($conexion,$dato);
$dato2 = $_REQUEST['contra'];
$cod2 = mysqli_real_escape_string($conexion,$dato2);
$registros=mysqli_query($conexion,"SELECT nombre,clave FROM usuarios where nombre='$codSeguro' && clave='$cod2'") or
  die("Problemas en el select:".mysqli_error($conexion));
 
if ($reg=mysqli_fetch_array($registros))
{
  header("Location:addart.php");
}
else
{
  header("Location:login.html");
}
mysqli_close($conexion);
?>

addart.php

1
2
3
4
5
6
<form action="insertar.php" method="post">
<br>
<input type="text" name="arti">
<br>
<input type="submit" value="Agregar">
</form>

insertar.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
session_start();
if(!isset($_SESSION['n1'])) {
        ?>
        <h2>Acceso denegado</h2>
        <p>El contenido de esta sección solo está disponible para usuarios registrados.</p>
        <?php
}
else {
$conexion = mysqli_connect("localhost","miuser","micontra","mibase");
$art = $_REQUEST['arti'];
$artSeguro = mysqli_real_escape_string($conexion,$art);
$consulta = mysqli_query($conexion,"INSERT INTO articulos (nombre,idus) VALUES('$artSeguro','$_SESSION['n1']')");
 
mysqli_close($conexion);
}
?>

Desde ya gracias a quien pueda darme una mano.
Saludos cordiales.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Insert en clave foranea

Publicado por Daniel (2 intervenciones) el 11/12/2019 13:26:36
Hola. Hace mucho que no hago esto de insertar con php. Controla por las dudas las comillas. yo probaría cambiando esto.
"INSERT INTO articulos (nombre,idus) VALUES('$artSeguro','$_SESSION['n1']')" por
"INSERT INTO articulos (nombre,idus) VALUES('".$artSeguro."','".$_SESSION['n1']."')"

Básicamente trato de evitar las comillas simples al lado de las variables. aca separado con espacios para mejor comprensión
"INSERT INTO articulos (nombre,idus) VALUES(' ".$artSeguro." ',' ".$_SESSION['n1']." ')"

Perdón si me mando cualquiera, es lo primero que se me vino a la mente.

Obvio que tenes que estar seguro que las variables tienen datos. eso lo doy por controlado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 60
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Insert en clave foranea

Publicado por carlos (33 intervenciones) el 12/12/2019 15:22:58
Hola, desde ya gracias por responder; pero la verdad no funciona. Lo bueno es que ya no me sale ningun mensaje de error, pero verifico en php my admin y veo que se no se ha agregado el registro.
Por otra parte me percate que el campo idus que es clave foranea; php lo muestra como conbobox (select). lo que no se es como hacer que al hacer ele insert del articulo seleccione el id del usuario que inicio sesion y ponerlo en el campo idus.
Espero se entienda lo que busco.
Nuevamente se agradece a quien pueda orientarme, por que me perdi.
Saludos cordiales.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Insert en clave foranea

Publicado por Danieltuch (2 intervenciones) el 12/12/2019 15:57:15
Me parece que primero debés asegurarte que la variable $_SESSION['n1'] tenga el id del usuario, si no es un id que exista no va a hacer el insert por ser foranea.
Yo limpiaria un poco el código. En el renglon 15 de verificar haces el mysqli_real_escape_string. Yo lo haría cuando definis la variable de session en el renglón 4. Y cada vez que necesite el usuario llamo a $_SESSION['n1'] que ya está escapado.
Perdón por no ser más explicativo pero estoy en el celu y se complica escribir.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Eudomar
Val: 12
Ha aumentado su posición en 15 puestos en PHP (en relación al último mes)
Gráfica de PHP

Insert en clave foranea

Publicado por Eudomar (3 intervenciones) el 16/12/2019 21:22:24
Crea de nuevo la tabla articulo,

asi, elimina la restincion index, ya que Crea un índice único en una tabla. No se permiten valores duplicados
Articulos:
id, tipo int, not null, clave primaria, auto increment.
nombre, tipo: varchart, not null.
idus, tipo: int, not null, clave foraneaa id_us de la tabla Usuarios.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar