表单输入值不会根据选择而改变

时间:2017-05-20 23:32:49

标签: javascript php jquery html mysql

我有一个简单的表单下拉按钮,有3个输入选项。

我想这样做,当用户选择其中一个选项时,该选择的值将被提交到我的MySQL数据库。我以前工作过,但是在更改某些设置后它不再有效,我无法弄清楚原因。

这是我的HTML代码:

<form action="evalsubmit.php" method="post" name="evaluationform">
<div class="btn-group col-lg-2">
  <div class="homeworkmenu">
      <button class="btn btn-danger dropdown-toggle homeworkselection" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
                    Homework
      <span class="caret"></span>
      </button>
      <ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
          <li><input type="hidden" value="absent" name="homeworkeval"><a href="#">Absent</a></li>
           <li><input type="hidden" value="missing" name="homeworkeval"><a href="#">Missing</a></li>
            <li><input type="hidden" value="incomplete" name="homeworkeval"><a href="#">Incomplete</a></li>
      </ul>
   </div>
</div>
</form>

和我的JS:

$(".dropdown-menu li a").click(function(){
              $(this).parents(".homeworkmenu").find('.homeworkselection').html($(this).text() + ' <span class="caret"></span>');
              $(this).parents(".homeworkmenu").find('.homeworkselection').val($(this).text());
});

PHP:

if (isset($_POST['evalsubmit'])) {
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$evallevel = $_POST['evallevel'];
$homework = $_POST['homeworkeval'];
$classwork = $_POST['classworkeval'];
$general = $_POST['generaleval'];
$comments = $_POST['evalcomments'];
$evaldate = $_POST['evaldate'];
$oraleval = $_POST['oraleval'];
$selection = $_POST['selection'];
$user = $_SESSION['username'];

if ($selection == 'mathselection') {
    $table_name = 'mathdb';
} elseif ($selection == 'readingselection') {
    $table_name = 'readingdb';
}
$sql = "INSERT INTO $table_name (firstname, lastname, level, homework, classwork, general, comments, oraleval, evaldate, addedBy)
 VALUES ('$firstname', '$lastname', '$evallevel', '$homework', '$classwork', '$general', '$comments', '$oraleval', '$evaldate', '$user')";
}

目前,无论我选择何种选择,无论是“缺席”,“缺失”还是“不完整”,它都会将最后一个选项写入我的数据库中,在这种情况下“不完整”。

提前感谢所有帮助!

2 个答案:

答案 0 :(得分:1)

您是否有任何理由不想使用<select>代码?好像你可能正在攻击它的替代品。使用<select>可以解决您问题中提到的问题。

可能看起来像

<select name="homeworkeval">
    <option value="absent">
       Absent
    </option>
    <option value="missing">
       Missing
    </option>
    <option value="incomplete">
       Incomplete
    </option>
</select>

请注意,我的答案绝不会解决2by2引起您注意的SQL注入漏洞。

我希望有所帮助。

答案 1 :(得分:-1)

我会尽力指出你正确的方向

如果你这样做

var homeworkeval = 1
homeworkeval = 2
homeworkeval = 3

最后homeworkeval的价值是多少? ; - )

解决方案是

<input type="hidden" value="absent" name="homeworkeval">
<ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
      <li><a data-name="absent" href="#">Absent</a></li>
      <li><a data-name="missing" href="#">Missing</a></li>
      <li><a data-name="incomplete" href="#">Incomplete</a></li>
</ul>

然后是js

$(".dropdown-menu li a").click(function(){
    // will be absent or missing or incomplete
    let name = $(this).data("name");
    $("[name='homeworkeval']").val(name)       
});