Q:

Error al ingresar datos a MYSQL

Lo que pasa es que todo funcionaba bien hasta que añadi codsem -> que es codigo semestre.
Ahora me dice asistencia registrada cuando no existe el alumno y ni si quiera.
<?php
$link = mysql_connect('localhost', 'root', '') or die('No se pudo conectar: ' . mysql_error());
echo 'Connected succedsrssfully';
mysql_select_db('controlasistencia') or die('No se pudo seleccionar la base de datos');
$query = 'SELECT * FROM asistencia';
$codes=$_POST['codes'];
$coddo=$_POST['coddo'];
$codsem=$_POST['codsem'];
$query_search = "Insert into asistencia (coddo,codsem,codes) values ('".$codes."','".$coddo."','".$codsem."')";
$query_exec = mysql_query($query_search) or die(mysql_error());
mysql_close($link);
?>

Como podría hacer para que cuando estudiante no exista en la tabla y yo trate de ingresar su asistencia me de un error
Aqui dejo la tabla asistencia
CREATE TABLE `asistencia` (
`coddo` bigint(20) NOT NULL,
`codsem` bigint(20) NOT NULL,
`codes` bigint(20) NOT NULL,
`fecha` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Y sus key
ALTER TABLE `asistencia`
ADD KEY `codsem` (`codsem`),
ADD KEY `codes` (`codes`),
ADD KEY `coddo` (`coddo`);

A:

La mejor manera, es la que te han mencionado, creado relaciones entre dichas tablas, con claves foráneas.
También tienes que tener en cuenta que mysql ha quedado obsoleta según la documentación oficial y en su lugar debería usar mysqli, o personalmente te aconsejo sentencias preparadas. 

Manual sentencias preparadas: 
https://secure.php.net/manual/es/mysqli.prepare.php

Aun así, voy a dejar un ejemplo, como podría quedar sin claves foráneas, pero simplemente haciendo una comprobación si existen alguna relación, y en caso si existe inserta los datos.
Para ello hacemos un SELECT en la tabla estudiante donde imaginemos que has puesto la columna código con la misma relación que tu tabla asistencia, columna codsem, importante que el código sea único (unique), para poder trabajar como identificador. 
El código podría quedar de la siguiente manera:
<?php    
//Data conexión.
$servidor = 'localhost';
$usuario = 'root';
$contrasena = '';
$base_datos = 'controlasistencia';

//Conexión.
$link = mysqli_connect($servidor, $usuario, $contrasena, $base_datos);

//Comprobamos conexión.
if (!$link) {
    die("No se pude conectar: " . mysqli_connect_error());
} 

echo "Conectado con exito";

//Obtenemos datos de manera mas segura (mysqli_real_escape_string).
$codes = mysqli_real_escape_string($link,$_POST['codes']);
$coddo = mysqli_real_escape_string($link,$_POST['coddo']);
$codsem = mysqli_real_escape_string($link,$_POST['codsem']);

//Sentencia, comprobación existencia.
$existe = mysqli_query($link,"SELECT codigo FROM estudiantes WHERE codigo='$codsem' ");
//Comprobamos existencia.
if (mysqli_num_rows($existe) === 1) {

  //Sentencia, insertar registro.
  $insertar = mysqli_query($link,"INSERT INTO asistencia (coddo,codsem,codes) VALUES ('".$codes"','".$coddo"','".$codsem"')");

  if ($insertar) {    
    echo "El registro se inserto con exito.";
  } else {
    echo "Hubo un error, no se inserto el registro.";
  }

} else { //Caso falso, tu mensaje de error.
  //Mensaje.
  echo "0 registros encontrados.";
}
//Cerramos conexión.
mysqli_close($link);

