【问题标题】:PHP and form data validationPHP 和表单数据验证
【发布时间】:2012-06-07 10:51:07
【问题描述】:

我是 PHP-Codeignitor 的初学者。所以我不知道这个问题对你们来说太浪费了。

但是有什么简单的方法来验证表单数据吗?

例如,我有一个表格,它包含一个文本字段“用户名”,还有一个插入按钮,当用户单击插入时,它将添加另一个文本字段。

那么我怎样才能得到 php 中的值呢?因为用户可以在那里添加任意数量的字段。

$username = $_POST("username"); //在这种情况下它将检索什么?数组?

还有这种情况怎么处理。

谢谢。

【问题讨论】:

    标签: php forms codeigniter


    【解决方案1】:

    如果你在表单中设置了一个数组,你会在$_POST中得到一个数组。

    表单字段:

    <input type='text' name='username[]' />
    <input type='text' name='username[]' />
    

    php:

    $users_array = $_POST['username'];
    

    【讨论】:

    • @DileepDil 我有点失望你没有将其标记为正确答案。
    • 对不起,其他答案在一些示例代码中也是正确的。这是 SO 最糟糕的功能之一,
    【解决方案2】:

    如果您的用户要添加多个字段,您应该让他们使用HTML array input 来完成。比如:

    <input name="my_array[]" />
    

    这是form_validation 与 HTML 数组输入的用法:

    1. 获取输入数组以确定有多少字段
    2. 为每个字段设置规则

    够简单吗? :) 这是我的演示代码:

    控制器:application/controllers/test.php

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    
    /**
    * Test Controller
    *
    * It's really just a test controller
    *
    */
    class Test extends CI_Controller {
    
        public function __construct()
        {
            parent::__construct();
        }
    
        public function index()
        {
            $data = array();
            if ($this->input->post('test_submit'))
            {
                $this->load->library('form_validation');
                $input_array = $this->input->post('test');
    
                for ($i = 0; $i < count($input_array); $i++)
                {
                    $this->form_validation->set_rules("test[$i]", 'Test Field '.($i + 1), 'trim|is_numeric|xss_clean');
                }
    
                if ($this->form_validation->run() === TRUE)
                {
                    $data['message'] = 'All input are number! Great!';
                }
            }
            $this->load->helper('form');
            $this->load->view('test', $data);
        }
    
    }
    
    /* End of file test.php */
    /* Location: ./application/controllers/test.php */
    

    查看:application/views/test.php

    <p><?php echo isset($message) ? $message : ''; ?></p>
    <?php echo validation_errors(); ?>
    <?php echo form_open(); ?>
        <?php echo form_label('Test fields (numeric)', 'test[]'); ?>
        <?php for ($i = 0; $i < 3; $i++): ?>
            <?php echo form_input('test[]', set_value("test[$i]")); ?>
        <?php endfor; ?>
        <?php echo form_submit('test_submit', 'Submit'); ?>
    <?php echo form_close(); ?>
    

    网址:&lt;your_base_url_here&gt;/index.php/test 看看吧:D

    注意numericis_numeric 规则都需要输入,这意味着空字符串不是数字。

    【讨论】:

    • 感谢您的详细解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    相关资源
    最近更新 更多