insertar registros a diferentes tablas desde php a mysql

shadow sonic

Lanero Reconocido
16 Ene 2004
225
hola
desde php para insertar un registro a una tabla en mysql lo hago asi
PHP:
mysql_db_query("base de datos","INSERT INTO tabla (campo1,campo2) values ('$variable1','$variable2')");

pero mi consulta es:
si quiero ingresar un registro a mas de una tabla como lo hago,esto es lo que quiero hacer,
en la tabla1 ingreso un rut(clave primaria) pero quiero que ese mismo rut que ingrese en la tabla1 tambien se ingrese al mismo tiempo en la tabla2 donde ese mismo rut en la tabla 2 sera clave foranea.

¿como puedo ingresar un mismo registro a 2 tablas al mismo tiempo donde en una tabla sera clave primaria y en otra foranea?

otra consulta
¿si quiero consultar registros que estan en 2 tablas como lo debo hacer?,en una tabla la clave sera primaria pero en la segunda tabla sea foranea,entonces si ingreso un registro de la tabla1 por ejemplo el nombre de algo para que me muestre los datos que estan en la tabla2 como debo hacerlo,si en la tabla uno un campo sera clave primaria y en la segunda tabla sera clave foranea.como puedo conectar las 2 tablas para que muestre los datos.si ingreso un registro que se llama nombre en la tabla1 para que me muestre los datos que estan en la tabla2.

si me puede dar un ejemplo sobre mis dos preguntas se los agredeceria mucho
gracias

pd: ojala que se entienda lo que explique :confused:
 
<?php
$conex = mysql_connect("localhost", "root", "")
or die("NO se pudo realizar la conexión");

// Selección de la base de datos
mysql_select_db("jholy", $conex);

//Preparación y ejecución de la consulta
$cons = "SELECT * FROM usuario where cedula='$T3'";
$resultado = mysql_query($cons,$conex);

//Obtención del número de filas del resultado
$Num_filas = mysql_num_rows($resultado);

if ($Num_filas==0)
{
mysql_query("insert into usuario(cedula,nombre,apellido,direccion,ubicacion,telefono) values('$T3','$T1','$T2','$T5','$T4','$T6')");
//echo "SE A GUARDADO EL NUEVO REGISTRO";
require("nuevo.htm");
}
else
{
mysql_query("UPDATE usuario SET cedula='$T3', nombre='$T1', apellido='$T2', direccion='$T5', ubicacion='$T4', telefono='$T6' WHERE cedula='$T3'");
require("modificar.htm");
}



// Liberamos los recursos de las consultas
mysql_free_result($resultado);

// Se cierra la conexion
mysql_close($conex);



?>
 
Hola, segun lo que entendi, tienes:

Código:
 TABLA1

PK1
CAMPO1
CAMPO2

TABLA 2

PK2
FK2 (referencia a PK1)
CAMPO1
CAMPO2

y quieres poder insertar en las dos tablas XX datos

PHP:
 //lo que tienes que hacer es 2 mysql_query():
$pk1 = mysql_query("INSERT INTO tabla1 (campo1, campo2) VALUES ($campo1,$campo2)");

// luego haces un 
$id = mysql_insert_id($pk1); //para saber la PK insertada en la tabla TABLA1 y luego

mysql_query("INSERT INTO tabla2 (fk, campo1, campo2) VALUES ($id, $campo1, $campo2)");

para mostrar los datos haces lo mismo pero con un SELECT y ya

espero haber sido de ayuda, saludos y suerte
 
cuando lleno el formulario y hago click en registrar siempre me sale el mensaje Debe llenar los campos y yo lleno todos los campos del formulario pero no ingresa nada cual puede ser el problema o que tengo malo en el codigo.
gracias

este es mi formulario html
Código:
<html>
<head><title>Ingresar Nuevo Profesor</title>

<body>


<BR><BR>
<h1><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ingresar Nuevo Profesor</b></h1>
<BR><BR><BR>

<form method="POST" action="clase.php">
  <table border="0" cellpadding="0" cellspacing="0" align=center>
  <tr>
    <td width="50%">Rut:</td>
    <td width="50%" align="center"><input size="20" name="rut"></td>
  </tr>
  <tr>
    <td width="50%">Nombre</td>
    <td width="50%" align="center"><input size="20" name="nombre"></td>
  </tr>
    <tr>
    <td width="50%">Apellido</td>
    <td width="50%" align="center"><input size="20" name="apellido"></td>
  </tr>
     <tr>
    <td width="50%">Telefono</td>
    <td width="50%" align="center"><input size="20" name="telefono"></td>
  </tr>
    <tr>
    <td width="50%">E-mail</td>
    <td width="50%" align="center"><input size="20" name="email"></td>
  </tr>

  <tr>
    <td width="50%"><h1><br>Ingreso Asignatura</h1></td>
    </tr>

   <tr>
    <td width="50%">Codigo Asignatura</td>
    <td width="50%" align="center"><input size="20" name="codigo"></td>
  </tr>
    <tr>
    <td width="50%">Nombre Asignatura</td>
    <td width="50%" align="center"><input size="20" name="nombre_asig"></td>
  </tr>
     <tr>
    <td width="50%">Cantidad Alumnos</td>
    <td width="50%" align="center"><input size="20" name="alumnos"></td>
  </tr>

</table>





<BR><BR><BR>

<table border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td width="50%">
  <input type="submit" value="Registrar" name="registrar" ></td>
    <td width="50%">
  <input type="reset" value="Borrar Formulario" style="float: right" ></td>
  </tr>
</table>

</form>
</head>
</body>
</html>






esta es mi clase php con cual ingreso los datos
PHP:
<?php
   class Asignatura_datos
{
     var $rut;
     var $nombre;
     var $apellido;
     var $telefono;
     var $email;
     var $pk1;
     var $id;
     var $codigo;
     var $nombre_asig;
     var $alumnos;


     function ingreso($rut,$nombre,$apellido,$telefono,$email,$id,$codigo,$nombre_asig,$alumnos)
     {
     $this->rut=$rut;
     $this->nombre=$nombre;
     $this->apellido=$apellido;
     $this->telefono=$telefono;
     $this->email=$email;
     $this->id=$id;
     $this->codigo=$codigo;
     $this->nombre=$nombre_asig;
     $this->alumnos=$alumnos;


     if ($this->rut=="" and $this->nombre=="" and $this->apellido=="" and $this->telefono=="" and $this->email==""
        and $this->id=="" and $this->codigo=="" and $this->nombre_asig=="" and $this->alumnos=="")
   {
   echo "<center><b>Debe llenar los campos</center></b>";
   }
else
  {
    if($this->rut==true and $this->nombre==true and $this->apellido==true and $this->telefono==true and $this->email==true
    and $this->id==true and $this->codigo==true and $this->nombre_asig==true and $this->alumnos==true)
      {

      mysql_connect("localhost","root","");

      $this->pk1=mysql_db_query("sase","INSERT INTO PROFESOR (RUT,NOMBRE,APELLIDO,FONO,E_MAIL) values ('$this->rut','$this->nombre','$this->apellido','$this->telefono','$this->email')");
      $this->id=@mysql_insert_id($this->pk1);
      @mysql_query( "sase","INSERT INTO ASIGNATURA (COD_ASIGNATURA,RUT,NOMBRE,CANT_ALUM) values ('$this->codigo','$this->id','$this->nombre_asig','$this->alumnos')");

      mysql_close();
      echo "<b><center>Registro ingresado</center></b>";
      }
    else
      {
      echo "<b><center>Debe llenar los campos</center></b>";
      }
      }

    }}
?>


y esta es la clase que llamo desde el formulario

PHP:
<?php

include ("Asignatura_datos.php");
$ing=new Asignatura_datos();
$ing->ingreso($rut,$nombre,$apellido,$telefono,$email,$id,$codigo,$nombre,$alumnos);

?>
 
Hola de nuevo solo una pregunta, porque no haces la validacion de los campos con javascript??? en Mr Google hay muchos ejemplos
 
arthvrian dijo:
Hola de nuevo solo una pregunta, porque no haces la validacion de los campos con javascript??? en Mr Google hay muchos ejemplos
hola
en la clase php me muestra el mensaje "debe llenar los campos" que esta al final (en esta parte)
Código:
 mysql_close();
      echo "<b><center>Registro ingresado</center></b>";
      }
    else
      {
      echo "<b><center>Debe llenar los campos</center></b>";
      }
      }
eso quiere decir que entra al codigo
una pregunta esto lo tengo bien hecho,aqui ingreso la pk(la pk de la tabla1 se llama RUT) a la tabla1 que en este caso se llama "PROFESOR" y a la vez deberia copiarse a la tabla2 que se llama "ASIGNATURA" para quedar como fk(en la tabla dos tambien se llama RUT pero aqui sera fk) de la tabla ASIGNATURA.
PHP:
<php
$this->pk1=mysql_db_query("sase","INSERT INTO PROFESOR (RUT,NOMBRE,APELLIDO,FONO,E_MAIL) values ('$this->rut','$this->nombre','$this->apellido','$this->telefono','$this->email')");
      $this->id=@mysql_insert_id($this->pk1);
      @mysql_query( "sase","INSERT INTO ASIGNATURA (COD_ASIGNATURA,RUT,NOMBRE,CANT_ALUM) values ('$this->codigo','$this->id','$this->nombre_asig','$this->alumnos')");
?>
gracias
pd:y no lo hago con javascript porque ahora ya no tengo tiempo para buscar en google porque tengo que entregar este trabajo mañana a las 8 de la mañana.
 
lo otro coloque esto al final de la funcion ingresar para ver si esta pasando los valores a la variable y si las variables contienen los valores que le ingreso desde el formulario pero el problema esta que no ingreso esos valores a la base de datos.
que puede ser :(

PHP:
<php
echo $this->rut;
    echo $this->nombre;
    echo $this->apellido;
    echo $this->telefono;
    echo $this->email;
    echo $this->id;
    echo $this->codigo;
    echo $this->nombre;
    echo $this->alumnos;
?>
 
prueba esto:
PHP:
<?php
   echo "<center><b>Debe llenar los campos</center></b>";
   echo $this->rut;
    echo $this->nombre;
    echo $this->apellido;
    echo $this->telefono;
    echo $this->email;
    echo $this->id;
    echo $this->codigo;
    echo $this->nombre;
    echo $this->alumnos;
exit();
?>

o si no
Código:
[b]javascript [/b]
function MM_validateForm() { //v4.0
  var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
  for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);
	if (val) { nm=val.name; if ((val=val.value)!="") {
	  if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
		if (p<1 || p==(val.length-1)) errors+='- '+nm+' debe ser una dirección de correo valida.\n';
	  } else if (test!='R') { num = parseFloat(val);
		if (isNaN(val)) errors+='- '+nm+' debe ser numerico.\n';
		if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
		  min=test.substring(8,p); max=test.substring(p+1);
		  if (num<min || max<num) errors+='- '+nm+' debe ser un número entre '+min+' y '+max+'.\n';
	} } } else if (test.charAt(0) == 'R') errors += '- '+nm+' es un campo requerido.\n'; }
  } if (errors) alert('Error(es) ocurrido(s):\n\n'+errors);
  document.MM_returnValue = (errors == '');
}

y reemplaza el boton con
Código:
<input name="Submit" type="submit" onClick="MM_validateForm('Nombre','','R','Campo2','R'');return document.MM_returnValue" value="Enviar">

donde Campo2 se repetira con el respectivo nombre del campo del formulario tantas veces como sea necesario

la R es de requerido

saldudos y suerte
 
arthvrian dijo:
prueba esto:
PHP:
<?php
   echo "<center><b>Debe llenar los campos</center></b>";
   echo $this->rut;
    echo $this->nombre;
    echo $this->apellido;
    echo $this->telefono;
    echo $this->email;
    echo $this->id;
    echo $this->codigo;
    echo $this->nombre;
    echo $this->alumnos;
exit();
?>

o si no
Código:
[b]javascript [/b]
function MM_validateForm() { //v4.0
  var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
  for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);
	if (val) { nm=val.name; if ((val=val.value)!="") {
	  if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
		if (p<1 || p==(val.length-1)) errors+='- '+nm+' debe ser una dirección de correo valida.\n';
	  } else if (test!='R') { num = parseFloat(val);
		if (isNaN(val)) errors+='- '+nm+' debe ser numerico.\n';
		if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
		  min=test.substring(8,p); max=test.substring(p+1);
		  if (num<min || max<num) errors+='- '+nm+' debe ser un número entre '+min+' y '+max+'.\n';
	} } } else if (test.charAt(0) == 'R') errors += '- '+nm+' es un campo requerido.\n'; }
  } if (errors) alert('Error(es) ocurrido(s):\n\n'+errors);
  document.MM_returnValue = (errors == '');
}

y reemplaza el boton con
Código:
<input name="Submit" type="submit" onClick="MM_validateForm('Nombre','','R','Campo2','R'');return document.MM_returnValue" value="Enviar">

donde Campo2 se repetira con el respectivo nombre del campo del formulario tantas veces como sea necesario

la R es de requerido

saldudos y suerte


gracias por ayudarme
voy a prbar eso de validar con javascript y en cuanto al programa la falla me la esta dando en insertar la clave primaria de la tabla1 e insertarla como foranea en la tabla2.

pero no logro solucionarlo
tu logras encontrar alguna falla en esta parte del codigo
PHP:
<php
$this->pk1=mysql_db_query("sase","INSERT INTO PROFESOR (RUT,NOMBRE,APELLIDO,FONO,E_MAIL) values ('$this->rut','$this->nombre','$this->apellido','$this->telefono','$this->email')");
      $this->id=@mysql_insert_id($this->pk1);
      @mysql_query( "sase","INSERT INTO ASIGNATURA (COD_ASIGNATURA,RUT,NOMBRE,CANT_ALUM) values ('$this->codigo','$this->id','$this->nombre_asig','$this->alumnos')");
?>