【问题标题】:PHP Code Igniter Form Validation Not WorkingPHP Codeigniter 表单验证不起作用
【发布时间】:2016-07-07 08:48:03
【问题描述】:

我正在使用 PHP Code Igniter,但在进行表单验证时遇到了问题。我遵循了 Code Igniter 上的表单验证教程,但它不起作用。将空字段提交到数据库。

我将表单验证规则集添加到控制器中的索引函数中。

控制器:

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

class Phonebook extends CI_Controller {

  var $TPL;

  public function __construct()
  {
    parent::__construct(); 

    $this->TPL['newentry'] = false;
    $this->load->library(array('form_validation')); // load form lidation libaray & session library
    $this->load->helper(array('url','form'));  // load url,html,form helpers optional
  }

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

    $TPL->form_validation->set_rules('fname', 'First Name', 'required|min_length[5]|max_length[12]|is_unique[phonebook.fname]');
    $this->form_validation->set_rules('lname', 'Last Name', 'required|matches[passconf]');
    $this->form_validation->set_rules('phone', 'Password Confirmation', 'required');
    $this->form_validation->set_rules('email', 'Email', 'required|valid_email|is_unique[phonebook.email]');

    if ($this->form_validation->run() == FALSE)
    {
      $this->load->view('phonebook_view');
    }
    else
    {
      $this->load->view('success_message');
    }
  }

  public function newentry()
  { 
    $fname = $this->input->post("fname");
    $lname = $this->input->post("lname");
    $phone = $this->input->post("phone");
    $email = $this->input->post("email");
    $query = $this->db->query("INSERT INTO phonebook VALUES (NULL, '$fname', '$lname', '$phone', '$email', NULL, NULL, NULL, NULL);");

    $this->display(); 
  }

  public function addnew()
  {
    $this->TPL['newentry'] = TRUE;

    $this->display();
  }

}

还有视图文件。

<html>
<body>
<h1><a href="<?= base_url()?>">Phonebook</a></h1>

<? if ($newentry) { ?>

<?= form_open('Phonebook/newentry') ?>
<?= form_fieldset("Add Entry") ?>
<?= form_label('First Name:', 'fname'); ?> <br>
<?= form_input(array('name' => 'fname',
 'id' => 'fname')); ?> <br>
<?= form_label('Last Name:', 'lname'); ?> <br>
<?= form_input(array('name' => 'lname', 
 'id' => 'lname')); ?> <br>
<?= form_label('Phone Number:', 'phone'); ?> <br>
<?= form_input(array('name' => 'phone',
 'id' => 'phone')); ?> <br>
<?= form_label('E-mail:', 'email'); ?> <br>
<?= form_input(array('name' => 'email',
 'id' => 'email')); ?> <br>
<?= form_submit('phonebooksubmit', 'Submit'); ?>
<?= form_fieldset_close(); ?>
<?= form_close() ?>

<? } else { ?>

<p><a href="<?= base_url() ?>index.php?/Phonebook/addnew">Add new entry</a></p>

<? } ?>

</body>
</html>

【问题讨论】:

    标签: php forms codeigniter validation


    【解决方案1】:

    如果您将此处的代码与 CI 用户指南中的基本示例进行比较,您会发现这两个示例并不相似。您错过了在构造函数中传递的数组中加载会话库。随意从其他方法(即index)中删除加载库和帮助程序,因为它们已经在构造函数中加载,并且相应的对象/函数在之后的所有类方法中都可用。制作公共变量数组,var 是不推荐使用的关键字。

    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    
    class Phonebook extends CI_Controller
    {
    
        public $TPL = array();
    
        public function __construct()
        {
            parent::__construct(); 
    
            $this->TPL['newentry'] = false;
            $this->load->library(array('form_validation, session')); // load form lidation libaray & session library
            $this->load->helper(array('url', 'html', 'form'));  // load url,html,form helpers optional
        }
    
        public function index()
        {
            $this->form_validation->set_rules('fname', 'First Name', 'required|min_length[5]|max_length[12]|is_unique[phonebook.fname]');
            $this->form_validation->set_rules('lname', 'Last Name', 'required|matches[passconf]');
            $this->form_validation->set_rules('phone', 'Password Confirmation', 'required');
    $this->form_validation->set_rules('email', 'Email', 'required|valid_email|is_unique[phonebook.email]');
    
        if ($this->form_validation->run() == FALSE)
        {
            $this->load->view('phonebook_view');
        }
        else
        {
            $fname = $this->input->post("fname");
            $lname = $this->input->post("lname");
            $phone = $this->input->post("phone");
            $email = $this->input->post("email");
            $query = $this->db->query("INSERT INTO phonebook VALUES (NULL, '$fname', '$lname', '$phone', '$email', NULL, NULL, NULL, NULL);");
    
            if ((int)$this->db->affected_rows() < 1)
            {
                print_r($this->db->error());
                exit;
            }
            else
            {
                redirect('success_page', 'refresh');
                //maybe? $this->display();
            }
        }
    
        public function addnew()
        {
            $this->TPL['newentry'] = TRUE;
    
            $this->display();
        }
    }
    

    在表格中输入&lt;?= form_open('phonebook') ?&gt;。另外,修复set_rules()。我刚刚复制/粘贴了你的,但看起来不对。在此代码中再次读取字段名称和对应规则 - 不匹配。

    【讨论】:

      猜你喜欢
      • 2012-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-28
      • 2012-02-26
      • 1970-01-01
      • 2015-01-20
      相关资源
      最近更新 更多