Esta bien el ejemplo anterior pero le voy a hacer una corrección, ya que en estos casos hay que tener cuidado con el uso de php_self, ya que el mismo toma el nombre del archivo y no las variables que le siguen por ejemplo si vos estuvieras usando un sitio modular donde tu pagina se visualiza del siguiente modo
index.php?modulo=formulario_contacto
cuando hagas action con php self va a hacer action sobre index.php solamente y no sobre el formulario
para eso tenes que dejar vacio el action del form
aca te paso un ejemplo que arme para que lo pruebes y te des cuenta de que hablo
Código PHP:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin título</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td>Nombre</td>
<td> </td>
<td><input name="nombre" type="text" id="nombre" /></td>
</tr>
<tr>
<td>Apellido</td>
<td> </td>
<td><input name="apellido" type="text" id="apellido" /></td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td colspan="3"><input name="enviado" type="submit" id="enviado" value="Enviar" /></td>
</tr>
</table>
</form>
<?php
if(isset($_POST['enviado'])){//// la variable enviado es la que corresponde al "name" del boton de submit
echo $_POST['nombre']." ".$_POST['apellido']; ///// imprimo los campos nombre y apellido, aca podes poner lo que quiereas que haga el script despues de que se envia el formulario
}///// no pongo un else para que no haga nada mientras no se envie el post "enviado"
?>
</body>
</html>