Почему я получаю неопределенный индекс? - PullRequest
0 голосов
/ 08 января 2012

Я занимаюсь разработкой приложения с использованием 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);
}

и когда я печатаю_р ($ _ 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

Ответы [ 4 ]

1 голос
/ 08 января 2012

Даже если вы думаете , что знаете, что должно быть в массиве $_POST, не думайте об этом, если хотите избежать уведомлений. Codeigniter имеет класс Input, чтобы сделать это проще:

$_POST['doesnt exist']; // generates undefined index notice
$this->input->post('doesnt exist'); // returns FALSE, no notice

Самое главное, у вас есть ввод в теге <noscript>, поэтому браузер может не отправлять значение.

Но когда я отправляю форму в IE9, она работает нормально, ошибок не обнаружено.

Скорее всего, у вас либо отключен JavaScript, либо IE ведет себя плохо (вполне вероятно).

0 голосов
/ 09 января 2012

Поместите скрытый тег из тега <noscript>.только когда скрипт отключен в вашем браузере, код внутри <noscript> будет работать.Отключите скрипт в вашем браузере, а затем запустите его, он будет отлично работать.

0 голосов
/ 08 января 2012

Наконец я решил проблему, удалив <table> <tr> <td> теги

0 голосов
/ 08 января 2012

Я думаю, $_POST["adcopy_response"] используется на модели Captcha, но не в $_POST

...