【问题标题】:Getting values from select box从选择框中获取值
【发布时间】:2019-07-30 10:59:16
【问题描述】:

对于我的实习,我正在为休息中的人创建一个记分牌列表,以跟踪所有的胜利。我正在使用 MVC。

我有以下表格:

玩家(p_id PK、姓名)

游戏(game_id PK, p_id FK-> p_id 外键与 player.p_id

Winners (game_id FK, p_id FK) -> game_id FK with games.game_id, p_id FK with 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');
    } 
}

我的模型中的 create 方法如下所示:

public function create($query)
{   

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

    return $data;
}

由于某种原因,它没有读取值。如果我在我的创建方法中转储查询,我会在我的屏幕上看到这个:

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

这意味着由于某种原因它没有读取 $game 和 $option。但为什么呢?


我想我知道错在哪里了。

我的 INSERT 方法是:

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 获取游戏,但无法调查该方法。这是真的吗?

【问题讨论】:

  • name 属性应该在 select 元素而不是 option 元素上,并且每个 select 应该有唯一的名称。
  • 是的,我发现了哈哈。我编辑了我的代码,因为它仍然没有阅读它。我将 name 属性放在两个选项中。
  • 您的表单使用game_id 作为游戏编号,但您的代码似乎在寻找id
  • @Nick 我以为我要疯了。我看不到编辑...
  • @Dave 它现在同时使用这两个 ID,但仍然无法正常工作。

标签: php sql insert


【解决方案1】:

您应该使用 $_POST 映射您的元素名称,重新检查,
您应该避免使用元素标签作为元素的属性名称(例如,应该避免使用选项作为选择的名称)。
使用print_r在php中调试发布的数据。

我认为你在这里缺少技巧,

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

现在在创建方法中,

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

这应该可行。

【讨论】:

    猜你喜欢
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    • 2021-09-21
    • 2013-10-25
    • 1970-01-01
    相关资源
    最近更新 更多