2

重複している可能性があります。しかし、Googleで何も見つからなかったので、ここに行きます。

データを送信するフォームがあります。このデータはさらに処理され、変数に分割されます。

私のフォーム投稿<input name='cmd' value='create -u username@demo.com -p password'/>

だから私はそのような投稿を受け取り、それを分割します

$username=username@demo.com
$password=password

form_validation lib. すでにあるので、使用してみませんか!. 私は preg_match を使用できることを知っています。しかし、すでにそこにあるものを再発明する必要はないと思います。

$this->form_validation->set_rules($username, 'username', 'required|xss_clean');
$this->form_validation->set_rules($password, 'username', 'required|xss_clean');

美しいアプローチになります。

field_name の代わりに変数を受け入れるように CI フォームの検証を微調整する方法はありますか? この問題にはヘルパー関数が最適かもしれません。$$variable を使用して、match[] 検証などのルールの変数の名前を識別することもできます。

どうもありがとうございました。私の質問をうまく説明できれば幸いです。

4

1 に答える 1

0

必要なことを達成するには 2 つの方法があります。1 つは入力フィールドを定義し、クライアント側で次のように分割します。

<form method="post">
  <input id="cmd" value="<?php if (set_value('username')) : ?>create -u <?=set_value('username')?> -p <?=set_value('password')?><?php endif; ?>"/>
  <input type="hidden" name="username" value="<?=set_value('username')?>" />
  <input type="hidden" name="password" value="<?=set_value('password')?>" />
</form>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"/>
<script type="text/javascript">
$(function () {
    $('#cmd').change(function () {
        var matches = $(this).val().match(/create -u ([^\b]+) -p ([^\b]+)\]/);
        $('input[name=username]').val(matches[1]);
        $('input[name=password]').val(matches[2]);
    });
});
</script>

または、次のようなコールバックで単純に検証します。

<form method="post">
  <input name="cmd" value="<?=set_value('cmd')?>"/>
</form>

$this->form_validation->set_rules('cmd', 'Command', 'required|callback_validate_cmd');

function validate_cmd($cmd)
{
    if ($cmd) {
        list($username, $password) = split_cmd($cmd);
        $this->load->helper('security');
        if ( ! xss_clean($username)) {
            $this->form_validation->set_message(__FUNCTION__, 'username_not_secure');
            return FALSE;
        } elseif ( ! xss_clean($password)) {
            $this->form_validation->set_message(__FUNCTION__, 'password_not_secure');ç
            return FALSE;
        }
    }
    return TRUE;
}
于 2013-09-13T01:58:12.460 に答える