提问人:Rizwan Khan 提问时间:1/8/2012 最后编辑:Rizwan Khan 更新时间:1/9/2012 访问量:1805
为什么我得到未定义的索引?
Why i am getting Undefined index?
问:
我正在使用 CodeIgniter 开发一个应用程序。在我的应用程序中,当我在 firefox 10.0 中提交表单时,我收到了这个错误
Message: Undefined index: adcopy_response
但是当我在 IE 9 中提交表格时。我的应用程序工作正常。在 IE 中未发现错误。可以任何一个。我的HTML代码是
<table>
<form action="" method="post">
<tr id="row">
<td><b>Title:</b></td>
<td>
<input type="text" style="width:450px;" name="title" value="" />
</td>
</tr>
<tr id="row">
<td><b>Description:</b></td>
<td>
<textarea style="width:450px;" name="desc" cols="35" rows="10"></textarea>
</td>
</tr>
<tr id="row">
<td><b>URL:</b></td>
<td>
<input type="text" style="width:450px;" name="url" value="" />
</td>
</tr>
<tr id="row">
<td><b>Category:</b></td>
<td>
<select name="cat">
<option value="">Select Category</option>
<option value="ajax-tutorials">AJAX Tutorials</option><option value="asp-tutorials">ASP Tutorials</option><option value="asp.net-tutorials">ASP.NET Tutorials</option><option value="codeigniter-tutorials">CodeIgniter Tutorials</option><option value="css-tutorials">CSS Tutorials</option><option value="html-tutorials">HTML Tutorials</option><option value="javascript-tutorials">JavaScript Tutorials</option><option value="jquery-tutorials">jQuery Tutorials</option><option value="ms-sql-tutorials">Ms SQL Tutorials</option><option value="mysql-tutorials">MySQL Tutorials</option><option value="php-tutorials">PHP Tutorials</option><option value="programming-tutorials">Programming Tutorials</option><option value="wordpress-themes">Wordpress Themes</option><option value="wordpress-tutorials">WordPress Tutorials</option><option value="xml-tutorials">XML Tutorials</option> </select>
</td>
</tr>
<tr id="row">
<td><b>Prove you're not a robot</b></td>
<td>
<script type="text/javascript" src="http://api.solvemedia.com/papi/challenge.script?k=hse4RWPEOMayq3QzRQiUZTnTtVkI8Jmf"></script>
<noscript>
<iframe src="http://api.solvemedia.com/papi/challenge.noscript?k=XXXX" height="300" width="500" frameborder="0"></iframe><br/>
<textarea name="adcopy_challenge" rows="3" cols="40"></textarea>
<input type="hidden" name="adcopy_response" value="manual_challenge"/>
</noscript> </td>
</tr>
<tr id="row">
<td>
<input type="hidden" name="ok" value="1" />
<input type="hidden" name="by" value="seekphp" />
<input type="submit" name="submit" value="Submit Tutorial" />
</td>
</tr>
</form>
</table>
CI 代码是
function submit(){
$privkey="XXXX";
$hashkey="XXXX";
$data['err'] = "";
$this->form_validation->set_rules('title', 'Title', 'required|trim|xss_clean|htmlentities');
$this->form_validation->set_rules('desc', 'Description', 'required|trim|xss_clean|htmlentities');
$this->form_validation->set_rules('url', 'URL', 'required|trim|xss_clean');
$this->form_validation->set_rules('cat', 'Category', 'required|trim|xss_clean');
if($this->form_validation->run() == FALSE){
} else {
$title = $this->input->post('title');
$desc = $this->input->post('desc');
$url = $this->input->post('url');
$cat = $this->input->post('cat');
$by = $this->input->post('by');
$ok = $this->input->post('ok');
$solvemedia_response = $this->Captcha_model->solvemedia_check_answer($privkey,
$_SERVER["REMOTE_ADDR"],
$_POST["adcopy_challenge"],
$_POST["adcopy_response"],
$hashkey);
if ($solvemedia_response->is_valid) {
if($this->Tutorial_model->add_tut($title, $desc, $url, $cat, $by, $ok) == TRUE){
$this->session->set_flashdata('msg', "Tutorial has been added successfully.");
redirect(base_url().'user/submit', 'refresh');
} else {
$this->session->set_flashdata('err', "Tutorial may already exist or there is an error while submitting tutorial.");
redirect(base_url().'user/submit', 'refresh');
}
} else {
$data['err'] = "Incorrect Captcha.";
}
}
$data['cats'] = $this->Category_model->get_all_cats();
$this->load->view("user/submit_view", $data);
}
当我print_r时(_POST 美元); 我得到了以下内容
Array ( [title] => test title [desc] => test desc [url] => test url [cat] => javascript-tutorials [adcopy_challenge] => 2@hse4RWPEOMayq3QzRQiUZTnTtVkI8Jmf@Szx1Cc29gNUENU8bgrSwY39APTC4lJjoCYJjyXvIJi2gPnq5tZIMpr0JgoGocL4bVHKrYt6Zyx3w-DAv2nYsjYiaeT-0C9Ec297zPussZKqXHDAdWTWT7ZcC1MklNV75-TPQzGDGu0yUgkDQWcRup.sNAOGBvK0cXCac1RzQ7T6adyI4bmcrNTpt7ANEEq2-1QcBgS8Uky6FxFHeFyGMDgzlJvqGyrBJfDRBNwroHBUXGHC1Jza9b54IS1.0E9kwlqZUOeBX9EomSEVcgrS6gA [ok] => 1 [by] => seekphp [submit] => Submit Tutorial ) 1
答:
1赞
Wesley Murch
1/8/2012
#1
即使你认为你知道数组中应该有什么,如果你想避免通知,也不要假设它。Codeigniter 有 Input 类来简化操作:$_POST
$_POST['doesnt exist']; // generates undefined index notice
$this->input->post('doesnt exist'); // returns FALSE, no notice
最重要的是,您在标记中具有输入,因此浏览器可能不会发送该值。<noscript>
但是当我在 IE9 中提交表单时,它工作正常,没有发现错误。
很有可能你要么关闭了javascript,要么IE行为不端(很可能)。
0赞
Nuhil Mehdy
1/8/2012
#2
我认为正在验证码模型上使用,但它不在$_POST["adcopy_response"]
$_POST
0赞
Rizwan Khan
1/8/2012
#3
最后,我通过删除标签解决了这个问题<table> <tr> <td>
评论
0赞
deceze
1/8/2012
是的,再看一遍,你的 HTML 对嵌套在里面(可能更多)是无效的。在这种情况下,不同的浏览器会有不同的行为。<form>
<table>
0赞
srbhbarot
1/9/2012
#4
将隐藏的标签放在标签之外。只有当浏览器中的脚本被禁用时,其中的代码才能工作。在浏览器中禁用脚本,然后运行它将完美运行。<noscript>
<noscript>
评论
<noscript>