0

コードイグナイターを使用しています。私は現在、処理のためにコントローラーに送信する非常に単純なフォーム (入力フィールドのみ) を持っています。

それはすべて問題ではありませんが、私が求めているのは、フォームにもアップロードファイルがあるということです。そのため、アップロード機能はファイルのサイズとタイプなどをチェックし、準拠していない場合はエラーを返します。それが発生し、要件に一致する別のファイルを選択すると、送信しますが、次のページにはアップロードされたファイルとその詳細以外には何も進みませんが、他のフィールドは投稿されていないか空白です。

投稿がキャッシュされていないかのようで、アップロードする新しいファイルを選択すると、それらのフィールドの $_POST がチェックされ、空になります。すべてのフィールドに値が含まれていることを確認するにはどうすればよいですか?

ありがとうございました。詳しく説明させていただきます。

4

1 に答える 1

1

フィールドを再設定するには、set_value 関数を使用できます。

set_value()

入力フォームまたはテキストエリアの値を設定できます。関数の最初のパラメーターを介してフィールド名を指定する必要があります。2 番目 (オプション) のパラメーターを使用すると、フォームの既定値を設定できます。

最初に、フォームの検証とアップロードが成功したかどうかを確認します。

両方が成功した場合、ユーザーを新しいページにリダイレクトします。

これらのいずれかが失敗した場合、ビューでアクセスしてフォームを表示できるデータ配列にエラー メッセージを追加します。

コントローラ

public function signup()
{
        // Data array
        $data = array();

        // Load form validation libary
        $this->load->library('form_validation');

        // Load upload library and set configuration
        $config['upload_path'] = './uploads/';
        $this->load->library('upload', $config);

        // Set the required fields
        $this->form_validation->set_rules('first_name', 'First name', 'required');

        if ($this->form_validation->run() == TRUE)
        {
            // If upload was succesfull
            if ($this->upload->do_upload())
            {
                $upload_data = $this->upload->data();

                // Build array to store in database
                $save_data = array(
                    'first_name' => $this->input->post('first_name'),
                    'image' => $upload_data['file_name']
                );

                // Send data to your model to process
                $this->your_model->save($save_data);

                // Redirect to success page
                redirect('registration_succes');
            }
            else
            {
                // Upload failed, set error
                $data['error'] = $this->upload->display_errors();
            }
        }
        else
        {
            // Form validation failed, set error
            $data['error'] = validation_errors();
        }

        // Display the form by default or on error
        $this->load->view('myform', $data);
}

ビューでは、set_value 関数を使用して、送信された値をフィールドに再入力します。

表示 (マイフォーム)

<?php echo form_open_multipart('signup');?>
    <fieldset>

        <?php if( isset($error) && ! empty($error) ): ?>
        <div class="error"><?php echo $error; ?></div>
        <?php endif; ?>

        <p>
            <label>First name</label>
            <input type="text" name="first_name" value="<?php echo set_value('first_name'); ?>" />
        </p>

        <p>
            <label>File</label>
            <input type="file" name="userfile" size="20" />
        </p>

        <p>
            <input type="submit" />
        </p>

    </fieldset>
</form>
于 2012-09-16T10:44:27.907 に答える