Получение значений из поля выбора - PullRequest
0 голосов
/ 08 марта 2019

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

У меня есть следующие таблицы:

Игроки (p_id PK , имя)

Игры (game_id PK , p_id FK ) -> внешний ключ p_id с Players.p_id

Победители (game_id FK , p_id FK ) -> game_id FK с games.game_id, p_id FK с Players.p_id

Например, я создаю игру с Player1 & Player2. Теперь мне нужно добавить победителя. Я создал отдельную страницу, которая ссылается на форму, где вы можете выбрать одного из этих игроков и вставить его в таблицу победителя.

Моя форма выглядит так:

 <form method="post" action="<?php echo ROOT ?>HomeController/winnerBilliard/" enctype="multipart/form-data">
<div class="form-group">
        <label for="player_1">Select game number</label><br>
        <select class="form-control" name="game_id">
            <option selected value="<?php echo $selectedGame['id']; ?>"><?php echo $selectedGame[0]['id']; ?></option>  
        </select>
    </div>
    <div class="form-group">
        <label for="player_1">Select winner</label><br>
        <select class="form-control" name="option">
            <option disabled selected value>Choose winner</option>
            <option value="<?php echo $selectedGame['player_1']; ?>"><?php echo $selectedGame[0]['player_1']; ?></option> 
            <option value="<?php echo $selectedGame['player_2']; ?>"><?php echo $selectedGame[0]['player_2']; ?></option> 
        </select>
    </div>
    <button type="submit" class="btn btn-primary btn-block" name="create">Add winner</button>
</form>

Мой метод выглядит так:

public function winnerBilliard() {
    if(isset($_POST["create"])) {
        $game = $_POST['id'];
        $option = $_POST['option'];
        // var_dump($option); exit();
        $query = "INSERT INTO billiard_winners (id,winner) VALUES ('$game','$option')";
        $this->model->create($query);
        Header('Location: ' . ROOT . 'HomeController/billiardGames');
    } 
}

Мой метод создания в моей модели выглядит следующим образом:

public function create($query)
{   

    $data = $this->db->insert($query);

    return $data;
}

По какой-то причине он не читает значения. Если я сделаю запрос в моем методе создания, я увижу это на экране:

string (55) "INSERT INTO billiard_winners (id, winner) VALUES ('', '')"

Это означает, что по какой-то причине он не читает опцию $ game & $. Но почему?


Мне кажется, я знаю, где ошибка.

Мой метод вставки:

public function winnerGames() {
    if(isset($_POST["create"])) {
        $game = $_POST['id'];
        $option = $_POST['option'];

        $query = "INSERT INTO winners (id,winner) VALUES ('$game','$option')";
        $this->model->create($query);


        Header('Location: ' . ROOT . 'HomeController/Games');
    } 
}

Мой способ добраться до нужной страницы и заполнить опции значениями:

public function editGame($id) {
    $getGame = "SELECT * FROM games WHERE id = $id";
    $selectedGame = $this->model->readAll($getGame, $id);
    include('app/views/editGame.php');
}

Я думаю, что мой метод пытается получить игры от $ selectedGame, но не может изучить этот метод. Это правда?

1 Ответ

0 голосов
/ 08 марта 2019

Вы должны сопоставить имена своих элементов с $ _POST, перепроверить это,
Вы должны избегать использования тегов элементов в качестве имен свойств элементов (например, следует избегать option в качестве имени выбора).
Использовать print_r для отладки опубликованных данных в php.

Я думаю, что вам не хватает трюка здесь,

$saveArr['id'] = $_POST['id'];
$saveArr['winner'] = $_POST['option'];
$this->model->create($saveArr);

Теперь в методе создания,

public function create($saveArr){
    $data = $this->db->insert($saveArr);
}

Это должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...