Problema con insert relacional

Hola david, agradezco tu tiempo para que me colabores con una idea para esta solución, tengo 2 tablas contactos y empresa que funcionan perfectamente pero el php me falla aquí te detallo el código:
::::::::::insertardb :::::::::::::
<html>
<head>
<title>insertar contacto</title>
</head>
<body>
<H1>Insertar Contacto</H1>
<FORM ACTION="procesar.php" METHOD="POST">
<TABLE>
<TR>
<TD>Id_Contacto:</TD>
<TD><INPUT TYPE="text" NAME="idemp" SIZE="20" MAXLENGTH="10"></TD>
</TR>
<TR>
<TD>Id_Empresa:</TD>
<TD><INPUT TYPE="text" NAME="idcont" SIZE="20" MAXLENGTH="30"></TD>
</TR>
</TABLE>
<INPUT TYPE="submit" NAME="accion" VALUE="insertar">
</FORM>
<hr>
<?php
include("conex.php");
$link=Conectarse();
$result=mysql_query("select idcont,idemp,idcom from contacto, empresa",$link);
?>
<TABLE BORDER=1 CELLSPACING=1 CELLPADDING=1>
<TR><TD> <B>Id_Contacto</B></TD> <TD> <B>Id_Empresa</B> </TD></TR>
<?php
while($row = mysql_fetch_array($result) and $row["idemp"] = $row["idcom"]) {
printf("
<tr>
<td> %s</td>
<td> %s </td>
</tr>
", $row["idcont"],$row["idemp"]);
}
mysql_free_result($result);
mysql_close($link);
?>
</table>
</body>
</html>
::::::procesar::::
<?php
ob_start();
extract($_POST);
include("conex.php");
$link=Conectarse();
mysql_select_db("contacto");
mysql_query("insert into contacto(idcontacto,idemp,idcont) values('','$idemp','$idcont')",$link);
header ("Location: insertadb.php");
ob_end_flush();
?>
:::::conex::::
<html>
<head>
<title>Ejemplo de PHP, Conectar Base de datos</title>
</head>
<body>
<?php
function Conectarse()
{
   if (!($link=mysql_connect("localhost","root","")))
   {
      echo "Error conectando a la base de datos.";
      exit();
   }
   if (!mysql_select_db("prueba",$link))
   {
      echo "Error seleccionando la base de datos.";
      exit();
   }
   return $link;
}
?>
</body>
</html>
La cuestión es que quiero agregar un registro a la tabla contacto y al dar click no me adiciona nada. He probado las consultas y están bien... Agradezco una idea para esta solución estoy convencido que mi php algo falla.

1 Respuesta

Respuesta
1
Haría falta ver cual es la estructura de ambas tablas para poder interpretar si el código es correcto o no.
hola david aqui te envio la estructura de las 2 tablas para q me ayudes con una solucion
CREATE TABLE `contacto` (
  `idcontacto` int(50) NOT NULL auto_increment,
  `idemp` int(20) NOT NULL,
  `idcont` int(20) NOT NULL,
  PRIMARY KEY  (`idcontacto`,`idemp`,`idcont`),
  KEY `FK_contacto` (`idemp`),
  CONSTRAINT `contacto_ibfk_1` FOREIGN KEY (`idemp`) REFERENCES `empresa` (`idcom`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*Table structure for table `empresa` */
DROP TABLE IF EXISTS `empresa`;
CREATE TABLE `empresa` (
  `idcom` int(10) NOT NULL auto_increment,
  `user` varchar(10) NOT NULL,
  `empre` varchar(40) NOT NULL,
  `country` varchar(20) NOT NULL,
  `city` varchar(20) NOT NULL,
  `address` varchar(50) NOT NULL,
  `phone` varchar(20) NOT NULL,
  `conname` varchar(20) NOT NULL,
  `date` date NOT NULL default '0000-00-00',
  `descr` text,
  PRIMARY KEY  (`idcom`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC COMMENT='InnoDB free: 11264 kB';
Deberías comprobar si la sentencia sql devuelve algún error, mediante la función mysql_error(). Tienes ejemplos en la documentación on-line:
http://es.php.net/manual/es/function.mysql-error.php
Veo que la SELECT no es correcta puesto que no especificas cómo se debe realizar la unión de las tablas. Si no lo especificas, se realizaría la unión entre campos idénticos. Puesto que se llaman de distinta forma, deberías indicar los campos:
$result=mysql_query("select idcont,idemp,idcom from contacto, empresa ON contacto.idemp=empresa.idcom",$link);
También debes tener en cuenta que has especificado que el campo idemp es clave y por lo tanto, no se admitirá que se repitan valores. Es decir, no podrás asignar dos contactos a la misma empresa.
Hola amigo, gracias por tu aclaración me sirvió mucho aunque el "ON" no se porque no me funciona en el sqlyog cuando lo ejecuto, pero bueno lo cambie por where y el resultado es lo que buscaba.
Gracias...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas