Hola, ten en cuenta que de la forma en que lo has programado, una vez un usuario envía el formulario, si volviera a recargar la pagina, volvería a insertar en la base de datos, ya que seguiría existiendo la variable $_POST
Mi recomendación es que en el action del formulario pongas otra pagina, por ejemplo insertar_receta.php con el codigo:
Código PHP:
if(isset($_POST["enviar"])) {
// ATENCIO, NO ESTABAS ESCAPANDO LOS CARACTERES DE LAS VARIABLES, ES UN GRAN RIESGO DE SEGURIDAD
$link = mysqli_connect("localhost", "root", "", "recetario");
$nombre = mysqli_real_escape_string($link, $_POST['nombre']);
$autor= mysqli_real_escape_string($link, $_POST['autor']);
$receta= mysqli_real_escape_string($link, $_POST['receta']);
$sql = "INSERT INTO recetas(nombre, autor, receta)";
$sql .= "VALUES('".$nombre."', '".$autor."', '".$receta."')";
$result = mysqli_query($link, $sql);
$msg = "¡Gracias, hemos recibido tu receta!.\n";
// Una vez se han echo las operaciones rediriges a la web del formulario pasando como $_GET un msg
header("Location: recogida_datos.php?msg=".$msg);
}
De esta forma una pagina tendra el formulario y lo mandara los datos a otra pagina donde escribira en la base de datos y volvera a la web del formulario con un $_GET['msg']
Código PHP:
// Si esta la variable GET, significa que ha vuelto del formulario, con un mensaje.
if(isset($_GET["msg"])) {
echo $_GET["msg"];
}