我遇到以下代码段的问题:
我可以在验证中收到错误通知,但下一步=有效代码我只是得到一个白页,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');
}
答案 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()
由于某种原因而无法重定向(而只是留下空白页面没有重定向)。在它之前抛出调试消息进行检查。