Hola. La explicación sobre porque no quiero validar en JavaScript era un resumen. 
 
Evidentemente se puede validar en Javascript y en PHP a la vez, aunque vuelvo a decir que NUNCA lo haría en javascript. En todo caso haría la validación en php mediante una llamada AJAX desde JS (así es más agradable para el usuario), pero la propia validacion de campos nunca en JS. Además que por la seguridad, siempre es mejor que el usuario sepa lo menos posible del codigo de la web. 
El formulario lo uso para enviar emails. Lo he hecho como dice GatorV, pero sin el header y un action= a la propia página.     
Código PHP:
Ver original<?php
    //Enviar mail
    include('send.php');
    
    //Controlar doble Post
    require("postClass.php");
    $thisPost = new Post_Block;
 
        //Evitar caracteres extraños en la cadena
    function limpiarCadena($cadena){
        $cadena = preg_replace("/¡|\^|'|:|@|#|\$|%|&|\"|~|\+|\*|\/|\||\\|\[|\]|\(|\)|\{|\}/","",$cadena);         return $cadena;
    }
 
        //sintaxis email
    function limpiarEmail($email){
        $mail_correcto = 0; 
        //compruebo unas cosas primeras 
            //miro si tiene caracter . 
                //obtengo la terminacion del dominio 
                    //compruebo que la terminación del dominio sea correcta 
                    //compruebo que lo de antes del dominio sea correcto 
                        if ($caracter_ult != "@" && $caracter_ult != "."){ 
                            $mail_correcto = 1; 
                        } 
                    } 
                } 
            } 
        } 
        if ($mail_correcto)         return 1; 
        else                        return 0; 
    }
    
 
 
    if(isset($_POST['postID']))     
    if ($thisPost->postBlock($_POST['postID'])) {
        
        
        if( (isset($_POST["mensaje"])) && (isset($_POST["email"])) )             //Si el campo Nombre está activo y tiene contenido....                      
                
            if( ($_POST["email"] != '') && (limpiarEmail($_POST["email"])) )
                
                if( ($_POST["mensaje"] != '') ){
                    
                    $mail = new enviarMail();            
                    $rslt = $mail->sendMsg($_POST["email"],$_POST["name"],$_POST["topic"],$_POST["mensaje"],$_SESSION["lang"]);
                        
                    if ($rslt)  $rtdoMensaje = "Mensaje enviado";
                    else        $rtdoMensaje = "Error al enviar el mensaje. Intentalo de nuevo.";
                }
                else
                    
                    $controlMensaje = "<span style='color:red'> (Campo mensaje requerido)</span>";     
            else
                
                $controlMail = "<span style='color:red'> (Campo mail requerido)</span>";               
                    
    }
 
        
?>
  
      
Código HTML:
Ver original<form method="post" action="?x=ctt">         
        
        <!-- Textarea -->        
        <?php if(isset($controlMensaje)) echo $controlMensaje; ?>
        <textarea name="mensaje" style="height:225px; width:480px;" ><?php if(isset($_POST["mensaje"])) echo $_POST["mensaje"] ?></textarea>   
        
        <!-- Textbox Email -->                
        <?php if(isset($controlMail)) echo $controlMail; ?>        
                type="text" 
                name="email" 
                value="<?php if(isset($_POST["email"])) echo $_POST["email"] ?>"              
          />   
             
        <!-- Boton Enviar -->  
         <input type="submit" style="width:auto; cursor:pointer" value="Enviar"><?php if(isset($rtdoMensaje)) echo $rtdoMensaje; ?>  
            
        <?php $thisPost->startPost(); ?>