finalizar un formulario

Antes que nada hola a todos, ya que soy nuevo aqui. Enhorabuena a comocreartuweb, espectacular. No tenia ni idea de hacer paginas (y aun poca ida tengo) pero he hecho una bastante curiosa para ser la primera y estoy terminando el formulario.

Es posible que este post ya este abirno, si es asi redirigirme por favor, pero no lo encontre entre los que lei.

Eh hecho los tres cursos propuestos aqui, html, css y php, pero no me quedo claro un detalle para finalizar.
La base de dato esta hecha y el formulario tambien pero aqui me falta un detalle.
La pagina se llamaba programas.html. ¿al incluirle el formulario debo renombrarla? (programas.php) ¿es decir los codigos php se ponen dentro de body de html? o el formulario se hace a parte?
y al comensar el formulario otra duda.
<form method="post" action="#"> que es lo que va despues de action, se que es un archivo php, pero es la misma pagina donde estan los codigo o no?
Hola:

Bienvenido al foro.

Siempre que un archivo tenga código PHP, el archivo debe llamarse .php, de lo contrario el servidor no sabrá que hacer con él.

los codigos php se ponen dentro de body de html? o el formulario se hace a parte?

El código PHP se puede escribir donde sea dentro de la página. Por ejemplo:

<?php
  $valor = '';

  if( isset( $_POST['valor'] ) )
    $valor = $_POST['valor'];
?>
<!DOCTYPE html>
<html>
  <head>
    <title>Ejemplo PHP</title>
  </head>
  <body>
    <form action="#" method="post">
      <input type="text" name="valor" />
      <input type="submit" />
    </form>
    <?php
      if( ! empty( $valor ) )
        echo "<p>El valor ingresado es $valor.</p>";
    ?>
  </body>
</html>

Si te fijas, el código PHP se escribió en lugares distintos y aún así funciona (copia y pega el código en un archivo .php para que veas el funcionamiento).

En el atributo action debe ir la ruta y el nombre del archivo PHP que procesará los datos. Este archivo puede ser el mismo archivo que tiene el formulario (en cuyo caso se especifica action="#" o action="<?php $_SERVER['PHP_SELF'] ?>" - ambos son iguales, aunque yo prefiero la última) o un archivo .php separado (entonces action sería así: action="nombre_archivo.php").

Espero que mi respuesta te sirva.

Saludos.
Muchas gracias por la respuesta. He puesto los codigos php en otro archivo como me dijiste y con lo que creí terminar, pero ahora lo subo y algo he hecho mal por que me sale esto

Forbidden

You don't have permission to access /formulario.php on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

Me hechais una mano en orientarme donde me he equivocado [:)]

Aclaro por si sirve. Mi servidos es 1and1 y el acceso a mysql y phpmyadmin no son iguales a los de la explicacion de aqui. me refiero que no me dirijio a cpanel y me pidio contraseña y demas.

Gracias
Ok, despues de mucho trastear, no se si lo he empeorado o mejorado jajajajaja. La cuestion es que ahora parece foncionar todo, entras correcto, rellenas, envias y aparece el cartel de gracias por su bla bla. Pero los datos enviados no los encuentro en la base de tados. por que puede ser?
Hmmm no te aparece ningún error?

Escribe esto al comienzo del script que procesa la información:

error_reporting( E_ALL );
gracias skaparate, voy a probar eso que me dices. de todas formas dejo aqui los codigos, por si asi es mas facil detectar el problema.

El archivo formulario.php
<?php
include("config.php") ;

mysql_connect($server, $db_user, $db_pass) or die ("No se puede conectar con el servidor" .mysql_error());

mysql_select_db($database) or die ("No se puede acceder a la base de datos" .mysql_error());
mysql_query ("INSERT INTO `basededatos`.`USUARIOS` (`NOMBRE`, `APELLIDOS`, `FNACIMIENTO`, `PROFESION`, `CIUDAD`, `PROVINCIA`, `TELEFONO`, `EMAIL`, `CARNET`, `AUTONOMO`, `HERRAMIENTAS`, `VEICULO`, `COMENTARIO`)
VALUES (
'$_POST',
'$_POST',
'$_POST',
'$_POST',
'$_POST',
'$_POST',
'$_POST',
'$_POST[correo eliminado]',
'$_POST',
'$_POST',
'$_POST',
'$_POST',
'$_POST') ");
?>

El archivo ficha.html (donde esta el formulario)

<form method="post" action="formulario.php">

<input type="text" name="NOMBRE" placeholder="Nombre" maxlength=20 required autocomplete />

<input type="text" name="APELLIDOS" placeholder="Apellidos" maxlength=20 required autocomplete>

<input type="text" name="FNACIMIENTO" placeholder="F. nacimiento dd/mm/aaaa" maxlength=10 required autocomplete />

<input type="text" name="PROFESION" placeholder="Profesión" maxlength=20 required autocomplete /><br>

<input type="text" name="CIUDAD" placeholder="Ciudad" maxlength=20 required autocomplete />

<input type="text" value="Malaga" name="PROVINCIA" maxlengh="20" disabled />

<input type="text" name="TELEFONO" placeholder="Telefono" maxlength="20" required autocomplete>

<input type="text" name="EMAIL" placeholder="e-mail" maxlength="40" required autocomplete> <br>

<p>¿Tienes carnet de conducir?....................... <select name="CARNET" size=1 >
<option value="Si">Si</option>
<option value="No">No</option>
</select> </p>

<p>¿Eres autónomo?....................................... <select name="AUTONOMO" size=1 >
<option value="Si">Si</option>
<option value="No">No</option>
</select> </p>

<p>¿Tienes herramientas para tu oficio?........... <select name="HERRAMIENTAS" size=1 >
<option value="Si">Si</option>
<option value="No">No</option>
</select> </p>

<p>¿Tienes veiculo?.........................................<select name="VEICULO" size=1 >
<option value="Si">Si</option>
<option value="No">No</option>
</select> </p>

<textarea rows="6" cols="35" name= "COMENTARIOS" wrap="soft" maxlength="200" placeholder="Comentario (Máximo 200 caracteres)"></textarea> <br>

<input type="submit" value="Enviar" name="Enviar" />
<input type="reset" value="Borrar" name="Restablecer" />
</form>
Forbidden

You don't have permission to access /formulario.php on this server.

Eso significa que el archivo no tiene permisos de escritura o que le diste una ruta inexistente. En Linux, el archivo debe tener permisos 644 (en el administrador de archivos deberías poder modificarlo).

Modifica el archivo formulario.php para que quede así:

<?php
include("config.php") ;

mysql_connect($server, $db_user, $db_pass) or die ("No se puede conectar con el servidor" .mysql_error());

mysql_select_db($database) or die ("No se puede acceder a la base de datos" .mysql_error());
mysql_query ("INSERT INTO `basededatos`.`USUARIOS` (`NOMBRE`, `APELLIDOS`, `FNACIMIENTO`, `PROFESION`, `CIUDAD`, `PROVINCIA`, `TELEFONO`, `EMAIL`, `CARNET`, `AUTONOMO`, `HERRAMIENTAS`, `VEICULO`, `COMENTARIO`) 
VALUES (
'$_POST[NOMBRE]', 
'$_POST[APELLIDOS]',
'$_POST[FNACIMIENTO]',
'$_POST[PROFESION]',
'$_POST[CUIDAD]',
'$_POST[PROVINCIA]',
'$_POST[TELEFONO]',
'$_POST[EMAIL]',
'$_POST[CARNET]',
'$_POST[AUTONOMO]',
'$_POST[HERRAMIENTAS]',
'$_POST[VEICULO]',
'$_POST[COMENTARIO]') ");

if( mysql_affected_rows() >= 1 )
  echo "Datos guardados";
else
  echo "No se han guardado los datos. " . mysql_error();
?>
Gracias de nuevo, voy a probarlo cuando el servidor vuelva a funcionar y te comento

de todas fromas te cuento que cuando relleno el formulario no me aparece ningun error y el archivo formulario tiene su permiso 644
Buenos dias.

Eh podido cargar por fin la pagina y hacer una prueba, y me sale "No se han guardado los datos" ¿Por que puede ser?
Terminado, el problema estaba en que un campo dd la tabla de datos estaba mal escrito.
MUCHAAAS GRACIAS [:D]
Una cosita mas, podrian hecharle una mirada a esto, es curioso pero el mensaje correo electronico si me llega pero el nombre no, y no encuentro la diferencia

<?php
include("config.php") ;
mysql_connect($server, $db_user, $db_pass) or die ("No se puede conectar con el servidor" .mysql_error());

mysql_select_db($database) or die ("No se puede acceder a la base de datos" .mysql_error());
mysql_query ("INSERT INTO `db443088270`.`USUARIOS` (`NOMBRE`, `APELLIDOS`, `FNACIMIENTO`, `PROFESION`, `CIUDAD`, `PROVINCIA`, `TELEFONO`, `EMAIL`, `CARNET`, `AUTONOMO`, `HERRAMIENTAS`, `VEICULO`, `COMENTARIO`) 
VALUES (
'$_POST[NOMBRE]', 
'$_POST[APELLIDOS]',
'$_POST[FNACIMIENTO]',
'$_POST[PROFESION]',
'$_POST[CIUDAD]',
'$_POST[PROVINCIA]',
'$_POST[TELEFONO]',
'$_POST[EMAIL]',
'$_POST[CARNET]',
'$_POST[AUTONOMO]',
'$_POST[HERRAMIENTAS]',
'$_POST[VEICULO]',
'$_POST[COMENTARIO]') "); 

$nombre = $_POST['NOMBRE'];
$correo = $_POST['EMAIL'];

$correo = '[correo eliminado]';
$asunto = 'Titulo del mensaje' ;
$mensaje= "Nombre:" .$nombre. "\r\n"; 
$mensaje= "Correo electronico:" .$correo. "\r\n"; 

 mail($correo, $asunto, $mensaje); 

   if( mysql_affected_rows() >= 1 )
  echo "Tus datos se han enviado correctamente. Gracias por tu tiempo.";
else
  echo "No se han guardado los datos. Si ya nos habias enviado tus datos antes, tranquilo que los hemos guardado. En caso contrario, vuelva a intentarlo más tarde" . mysql_error();
  ?>
ya me di cuenta de que faltaba el punto antes del igual en el resto de codigos de $info. lo dejo escrito por si sirve para el futuro. Gracias por la ayuda. Formulario terminado.