1

フォームから取得できなかったものを検証するにはどうすればよいですか。変数を検証したいのですが、このルールをis_uniqe()にして、重複をチェックしたいと思います。

$ rules配列にarray('field' => $ this-> characterNAME、'rules' =>'is_unique [members.char_name])としてルールを設定しようとしましたが、is_unique()を呼び出してみましたが効果はありませんまだ効果がなく、変数を$ _POST ['charNAME'] = $this->characterNAMEに割り当てようとしました。次に、それをset_rules()に渡しますが、効果はありません。

変数を検証するにはどうすればよいですか?

私のコード:

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

class Registration extends CI_Controller {

var $characterNAME = "";
var $characterCORP = "";
var $characterALLY = "";
var $characterJDAT = "";

function __construct() {
    parent::__construct();
    $this->load->helper('form');
    $this->load->library('form_validation');
    $this->load->model('Registration_model', 'reg');
}

public function index()
{

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

function insert()
{

    $rules = array(
        array(
            'field' => 'username',
            'label' => 'Username',
            'rules' => 'required|min_length[6]|max_length[250]|is_unique[members.username]'
            ),
        array(
            'field' => 'password',
            'label' => 'Password',
            'rules' => 'required|min_length[6]|max_length[250]|md5'
            ),
        array(
            'field' => 'apiid',
            'label' => 'apiid',
            'rules' => 'required|integer|min_length[6]|max_length[250]|callback_api_check[' . $this->input->post('apikey') . ']'
            ),
        array(
            'field' => 'apikey',
            'label' => 'apikey',
            'rules' => 'required|min_length[6]|max_length[255]'
            ),
        );

    $_POST['charNAME'] = $this->characterNAME;
    $this->form_validation->set_rules('charNAME', 'CharacterName', 'is_unique[members.char_name]');
    $this->form_validation->set_rules($rules);

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

        // PROCESS REGISTRATION 
        $this->reg->add_user($_POST['username'], $_POST['password'], $_POST['apiid'], $_POST['apikey'], $this->characterNAME, $this->characterCORP, $this->characterALLY, $this->characterJDAT);
        // REDIRECT
        $this->load->view('registration_done');
    }
}

function api_check($apiid, $apikey) 
{
    $url = 'http://api.eveonline.com/account/Characters.xml.aspx?keyID='.$apiid.'&vCode='.$apikey;

    $xml = new DOMDocument();
    $xml->load($url);

    $chars = $xml->getElementsByTagName('row');

    foreach ($chars as $character) 
    {
        $charid = $character->attributes;
        $curl = 'http://api.eveonline.com/eve/CharacterInfo.xml.aspx?keyID='. $apiid . '&vCode='.$apikey . '&characterID=' . $charid->item(1)->nodeValue;

        $cxml = new DOMDocument();
        $cxml->load($curl);

        $corp = $cxml->getElementsByTagName("corporation");
        $ally = $cxml->getElementsByTagName("alliance");
        $char = $cxml->getElementsByTagName("characterName");
        $jdat = $cxml->getElementsByTagName("corporationDate");

        // Check database instead

        if($this->reg->validate_entity($corp->item(0)->nodeValue) || $this->reg->validate_entity($ally->item(0)->nodeValue)) 
        {
            $this->characterNAME = $char->item(0)->nodeValue;
            $this->characterCORP = $corp->item(0)->nodeValue;
            $this->characterALLY = $ally->item(0)->nodeValue;
            $this->characterJDAT = $jdat->item(0)->nodeValue;
            return true;
        }

    }
    $this->form_validation->set_message('api_check','None of the characters on this account are allowed to join.');
    return false;
}


}
4

1 に答える 1

2

(例)を介してis_unique関数を直接呼び出すことにより、フォーム入力が重複していないことを検証できます。

$ this-> form_validation-> is_unique($ email、'users.email');

これにより、ブール値のtrue/falseが返されます。True=一意です-この場合

したがって、それをif()に入れて、そのようにチェックすることができます...

お役に立てれば

于 2012-09-19T21:10:00.947 に答える