php - 从选择框中获取值
问题描述
对于我的实习,我正在为休息的人创建一个记分牌列表,以跟踪所有的胜利。我正在使用 MVC。
我有以下表格:
玩家(p_id PK,名称)
游戏 (game_id PK , p_id FK ) -> p_id 外键与 player.p_id
获胜者 (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;
}
出于某种原因,它没有读取值。如果我在我的 create 方法中对查询进行 vardump,我会在我的屏幕上看到这个:
string(55) "插入 billiard_winners (id,winner) VALUES ('','')"
这意味着由于某种原因它没有读取 $game & $option。但为什么?
我想我知道错误在哪里。
我的插入方法是:
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 获取游戏,但无法调查该方法。真的吗?
解决方案
您应该使用 $_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);
}
这应该有效。
推荐阅读
- javascript - Use document.ready or not when loading external data from an aJax call?
- r - Have all filter checkboxes checked to start when using crosstalk package with reactable in r
- java - Spring security HttpServletRequest and SecurityContextHolder logout not working
- sql - ROLLBACK TRANSACTION请求没有对应的BEGIN TRANSACTION,但还是报错
- python - 如何使用测试客户端测试 django (3.0) CreateView 的“form_valid”方法和参数?
- sql - 获取表中的直接父子关系
- java - 没有 main 方法的 Java WebApp 项目的 Visual Studio Code 设置
- python - Python:有没有办法在 selenium chromedriver 中随机选择一个带有 h3 标签的元素?
- openapi - OpenAPI 鉴别器 oneOf 默认
- sql - 通过来自 pgAdmin 的 SQL 查询使用 json 类型参数调用 postgres 12 中的存储函数会导致错误