Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Un problemita con un clave forania

Estas en el tema de Un problemita con un clave forania en el foro de PostgreSQL en Foros del Web. Hola, mi ptoblema es el siguiente. Tengo que ingresar usuarios, en este caso particular son alumnos... existe ademas una tabla llama "sugerencia", la cual tiene ...
  #1 (permalink)  
Antiguo 09/12/2006, 15:30
 
Fecha de Ingreso: diciembre-2006
Mensajes: 6
Antigüedad: 17 años, 11 meses
Puntos: 0
Un problemita con un clave forania

Hola, mi ptoblema es el siguiente. Tengo que ingresar usuarios, en este caso particular son alumnos... existe ademas una tabla llama "sugerencia", la cual tiene alojada un clave forania de la tabla alumnos, especificamente el rut (Rut_A).
El problema comienza cuando intento ingrsar una sugerencia... por php... y no me reconoce el rut del usuario... me aparece esto Warning: pg_exec(): Query failed: ERROR: el valor null para la columna "rut_a" viola la restricción not null...

Script de insercion PHP:
$result = pg_Exec ($conectar, "INSERT INTO alumno(rut_a,nombre_a,apellido_a,nivel_a,mail_a) VALUES ('$rut','$nombre','$apellido','$nivel','$mail')");

El HTML es un formulario comun y corriente.



Ahora aqui va el Script SQL:
/*================================================= =============*/

/* Table: Alumno */

/*================================================= =============*/

create table ALUMNO (

RUT_A NUMERIC(8) not null,

NOMBRE_A VARCHAR(50) null,

APELLIDO_A VARCHAR(50) null,

NIVEL_A NUMERIC(2) null,

MAIL_A VARCHAR(50) null,

constraint PK_ALUMNO primary key (RUT_A)

);



/*================================================= =============*/

/* Index: alumno_PK */

/*================================================= =============*/

create unique index ALUMNO_PK on ALUMNO (

RUT_A

);



/*================================================= =============*/

/* Table: Personal */

/*================================================= =============*/

create table PERSONAL (

RUT_P NUMERIC(8) not null,
NOMBRE_P VARCHAR(50) null,

APELLIDO_P VARCHAR(50) null,

CARGO_P VARCHAR(50) null,

MAIL_P VARCHAR(50) null,

constraint PK_PERSONAL primary key (RUT_P)

);



/*================================================= =============*/

/* Index: MATERIAL_PK */

/*================================================= =============*/

create unique index PERSONAL_PK on PERSONAL (

RUT_P

);







/*================================================= =============*/

/* Table: O_DE_TRABAJO <-- Sugerencia: Fechas, Rut_A, descripcion(500), Asunto(obs_generales) */

/*================================================= =============*/

create table SUGERENCIA (

ASUNTO VARCHAR(50) not null,

RUT_A NUMERIC(8) not null,

RUT_ALU NUMERIC(6) null,

FECHA_INICIO DATE null,

DESCRIPCION VARCHAR(50) null,

constraint PK_SUGERENCIA primary key (ASUNTO)

);



/*================================================= =============*/

/* Index: O_DE_TRABAJO_PK */

/*================================================= =============*/

create unique index SUGERENCIA_PK on SUGERENCIA (

ASUNTO

);



/*================================================= =============*/

/* Index: TIENE2_FK */

/*================================================= =============*/

create index TIENE2_FK on SUGERENCIA (

RUT_A

);









alter table SUGERENCIA

add constraint FK_SUGERENCIA_TIENE2_ALUMNO foreign key (RUT_A)

references ALUMNO (RUT_A)

on delete restrict on update restrict;





Salu2

Última edición por reydenvosivo; 09/12/2006 a las 16:02
  #2 (permalink)  
Antiguo 09/12/2006, 15:50
 
Fecha de Ingreso: agosto-2006
Mensajes: 141
Antigüedad: 18 años, 3 meses
Puntos: 0
Re: Un problemita con un clave forania

y donde esta el script de insercion, sin ese no podria decirte k te falla
  #3 (permalink)  
Antiguo 09/12/2006, 16:04
 
Fecha de Ingreso: diciembre-2006
Mensajes: 6
Antigüedad: 17 años, 11 meses
Puntos: 0
Re: Un problemita con un clave forania

Ahi puse el script php, bueno es una parte, pero es donde se asignan los datos a los campos... lo demas es coneccion ....
El HTML, como dije, es un formulario comun y corriente.

Salu2
  #4 (permalink)  
Antiguo 09/12/2006, 16:38
 
Fecha de Ingreso: agosto-2006
Mensajes: 141
Antigüedad: 18 años, 3 meses
Puntos: 0
Re: Un problemita con un clave forania

prueba asi:
$result = pg_Exec ($conectar, "INSERT INTO alumno(rut_a,nombre_a,apellido_a,nivel_a,mail_a) VALUES ('".$rut."','".$nombre."','".$apellido."','".$nive l."','".$mail."')");
  #5 (permalink)  
Antiguo 09/12/2006, 18:10
 
Fecha de Ingreso: diciembre-2006
Mensajes: 6
Antigüedad: 17 años, 11 meses
Puntos: 0
Re: Un problemita con un clave forania

Mi problema esta en la tabla SUGERENCIA, la cual aloja una clafe foranea de la tabla ALUMNO... pero cuando ingreso una sugerencia, me aparece el error antes mencionado...
Lo demas funciona bien!

porfa denme una solucion.
Salu2
  #6 (permalink)  
Antiguo 09/12/2006, 18:29
 
Fecha de Ingreso: agosto-2006
Mensajes: 141
Antigüedad: 18 años, 3 meses
Puntos: 0
Re: Un problemita con un clave forania

no lei bien esa parte XD, pero tu tampoko leiste bien lo k te escribi antes , yo me referia al exec k te genera el error, ese es el k necesito k escribas
  #7 (permalink)  
Antiguo 09/12/2006, 21:11
 
Fecha de Ingreso: diciembre-2006
Mensajes: 6
Antigüedad: 17 años, 11 meses
Puntos: 0
Re: Un problemita con un clave forania

Esque que puedo hacer... mis conocimientos son muy limitados... y no tengo tiempo de expandirlos.
No se como manipular mi tabla SUGERENCIAS, y como te diste cuenta tiene una FK, de la tabla alumno. Quiero poder llenar una sugerencia, y para ello tiene que validar que el alumno este ingresado a traves de la FK (RUT_A)...
esta es mi script php para sugerencia:
<html>

<head>

<title>Ingreso Sugerencia</title>


<link type="text/css" rel="stylesheet" href="estilo.css" media="screen, projection">

</head>

<body style="background:#3d8bd6 url(imagenes/img/azuldegrade.jpg) top left repeat-x">
<div align="center">


<h1>&nbsp;</h1>

<h2 style="text-align:center;color:#fff;">&nbsp;</h2>

<h2 style="text-align:center;color:#fff;">
<?php
//conexion con la base de datos
$conectar = pg_connect('host=prat.unap.cl port=5432 user=xxx password=xxx dbname=xxx') or die("Nose puede conectar ".pg_last_error());
//comprobamos si la conexion se realizo satisfactoriamente
if($conectar!=NULL)
{

}
else {
echo " No se ha conectado\n";
}

echo "RUT QLIAO: $rut_alu\n";

$result = pg_Exec ($conectar, "select * from sugerencia where rut_a=$rut_alu");

if (!$result) {

echo "Ha ocurrido un error. Ingresa correctamente el rut\n";

exit;
}

else {
echo "PASO POR AKI, BIEN EL RUT DE LA TABLA\n";
}


$result = pg_Exec ($conectar, "INSERT INTO sugerencia(asunto,fecha_inicio,descripcion) VALUES ('$sugerencia','$fecha_inicio','$descripcion') where rut_a=$rut_alu");
if (!$result) {
echo "Ha ocurrido un error.\n";
exit;
}
if ($result) {
echo "La sugerencia ha sido Ingresada Satisfactoriamente";
exit;
}

?></h2>




Esta bien chanta, y no me valida si elñ rut ertrtenece a algun alumno de la tabla alumno: $result = pg_Exec ($conectar, "select * from sugerencia where rut_a=$rut_alu");

PD: aki esta el error que me muestra pg_exec(): supplied argument is not a valid PostgreSQL link resource in. Antes de poner el where....



Salu2
  #8 (permalink)  
Antiguo 09/12/2006, 21:31
 
Fecha de Ingreso: agosto-2006
Mensajes: 141
Antigüedad: 18 años, 3 meses
Puntos: 0
Re: Un problemita con un clave forania

aki te falla :
$result = pg_Exec ($conectar, "INSERT INTO sugerencia(asunto,fecha_inicio,descripcion) VALUES ('$sugerencia','$fecha_inicio','$descripcion') where rut_a=$rut_alu");

deberia ser:
$result = pg_Exec ($conectar, "INSERT INTO sugerencia(rut_a,asunto,fecha_inicio,descripcion) VALUES ('$rut_alu','$sugerencia','$fecha_inicio','$descri pcion') ");

el where se ocupa solo en updates y en selects NO EN INSERTS, ahi tienes disfruta el codigo :)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:38.