表格验证难度

时间:2013-07-19 11:03:37

标签: php codeigniter

我正在使用codeIgniter构建表单。我的表单中有一些必填字段,当必填字段为空时,表单会转到同一页面。我想要做的是当一个必填字段为空时,它会提示一个提示,说明这些字段是必需的。由于我是编程新手,我发现很难做到这个功能。谁能告诉我怎么能这样做呢。谢谢。仅供参考,表格的其他功能还可以。

我的控制器的一部分:

function index() {
    $this->form_validation->set_rules('address', 'address', 'required');
    $this->form_validation->set_rules('area', 'area', '');
    $this->form_validation->set_rules('lat', 'latitude', 'required');
    $this->form_validation->set_rules('lng', 'longitude', 'required');          
    $this->form_validation->set_rules('subject', 'subject', 'required');
    $this->form_validation->set_rules('problem', 'problem detail', 'required');
    // validation hasn't been passed
    if ($this->form_validation->run() == FALSE) 
    {
        $this->load->view('report_view',$data );
    }
    else // passed validation proceed to post success logic
    {
           ///do something.....
    }

我的部分观点:

<?php // Change the css classes to suit your needs    
     $attributes = array('class' => '', 'id' => '');
     echo form_open_multipart('report', $attributes);
?>
<p>
    <br/>
    <label for="address">Address <span class="required">*</span></label>
    <?php echo form_error('address'); ?>
    <br />
    <input id="address" type="text" name="address"
      value="<?php echo  set_value('address'); ?>"  />
</p>

<p>
    <label for="area">Area </label>
    <?php echo form_error('area'); ?>
    <br />
    <input id="area" type="text" name="area"
      value="<?php echo set_value('area'); ?>"  />
</p>

<p>
    <label for="lat">Latitude<span class="required">*</span></label>
    <?php echo form_error('lat'); ?>
    <br />
    <input id="lat" type="text" name="lat"
      value="<?php echo  set_value('lat'); ?>"  />

<p>
    <label for="lng">Longitude<span class="required">*</span></label>
    <?php echo form_error('lng'); ?>
    <br />
    <input id="lng" type="text" name="lng"
      value="<?php echo set_value('lng'); ?>"  />
</p>

<p>
    <label for="subject">Subject:<span class="required">*</span></label>
    <?php echo form_error('subject'); ?>
    <br />
    <input id="subject" type="text" name="subject"
      value="<?php echo set_value('subject'); ?>"  />
</p>

<p>
    <label for="problem">Problem detail:<span class="required">*</span></label>
    <?php echo form_error('problem', '</div>'); ?>
    <br />
    <textarea id="problem" style="width:300px; height:80px"
      type="text" name="problem"><?php echo set_value('problem'); ?>
    </textarea>
</p>

我的模特:

function SaveForm($form_data)
{
    $this->db->insert('info', $form_data);

    if ($this->db->affected_rows() == '1')
    {
        return TRUE;
    }
    return FALSE;
}

4 个答案:

答案 0 :(得分:0)

我找到了有关jquery和ci表单验证的资源..

好像第一个链接比其他链接更好..

  1. https://github.com/GuriK/CodeIgniter-jQuery-Validator
  2. http://gazpo.com/2011/07/codeigniter-jquery-form-validation/
  3. Google Search Results

答案 1 :(得分:0)

你应该从jquery调用你的控制器函数,在调用该函数之前一定要确认文本框是否为空,通过使用if ( $("#textbox").val().length === 0 )提示文件框为空,提示文件框是空的0表示文本框没有值在此之后,您可以使用document.location.href = '<?=base_url()." YOUR_CONTROLLER/FUNCTION?>'

调用控制器功能

P.S:javascript验证可能有风险

答案 2 :(得分:0)

经过测试的示例

您的控制器文件:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Welcome extends CI_Controller {

    public function index()
    {
        $this->load->library('session');
        $this->load->helper('url');
        $this->load->library('form_validation');

        if ($this->input->server('REQUEST_METHOD') == 'POST') { // make sure it's post request

            $this->form_validation->set_error_delimiters('', '');

            $this->form_validation->set_rules('address', '<b>address</b>', 'required|xss_clean');
            $this->form_validation->set_rules('area', '<b>area</b>', 'xss_clean');
            $this->form_validation->set_rules('lat', '<b>lat</b>', 'required|xss_clean');
            $this->form_validation->set_rules('lng', '<b>lng</b>', 'required|xss_clean');
            $this->form_validation->set_rules('subject', '<b>subject</b>', 'required|xss_clean');
            $this->form_validation->set_rules('problem', '<b>problem</b>', 'required|xss_clean');

            if ($this->form_validation->run() !== FALSE) { // validation has passed

                // insert the form data into database
                $this->db->insert('info', $form_data);

                // do other stuff

                redirect('/index.php/success-page');
            } else {
                $this->session->set_userdata($this->session->flashdata_key . ':old:error', 'We have some form error. Please review them!');
            }
        }

        $this->load->view('welcome_message');
    }
}

您的观看文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Welcome to CodeIgniter</title>

    <style type="text/css">

    body {
        background-color: #fff;
        margin: 40px;
        font: 13px/20px normal Helvetica, Arial, sans-serif;
        color: #4F5155;
    }
    </style>
</head>
<body>
    <form method="post">

        <?php if ($this->session->flashdata('error') != '') { ?>
            <?php echo $this->session->flashdata('error');?><br />
        <?php } ?>

        <label>address</label>
        <input type="text" name="address" value="<?php echo set_value('address');?>" /><br />
        <?php if (form_error('address')) { ?><?php echo form_error('address');?><br /><?php } ?>

        <label>area</label>
        <input type="text" name="area" value="<?php echo set_value('area');?>" /><br />
        <?php if (form_error('area')) { ?><?php echo form_error('area');?><br /><?php } ?>

        <label>lat</label>
        <input type="text" name="lat" value="<?php echo set_value('lat');?>" /><br />
        <?php if (form_error('lat')) { ?><?php echo form_error('lat');?><br /><?php } ?>

        <label>lng</label>
        <input type="text" name="lng" value="<?php echo set_value('lng');?>" /><br />
        <?php if (form_error('lng')) { ?><?php echo form_error('lng');?><br /><?php } ?>

        <label>subject</label>
        <input type="text" name="subject" value="<?php echo set_value('subject');?>" /><br />
        <?php if (form_error('subject')) { ?><?php echo form_error('subject');?><br /><?php } ?>

        <label>problem</label>
        <input type="text" name="problem" value="<?php echo set_value('problem');?>" /><br />
        <?php if (form_error('problem')) { ?><?php echo form_error('problem');?><br /><?php } ?>

        <input type="submit" value="Submit">

    </form>
</body>
</html>

备注:
*使用$ this-&gt; input-&gt; server('REQUEST_METHOD')=='POST'以确保表单验证仅在表单提交时运行
*如果您有表单错误,请不要显示其他页面或重定向,只需将用户留在同一页面上即可显示错误

答案 3 :(得分:0)

您可以使用javascript -

验证客户端(在HTML页面上)的表单字段
<script>    
function yourfunctionname()
      {
        if(document.formname.textfieldname.value=="")
            {
                alert("text field is required..");
                document.formname.textfieldname.focus();
                return false;
            }
      }
</script>