Javascript 当通过下拉更新mysql中的表时,所有行也会更新

Javascript 当通过下拉更新mysql中的表时,所有行也会更新,javascript,php,mysqli,drop-down-menu,sql-update,Javascript,Php,Mysqli,Drop Down Menu,Sql Update,我尝试创建一个包含下拉列表的网页 当选择dropdown时,我想基于Enum将标记更新到MySQL数据库中,但代码不起作用 我使用javascript和PHP来查询MySQL <form id="myForm" method="post" onsubmit="return submitform()"> <select id="lvl" name="lvl" style=

我尝试创建一个包含下拉列表的网页

当选择dropdown时,我想基于Enum将标记更新到MySQL数据库中,但代码不起作用

我使用javascript和PHP来查询MySQL

<form  id="myForm" method="post" onsubmit="return submitform()">
    <select id="lvl" name="lvl" style="height:30px;">    
            
        <option value="std1"selected="selected">
            <?php echo $stu1name["Stu_name"] ?>
        </option>
        <option value="std2" >  
            <?php echo $stu2name["Stu_name"] ?>
        </option>
        <option value="std3" >
            <?php echo $stu3name["Stu_name"] ?>
        </option>
        <option value="std4" >
            <?php  echo $stu4name["Stu_name"] ?>
        </option>
        <option value="std5" >
            <?php  echo $stu5name["Stu_name"] ?>
        </option>
                                        
    </select>
    <p><input type="submit" name="submit" value="Submit"></p>
</form>

这是我用PHP编写的javascript:

function submitform() {
    var option= document.getElementById('lvl').value;
    if (option == "std1"){
        ?php
            mysqli_query($conn, 
                "UPDATE evaluation set mid_mark='" . $_POST["mid_mark"] . 
                "',end_mark='" . $_POST["end_mark"] . 
                "', performance='" . $_POST["performance"] . 
                "' WHERE Enum ='1'"
            ); 
        ?>
        return true;
    }
    if (option == "std2"){
        <?php
            mysqli_query($conn, 
                "UPDATE evaluation set mid_mark='" . $_POST["mid_mark"] . 
                "',end_mark='" . $_POST["end_mark"] . 
                "', performance='" . $_POST["performance"] . 
                "' WHERE Enum ='2'"
            ); 
        ?>
        return true;
    }   
    if (option == "std3"){
        <?php
            mysqli_query($conn, 
                "UPDATE evaluation set mid_mark='" . $_POST["mid_mark"] . 
                "',end_mark='" . $_POST["end_mark"] . 
                "', performance='" . $_POST["performance"] . 
                "' WHERE Enum ='3'"
            ); 
        ?>
        return true;
    }   
    if (option == "std4"){
        <?php
            mysqli_query($conn, 
                "UPDATE evaluation set mid_mark='" . $_POST["mid_mark"] . 
                "',end_mark='" . $_POST["end_mark"] . 
                "', performance='" . $_POST["performance"] . 
                "' WHERE Enum ='4'"
            ); 
        ?>
        return true;
    }
    if (option == "std5"){
        <?php
            mysqli_query($conn, 
                "UPDATE evaluation set mid_mark='" . $_POST["mid_mark"] . 
                "',end_mark='" . $_POST["end_mark"] . 
                "', performance='" . $_POST["performance"] . 
                "' WHERE Enum ='5'"
            ); 
        ?>
        return true;
    }       
}
函数submitform(){
var option=document.getElementById('lvl').value;
如果(选项==“std1”){
?php
mysqli_查询($conn,
“更新评估集mid_mark=”。$\u POST[“mid_mark”]。
“',end_mark=”。$\u POST[“end_mark”]。
“,性能=”。$\u POST[“性能”]。
“'其中Enum='1'”
); 
?>
返回true;
}
如果(选项==“std2”){

这是因为php在服务器中运行,所有代码在加载页面之前都会运行,因此您无法通过浏览器中的脚本(如javascript)对其进行控制。您可以在不使用javascript的情况下在tour数据库中插入数据,并将此php代码放在页面顶部。您必须删除表单中的onsubmit语句

<?php
if (isset($_POST['lvl'])) {
$enum = substr($_POST['lvl'], -1, 1); 
$sql = "UPDATE evaluation SET mid_mark=:mid_mark, end_mark=:end_mark, performance=:performance WHERE Enum='$enum'";
$stmt = $pdo->prepare($sql);                                  
$stmt->bindParam(':mid_mark', $_POST['mid_mark'], PDO::PARAM_STR);       
$stmt->bindParam(':end_mark', $_POST['end_mark'], PDO::PARAM_STR);    
$stmt->bindParam(':performance', $_POST['performance'], PDO::PARAM_STR);  
$stmt->execute(); 

}      
?>

您必须发布表单(使用action=“submit.php”或使用ajax)很抱歉,忘记添加提交按钮…我已经编辑了它..警告:您完全可以使用参数化的准备语句,而不是手动生成查询。它们由或提供。永远不要信任任何类型的输入!即使您的查询仅由受信任的用户执行。哦,我明白了,以前不知道。谢谢youu,它可以工作,但我只是使用mysqli,因为我不熟悉PDO。我可以知道,使用PDO更好吗?对于我这个初学者来说,它看起来很复杂>问题是当你直接输入查询$\u POST变量时。如果用户用恶意或错误的代码填充输入,你可能会丢失整个数据库。使用prepare语句是不可能的。如果您想了解更多信息,可以在web上搜索“SQL注入风险”