Base de datos en php

Mi duda es la siguiente tengo mi base de datos, el programa que ocupo utiliza php, apache, ¿mysql es que utilizo foráneas ya tengo mis formularios pero lo que pasa es que cuando utilizo mi tabla la que contiene foránea me la guarda es decir yo entiendo que solo me debe de guardar mi información si esta ya existe en otra tabla porque la mando a llamar con la foránea pero aun así me guarda los datos porque?
create table Autotanque(
equipo       int (6) not null,
placa        varchar (9) not null,
anio         int (4) not null,
marca        varchar (15) not null,
modelo       varchar (20) not null,
capacidad    int (5) not null);
alter table Autotanque add primary key (equipo);
create table Dispo_dia(
clav_di          int (2) not null,
Opera            VARCHAR (2),
taller           VARCHAR (2),
fe_oper_mant     varchar (18),
fe_mant_oper     varchar (18),
observ           varchar (150),
equipo           int (6) not null,
FOREIGN KEY (equipo) REFERENCES Autotanque (equipo),
 constraint Dispo_dia_pk primary key(equipo))
TYPE=InnoDB;
create table Verifi(
clav_ver      int (3) not null,
tipo          varchar (7) not null,
fec_veri      varchar (10) not null,
fec_prox      varchar (10) not null,
equipo       int (6) not null,
FOREIGN KEY (equipo) REFERENCES Autotanque (equipo),
 constraint Verifi_pk primary key(equipo))
TYPE=InnoDB;
Ejemplo si meto un dato en equipo de autotanque se guarda pero cuando meto en verifi el mismo equipo este debe de existir pero a mi me guarda la inf exista o noooo
espero me puedan ayudar gracias

1 Respuesta

Respuesta
1
A ver yo creo que las tablas están mal creadas.. o no pusiste todo el código.. ¿la tabla autorranque es InnoDB? Por que según lo que pones.. no es así.. y sin eso.. pues no te funcionan las llaves foráneas...
No olvides cerrar y valorar la pregunta si la respuesta te pareció correcta!
Creo que me falto poner el innoDB
create table Autotanque(
equipo       int (6) not null,
placa        varchar (9) not null,
anio         int (4) not null,
marca        varchar (15) not null,
modelo       varchar (20) not null,
capacidad    int (5) not null)
TYPE=InnoDB;
alter table Autotanque add primary key (equipo);
create table Dispo_dia(
clav_di          int (2) not null,
Opera            VARCHAR (2),
taller           VARCHAR (2),
fe_oper_mant     varchar (18),
fe_mant_oper     varchar (18),
observ           varchar (150),
equipo           int (6) not null,
FOREIGN KEY (equipo) REFERENCES Autotanque (equipo),
 constraint Dispo_dia_pk primary key(equipo))
TYPE=InnoDB;
create table Verifi(
clav_ver      int (3) not null,
tipo          varchar (7) not null,
fec_veri      varchar (10) not null,
fec_prox      varchar (10) not null,
equipo       int (6) not null,
FOREIGN KEY (equipo) REFERENCES Autotanque (equipo),
 constraint Verifi_pk primary key(equipo))
TYPE=InnoDB;
Y si esto es todo mi codigo bueno ya lo corri de nuevo pero aun asi me guarda todo
es decir en verifi guardo todo los datos y cuando en equipo pongo uno que no he registrado me lo guarda
mira este es mi codigo de verifi a la mejor ahi esta el problema y no lo he visto
include("Conectarse.PHP");
$link=Conectarse();
$clav_ver=$_GET['clav_ver'];
$tipo=$_GET['tipo'];
$fec_veri=$_GET['fec_veri'];
$fec_prox=$_GET['fec_prox'];
$equipo=$_GET['equipo'];
$result=mysql_query("select * from verifi where clav_ver='$clav_ver'",$link);
 if (mysql_num_rows($result) == 0)
  {
 $nr=mysql_query("insert into Verifi(clav_ver, tipo, fec_veri, fec_prox, equipo) values('$clav_ver','$tipo','$fec_veri','$fec_prox','$equipo''SI')",$link);
if($nr)
      { ?> <center>
<tr>
<td><BR><BR><BR><BR><BR><BR><BR><BR><BR> <strong><font size="4" face="Georgia, Times New Roman, Times, serif"> <?  ECHO "LA VERIFICACIÒN DEL A/T HA SIDO GUARDADO";?></strong></td>
</tr>
<CENTER>  <?  }
                    ELSE
                      { ?> <center>
<table border="0">
<tr>
<td><BR><BR><BR><BR><BR><BR><BR><BR><BR> <strong><font size="4" face="Georgia, Times New Roman, Times, serif"> <?  ECHO "NO SE PUDO GUARDAR LA VERIFICACIÒN, REVISE SUS DATOS";?></strong></td>
</tr>
<CENTER>
<tr>
<td><CENTER><input type='button' name='cmdsalir' value='REGRESAR A REVISAR LA INFORMACIÓN' onclick='javascript:history.back()'></CENTER>
</tr>
</td>
</table>
<?php
        }
   }
   else
   {?> <center>
<tr>
<td><BR><BR><BR><BR><BR><BR><BR><BR><BR> <strong><font size="4" face="Georgia, Times New Roman, Times, serif"> <?  ECHO "NO SE PUEDE GUARDAR, PORQUE YA EXISTE";?></strong></td>
</tr>
<CENTER>
<tr>
<td> <center><input type='button' name='cmdsalir' value='REGRESAR A REVISAR LA INFORMACIÓN' onclick='javascript:history.back()'>
</tr>
</td>
</center> <?php
   }
mysql_close($link); //cierra la conexion
?>
Gracias
Pues no se viendo el código creo que tienes algo más aquí..
$nr=mysql_query("insert into Verifi(clav_ver, tipo, fec_veri, fec_prox, equipo) values('$clav_ver','$tipo','$fec_veri','$fec_prox','$equipo''SI')",$link);
'$equipo"SI'-> segun la tabla ese campo es un int...
Ahora.. revisa y eso pero no es lógico que te guarde un registro en la tabla con llave foránea si no existe el registro en la tabla principal ya que entonces no hay integridad referencial...
Puede que el problema lo tengas más bien en la configuración del innoBD... por ejemplo a mi me pasa a veces en un equipo de desarrollo que el innoDB no funciona pese a que esta activo..
Si el equipo es un int en mi código le quite lo de SI ya que lo tenga o no hace lo mismo y si dices que mi error es en innoDB a la ora de correrla me mostraría error pero sino coo seria o cual seri el error gracias
Bueno pues la verdad viendo lo que colocas no veo ningún error y ademas sobre lo del problema que puede ser del inno.. en mi caso por ejemplo no me genera error.. pero igual no me inserta registros en ese equipo.
Viendo el problema.. podrías hacer una solución alterna y es hacer un select a la tabla principal antes del insert en la segunda tabla y ver si el registro existe o no... por que como tal no veo por que te falla.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas