提交的白页死亡

时间:2011-08-25 18:53:02

标签: validation codeigniter php

  

可能重复:
  Reference - What does this error mean in PHP?

我遇到以下代码段的问题:

我可以在验证中收到错误通知,但下一步=有效代码我只是得到一个白页,Any Ideas?

我已经检查了错误设置,我已经在public_html php.ini文件中设置了它,但我仍然没有收到错误

function create_sale()
{       
$this->template->append_metadata( js('debounce.js', 'sales') );        
$this->template->append_metadata( js('new_sale.js', 'sales') );        

    // -------------------------------------
    // Validation & Setup
    // -------------------------------------

    $this->load->library('form_validation');

    $this->sale_rules[1]['rules'] .= '|callback__check_slug[insert]';

    $this->form_validation->set_rules( $this->sale_rules );

    foreach($this->sale_rules as $key => $rule)
    {
        $sale->{$rule['field']} = $this->input->post($rule['field'], TRUE);
    }

    // -------------------------------------
    // Process Data
    // -------------------------------------

    if ($this->form_validation->run())
    {
        if( ! $this->sales_m->insert_new_sale( $sale, $this->user->id ) ):
        {
            $this->session->set_flashdata('notice', lang('sales.new_sale_error'));  
        }
        else:
        {

            $this->session->set_flashdata('success', lang('sales.new_sale_success'));   
        }
        endif;

        redirect('admin/sales');
    }

    $this->template->set('sale', $sale)
                   ->build('admin/new');

}   

4 个答案:

答案 0 :(得分:4)

你说你的代码是有效的,但你得到一个白页。

大多数情况下,当您获得白页时,您的代码中只会出现错误。

就像这里的情况一样:

您的代码中突然出现了endif;,而您不想在那里。

请启用错误报告:

在启动文件中包含此代码:

error_reporting(E_ALL);
ini_set("display_errors", 1);

请记住在生产中禁用此功能!

删除错误更改:

if ($this->form_validation->run())
{
    if( ! $this->sales_m->insert_new_sale( $sale, $this->user->id ) ):
    {
        $this->session->set_flashdata('notice', lang('sales.new_sale_error'));  
    }
    else:
    {

        $this->session->set_flashdata('success', lang('sales.new_sale_success'));   
    }
    endif;

    redirect('admin/sales');
}

为:

if ($this->form_validation->run())
{
    if( ! $this->sales_m->insert_new_sale( $sale, $this->user->id ) )
    {
        $this->session->set_flashdata('notice', lang('sales.new_sale_error'));  
    } else {
        $this->session->set_flashdata('success', lang('sales.new_sale_success'));   
    }

    redirect('admin/sales');
}

答案 1 :(得分:2)

你有太多的结束花括号,删除你的脚本中的'endif',它应该工作。

答案 2 :(得分:1)

CodeIgniter因“死亡白屏”而臭名昭着。

通常当我遇到它时,这是因为他们设置数据库错误处理的方式(这不好)。 $db['default']['db_debug']设置为FALSE时,不处理数据库错误。任何失败的查询或连接尝试都会返回false。在查询错误后继续执行,这可能导致白屏死机。如果你很幸运,在某些情况下你会在日志中收到一条错误消息,但在大多数情况下你都不会,因为query()函数只是默默地返回false而没有记录任何内容。

如果将其设置为TRUE,则可能处于更糟糕的位置,因为任何数据库错误都会自动导致CodeIgniter调用它自己的show_error()函数并生成500 HTTP响应,并且您没有机会自己处理它。

这是获得我所知道的WSOD的最常见方式。我没有使用2.0版本的CI,但1.7版本就是这种情况。您可能想尝试在database.php配置文件中将db_debug设置为true,直到找到正在发生的事情为止。

答案 3 :(得分:0)

我怀疑您的redirect()由于某种原因而无法重定向(而只是留下空白页面没有重定向)。在它之前抛出调试消息进行检查。