Codeigniter - вопросы реализации викторины

1

Я пытаюсь создать викторину, в которой пользователь показывает изображение, и они выбирают, кто, по их мнению, изображение находится в рамках Codeigniter, и я получаю несколько ошибок. Код выглядит следующим образом:

Вид (guessview.php):

        <div>
            <img src="<?php echo $image ?>" width=400>
        </div> <!-- div/img -->
        <div>
            <?php
            if (!isset($iscorrect)) {
            ?>
            <p>Who is this?
            <form class="form">
                <input type=hidden name=id value="<?php echo $id ?>">
                <div class="radio">
                  <label>
                    <input type="radio" name="name" value="<?php echo $name1 ?>">
                    <?php echo $name1 ?>
                  </label>
                </div>
                <div class="radio">
                  <label>
                    <input type="radio" name="name" value="<?php echo $name2 ?>">
                    <?php echo $name2 ?>
                  </label>
                </div>
                <div>
                    <input type=submit value="Guess!">
                </div>
            </form>
            <?php
            }
            else {
                if ($iscorrect === true) {
                    // they guess correctly
                    ?>
                        <h2 class="bg-success">
                            Correct!  It <?php echo $name ?>!
                        </h2>
                    <?php
                }
                else {
                    // they guessed wrongly
                    ?>
                    <h2 class="bg-warning">
                        Wrong!  It not <?php echo $name ?>!
                    </h2>
                    <?php
                }
                ?>
                    <a href="guess"><button class="btn btn-primary btn-sm">Next<button></a>
                <?php
            }
            ?>
        </div>
</div>

Модель:

<?php

class People extends CI_Model {
    private $imageurls
        = array(
            "http://cdn2.thr.com/sites/default/files/imagecache/675x380/2014/06/harrison_ford_enders_game.jpg",
            "http://i.kinja-img.com/gawker-media/image/upload/s--dLK5k-Xp--/1986hd9w3ho26jpg.jpg",
            "http://static.dnaindia.com/sites/default/files/2015/04/29/332116-salman-khan-prem-ratan.jpg",
            "http://media2.popsugar-assets.com/files/2013/01/01/4/192/1922398/45cf0b9c01b047cb_155566259_10.xxxlarge_2.jpg",
            "http://i.telegraph.co.uk/multimedia/archive/03343/corbyn1_3343657b.jpg",
            "http://cdn-img.instyle.com/sites/default/files/styles/684xflex/public/1430838021/050515-anne-hathaway-lead.jpg?itok=qZ72SsQ-",
            "http://www.thetvcollective.org/wp-content/uploads/2014/07/Meera-Syal.jpg",
            "http://www.lovebscott.com/wp-content/uploads/2015/03/featured4.jpg"
        );
    private $names
        = array("Harrison Ford","Morgan Freeman","Salman Khan","Halle Berry","Jeremy Corbyn",
            "Anne Hathaway","Meera Syal","Kanye West"
        );

    function __construct()
    {
        parent::__construct();
    }


    function getwho()
    {
        $max = count($this->names);
        $whopos = rand(0,$max - 1); // randomly-chosen number

        // use this randomly-chosen number to select a person
        $image = $this->imageurls[$whopos];
        $name = $this->names[$whopos];

        // now get a wrong name
        // can you work out what this is doing?
        $wrong = $whopos;
        while ($wrong == $whopos) {
            $wrong = rand(0,$max - 1);
        }

        // now get a wrong name
        $wrongname = $this->names[$wrong];

        // now decide which name comes first and second
        $choice = rand(0,1);
        if ($choice == 0) {
            $name1 = $name;
            $name2 = $wrongname;
        }
        else {
            $name1 = $wrongname;
            $name2 = $name;
        }
        // return $whopos as part of the result - this will make checking later easier
        return array('id' => $whopos,'image' => $image,'name1' => $name1,'name2' => $name2);
    }

    function getPerson($id)
    {
        return array('id' => $id,'image' => $this->imageurls[$id]);
    }

    function isCorrectAnswer($id,$name)
    {
        $answer = $this->names[$id];
        if ($answer == $name) {
            return true;
        }
        else {
            return false;
        }
    }
}

Контроллер:

<?php

class Guesser extends CI_Controller {
    function __construct()
    {
        parent::__construct();
        $this->load->model('people');
    }

    function guess()
    {
        $guess = $this->input->get('name',false);
        $personid = $this->input->get('id',false);
        if ($guess === false) {
            // no guess provided, so create a guess and display it
            $newguess = $this->people->getwho();
            $this->load->view('guessview',$newguess);
        }
        else {
            $res = $this->people->isCorrectAnswer($personid,$guess);
            $person = $this->people->getPerson($personid);
            $this->load->view('guessview',
                              array('image' => $person['image'],
                                    'iscorrect' => $res,'name' => $guess));
        }
    }
}

Ошибки, которые я получаю, следующие:

Возникла ошибка PHP

Уровень важности: уведомление

Сообщение: Неопределенный индекс:

Имя файла: models/People.php

Номер строки: 66

Backtrace:

Файл: /home/student/927/w1375927/public_html/CI1/application/models/People.php Линия: 66 Функция: _error_handler

Файл: /home/student/927/w1375927/public_html/CI1/application/controllers/Guesser.php Линия: 20 Функция: isCorrectAnswer

Файл: /home/student/927/w1375927/public_html/CI1/index.php Линия: 292 Функция: require_once

а также

Возникла ошибка PHP

Уровень важности: уведомление

Сообщение: Неопределенный индекс:

Имя файла: models/People.php

Номер строки: 61

Backtrace:

Файл: /home/student/927/w1375927/public_html/CI1/application/models/People.php Линия: 61 Функция: _error_handler

Файл: /home/student/927/w1375927/public_html/CI1/application/controllers/Guesser.php Линия: 21 Функция: getPerson

Файл: /home/student/927/w1375927/public_html/CI1/index.php Линия: 292 Функция: require_once

Я редактировал массивы, в которых изображения передаются между моделью и контроллером.

Мое предположение заключается в том, что он связан с конфигурацией codeigniter перед ее запуском. Если кто-то столкнулся с этими ошибками раньше, я был бы признателен за любую помощь.

Благодарю.

Теги:
codeigniter

1 ответ

1
Лучший ответ

Вы не передаете аргументы правильному представлению, при изменении контроллера на:

    <?php

class Guesser extends CI_Controller {
    function __construct()
    {
        parent::__construct();
        $this->load->model('people');
    }

    function guess()
    {
        $guess = $this->input->get('name',false);
        $personid = $this->input->get('id',false);
        if ($guess === false) {
            // no guess provided, so create a guess and display it
            $data['newguess'] = $this->people->getwho();
            $this->load->view('guessview',$data);
        }
        else {
            $res = $this->people->isCorrectAnswer($personid,$guess);
            $person = $this->people->getPerson($personid);
            $this->load->view('guessview',
                              array('image' => $person['image'],
                                    'iscorrect' => $res,'name' => $guess));
        }
    }
}

Итак, в представлении вы можете получить доступ к $data['newguess']; как $newguess обратите внимание, что ваша форма не имеет никаких действий, которые вам нужно указать в html:

<form action="http://yourdomain/controller/method" method="post" accept-charset="utf-8">

Ещё вопросы

Сообщество Overcoder
Наверх
Меню