表单提交时更改的值(下拉表单)

Posted

技术标签:

【中文标题】表单提交时更改的值(下拉表单)【英文标题】:Values changing upon form submission (Dropdown form) 【发布时间】:2016-03-31 09:00:14 【问题描述】:

不幸的是,我想不出一个比我使用的更好的标题。所以我的问题是我有一个连接到数据库并保存各种信息的表单。我能够创建、读取和更新这些数据,但是在不更改任何数据的情况下进行更新时会出现问题。

它的作用是允许我通过使用文本输入和下拉菜单等表单功能来编辑玩家/用户数据。

所以本质上的问题是,如果我打开它来编辑一个预先存在的播放器,然后按下提交按钮而不触及任何其他东西,名字和姓氏将是相同的;但是,团队 ID 和位置将在数据库中更改为 0。如果我要检查元素,它会显示正确的数字;在这种情况下是(团队 ID = 3 和位置 = 6)。

这里是数据库查询(PDO):

$query = "SELECT * FROM players, teams WHERE playerid = ? AND players.teamid = teams.teamid";
$stmt = $conn->prepare($query);
$stmt->execute(array($_GET['id']));
$info = $stmt->fetchAll(PDO::FETCH_ASSOC)[0];

注意:此查询获取表单所需的所有数据,并且可以完美地提取这些数据。

现在表格是我认为问题的根源所在。这是从同一个 php 文件中提取的完整形式:

<form role="form" action="" method="post">
                                    <!-- text input -->
                                    <div class="form-group">
                                      <label>First Name</label>
                                      <input type="text" name="firstName" class="form-control" placeholder="<?php echo $info['firstName']; ?>" value="<?php echo $info['firstName']; ?>" />
                                    </div>
                                    <div class="form-group">
                                      <label>Last Name</label>
                                      <input type="text" name="lastName" class="form-control" placeholder="<?php echo $info['lastName']; ?>" value="<?php echo $info['lastName']; ?>" />
                                    </div>
                                    <div class="form-group">
                                      <label>Team ID</label><br/>
                                        <select class="form-control" name="teamid">
                                            <option value="<?php echo $info['teamid']; ?>" disabled="enabled" selected="selected"><?php echo $info['name']; ?></option>
                                            <?php
                                                $sql = "SELECT * FROM teams";
                                                $stmt = $conn->prepare($sql);
                                                $stmt->execute();
                                                $i = 0;
                                                    while ($teamListRow = $stmt->fetch(PDO::FETCH_ASSOC)) 
                                                        $teamListArray[$i]['teamid']  = $teamListRow['teamid'];
                                                        $teamListArray[$i]['name'] = $teamListRow['name'];
                                                        echo "<option value='$teamListArray[$i]['teamid']'>$teamListArray[$i]['name']</option>";
                                                        $i++;
                                                    
                                            ?>
                                        </select>                                    
                                     </div>
                                     <div class="form-group">
                                      <label>Position</label><br/>
                                        <select class="form-control" name="position">
                                            <option value="<?php echo $info['position']; ?>" disabled="enabled" selected="selected">
                                            <?php 
                                            if($info['position'] == 1) 
                                                echo "1 - Loosehead Prop";
                                             elseif($info['position'] == 2) 
                                                echo "2 - Hooker";
                                             elseif($info['position'] == 3) 
                                                echo "3 - Tighthead Prop";
                                             elseif($info['position'] == 4) 
                                                echo "4 - Second Row";
                                             elseif($info['position'] == 5) 
                                                echo "5 - Second Row";
                                             elseif($info['position'] == 6) 
                                                echo "6 - Blindside Flanker";
                                             elseif($info['position'] == 7) 
                                                echo "7 - Openside Flanker";
                                             elseif($info['position'] == 8) 
                                                echo "8 - Number Eight";
                                             elseif($info['position'] == 9) 
                                                echo "9 - Scrum-Half";
                                             elseif($info['position'] == 10) 
                                                echo "10 - Fly-Half";
                                             elseif($info['position'] == 11) 
                                                echo "11 - Left Wing";
                                             elseif($info['position'] == 12) 
                                                echo "12 - Inside Centre";
                                             elseif($info['position'] == 13) 
                                                echo "13 - Outside Centre";
                                             elseif($info['position'] == 14) 
                                                echo "14 - Right Wing";
                                             elseif($info['position'] == 15) 
                                                echo "15 - Full Back"; 
                                             else 
                                                echo "16/20 - Reserve";
                                            

                                             ?>
                                            </option>
                                            <option value='1'>1 - Loosehead Prop</option>
                                            <option value='2'>2 - Hooker</option>
                                            <option value='3'>3 - Tighthead Prop</option>
                                            <option value='4'>4 - Second Row</option>
                                            <option value='5'>5 - Second Row</option>
                                            <option value='6'>6 - Bindside Flanker</option>
                                            <option value='7'>7 - Openside Flanker</option>
                                            <option value='8'>8 - Number Eight</option>
                                            <option value='9'>9 - Scrum-Half</option>
                                            <option value='10'>10 - Fly-Hald</option>
                                            <option value='11'>11 - Left Wing</option>
                                            <option value='12'>12 - Inside Centre</option>
                                            <option value='13'>13 - Outside Centre</option>
                                            <option value='14'>14 - Right Wing</option>
                                            <option value='15'>15 - Full Back</option>
                                            <option value='16'>16 - Reserve</option>
                                            <option value='17'>17 - Reserve</option>
                                            <option value='18'>18 - Reserve</option>
                                            <option value='19'>19 - Reserve</option>
                                            <option value='20'>20 - Reserve</option>
                                        </select>                                    
                                     </div>
                                    </div>
                                    <div class="box-footer">
                                        <input type="submit" name="submit" class="btn btn-primary" value="Submit" style="margin-left:-10px;" />
                                    </div>

                                     </form>

注意:一切正常,直到我点击提交!一旦我点击提交,两个下拉菜单会将它们的结果更改为 0

P.s:对不起,如果我解释得不好,请不要抨击我,并尽可能给予建设性的批评,毕竟我还在学习!

【问题讨论】:

【参考方案1】:

这是因为disabled="enabled" selected="selected" 在您的两个&lt;select&gt; 下拉菜单选项中。

首先,您禁用该选项,然后将其标记为选中。

删除disabled="enabled" 并尝试..

【讨论】:

你一定是在开玩笑吧!我可以发誓我早点摆脱了它!非常感谢您的帮助,我已经盯着它这么久了!

以上是关于表单提交时更改的值(下拉表单)的主要内容,如果未能解决你的问题,请参考以下文章

在 JavaScript 中更改输入和提交表单的值

如何更改提交表单的查询字符串

使用表单提交更新数据库中选定的下拉值

表单提交后怎么样才能不清空文本框和下拉框的值呢?

提交表单时如何从 Spring 下拉列表中填充表单

Ajax表单提交我想通过id更改表单元素的值,以便脚本从php中的返回值进行下一次调用