Tienes toda la razon!
VERSION con menos errores
Código PHP:
<?php
/*
Helper para formularios JFORM (incluyen llamadas JS)
JS desarrollado por JOTFORM
JS alojado en http://www.2shared.com/document/sPHAvxc1/form.html
*/
/* agrega campo oculto si no se dice que no */
function form_close($extra = '',$hidden_sent=true) {
if ($hidden_sent){
$hidden_sent= form_hidden('sent', 'sent');
}else{
$hidden_sent='';
}
return $hidden_sent.'</form>'.$extra;
}
function jform_open($url,$title=null,$js=true) {
if ($js){
$js_open = '<script src="'.PATH_JS.'form.js" type="text/javascript"></script>';
}else{
$js_open='';
}
$style = '<style>input { width:320px;}
input.boton {width:75px;height:25px;}
</style>';
if ($title!=null){
$heading = $title;
}
return $style.$js_open.$heading.form_open($url,'name="q_form_72680528871"');
}
function jform_close($html='',$hidden_sent=true) {
if ($hidden_sent){
$hidden_sent= form_hidden('sent', 'sent');
}else{
$hidden_sent='';
}
return $hidden_sent.'</form>'.$html.'<script type="text/javascript">validate("q_form_72680528871");</script>';
}
function form_send_button($title='Enviar'){
return "<input type=\"submit\" class=\"boton\" value=\"$title\" />";
}
/*
required = Email | Required
*/
function jform_input($name,$label='',$type='text',$value='',$required='Required'){
$onblur = '';
if ($label!=''){
if ($required!=false){
$span = '<span class="required">*</span>';
$onblur = "onblur=\"validate(this,'$required')\"";
}else{
$span = '';
}
$label= "<label>$label $span</label><br/>";
}
// No remover los <p></p> o el JS deja de funcionar!
return "<p>$label
<input type=\"$type\" size=\"50\" name=\"$name\" $onblur value=\"$value\" /></p>";
}
/* devuelve TRUE si el form fue enviado */
function form_sent(){
$CI = &get_instance();
return $CI->input->post('sent')=='sent';
}
//uso: input_value('fullname',$userdata);
function value ($field,$userdata){
$CI = &get_instance();
return (form_sent() ? $CI->input->post($field) : $userdata->{$field});
}
/*
Form data extractor and cleanner -> usar en controllers
devuelve array limpio para insersion / actualizacion en DB
*/
function form_data(){
$CI = &get_instance();
$userdata = $CI->input->post();
unset ($userdata['submit']);
unset ($userdata['sent']); /* campo oculto */
return $userdata;
}
Y ejemplo de uso (tambien actualizado!)
Código PHP:
<?= jform_open('cpanel/account/validate','<h3><span>Cuenta</span> usuario</h3>'); ?>
<?= jform_input('fullname','Su nombre:','text',form_sent() ? $this->input->post('fullname') : $userdata[0]->fullname,'Required'); ?>
<?= jform_input('email','E-mail:','text',form_sent() ? $this->input->post('email') : $userdata[0]->email,'Email'); ?>
<?= jform_input('paypal_email','Paypal:','text',form_sent() ? $this->input->post('paypal_email') : $userdata[0]->paypal_email,'Email'); ?>
<?= jform_input('country','Pais:','text',form_sent() ? $this->input->post('country') : $userdata[0]->country); ?>
<p class="clear"></p>
<?= br().form_send_button ('Actualizar'); ?>
<?= jform_close(); ?>
Y...como yapa... utilizando la funcion
value() se puede simplificar mucho mas el codigo que se deberia colocar en <input name="..." value="" .. ya que ya no es necesario andar con condicionales sobre si el dato proviene de la base de datos o de... el form recien enviado donde $userdata es un arreglo de objetos que proviene de la consulta al modelo y logicamente $userdata[0] es el objeto que contiene la informacion del registro tal como viene de la DB
Código PHP:
<?= jform_input('fullname','Su nombre:','text', value('fullname',$userdata[0]),'Required'); ?>
Ademas...
form_data() limpia el array de $_POST devuelto al enviarse el formulario dejandolo limpio para hacer inserciones, actualizaciones en la DB:
Código PHP:
$userdata = form_data();
$this->user_m->user_update($userdata);
Cabe aclarar que form_close() fue extendida de igual forma que jform_close() para agregar el campo oculto de verificacion de formulario enviado con form_sent()
Gracias amigos...por sus correcciones!