Los nombres de campo duplicados te causaran problemas, aunque sean de diferente tipo, todos se reciben en $_POST y no hay manera de saber si el campo "nombre" proviene de un checkbox o un text.
El checkbox por si solo no te puede cambiar el estado de un input text, necesitas recurrir forzosamente a javascript; por ejemplo, tu html podria quedar:
Código html:
Ver original<input type="checkbox" name="act-nombre" value="1" onchange="activar_desactivar('nombre');" /> <input type="text" name="nombre" id="nombre" value ="" disabled="disabled" />
En el checkbox se agrego la opcion onchange, para que cuando cambie el estado se habilite o deshabilite el campo nombre. En el text, se agrego id="nombre" y el estado de deshabilitado.
Sobre la funcion que se requiere en javascript, en el subforo correspondiente te ayudaran mejor de lo que pueda hacerlo yo.
Ahora en tu php (ya sin los campos con nombres duplicados):
Código php:
Ver original// Asigna primero valores por defecto
$campo_text = '';
if(isset($_POST['campo-chekbox'])) { // OK, el checkbox de este campo esta marcado, hay que obtener el valor del campo
$campo_text = $_POST['campo-text'];
// Aqui es donde habria que hacer una validacion, longitud, caracteres permitidos, etc.
}