1

テキスト入力によって送信された URL を検証するために、コールバックを使用しています。NULLテキスト入力が空の場合 (ユーザーが URL エントリを消去したことを意味します)、データベースに挿入する必要があります。以下のコードを試していますが、データベースに空の文字列を挿入するだけです。

$this->form_validation->set_rules('image_url', 'Image URL', 'trim|xss_clean|prep_url|callback__validate_url');

コールバック:

    function _validate_url($str)
    {
        if (isset($str))
        {
            $pattern = "/^(http|https):\/\/([A-Z0-9][A-Z0-9_-]*(?:\.[A-Z0-9][A-Z0-9_-]*)+):?(\d+)?\/?/i";
            if (!preg_match($pattern, $str))
            {
                $this->form_validation->set_message('_validate_url', 'URL is not valid');
                return FALSE;
            }
            else 
            {
                if (!isset($str)) //if input empty
                {
                    return NULL; //return NULL to input?
                }

                return TRUE;
            }
        }

        return TRUE; 
    }

コールバックを介して入力に値を返すにはどうすればよいですか?

アップデート:

上記のコードは間違っていてNULL、入力で返すことができませんでした (文字列を返すためだと思います) ので、コールバックの外で行いました

   $image_url = $this->input->post('image_url');

    if (empty($image_url)) 
    { 
         $image_url = NULL; 
    }

    $data = array (
            'content' => $this->input->post('content'),
            'image_url' => $entry_image_url
    );

    //add to database 
4

1 に答える 1

3

このコードを見てください。不可能な状態になっています。

    if (isset($str)) // Everything in this block runs if $str is "set"
    {
        if (!preg_match($pattern, $str))
        {
            //
        }
        else 
        {
            if (!isset($str)) // But you're checking if $str is not set....
            {
                // This can never happen!
            }

        }
    }

trim($str) === ''その条件を適切な方法に置き換えて、入力が空であるかどうかを確認し empty($str)ます。

于 2012-07-11T22:09:35.530 に答える