Php 使用“提交”按钮(取决于首先提交的另一个按钮)

Php 使用“提交”按钮(取决于首先提交的另一个按钮),php,html,forms,Php,Html,Forms,我对PHP比较陌生,在一个不相关的领域工作了几年后回到学校。我正在为我爸爸做一个外部项目,遇到了一个表面上看来很容易解决的问题,而我似乎无法解决 在有问题的页面上,它显示了一个联盟中的球员列表及其得分。下面的表单有一个文本框,允许您输入名称和三个按钮;一个用于添加球员姓名(默认分数为0),从球员列表中删除该球员,第三个用于调整该球员的分数。我得到了前两个(“添加”和“删除”)来按照我的意愿工作,但是我遇到的问题是分数调整 如果单击“调整分数”按钮,它将显示一个新的文本框以输入分数,同时显示另一个

我对PHP比较陌生,在一个不相关的领域工作了几年后回到学校。我正在为我爸爸做一个外部项目,遇到了一个表面上看来很容易解决的问题,而我似乎无法解决

在有问题的页面上,它显示了一个联盟中的球员列表及其得分。下面的表单有一个文本框,允许您输入名称和三个按钮;一个用于添加球员姓名(默认分数为0),从球员列表中删除该球员,第三个用于调整该球员的分数。我得到了前两个(“添加”和“删除”)来按照我的意愿工作,但是我遇到的问题是分数调整

如果单击“调整分数”按钮,它将显示一个新的文本框以输入分数,同时显示另一个按钮以实际提交分数。问题是当你按下new按钮来调整分数时什么都没有发生,此时我刚刚得到了一个测试“echo”语句,它应该在提交时显示出来,但是没有发生。下面是有问题的代码。有没有关于我如何解决的想法?谢谢你的建议

<html>
<head>
    <LINK REL="stylesheet" type="text/css" href="styles/footballTest.css" />
    <title>VFW Football testing</title>
</head>
<body>
    <?php
        $dbConnect = mysql_connect("localhost", "root","");
        $dbName = "vfwleaguetest";
        $getPlayers = "SELECT * FROM `players`";
        if(!$dbConnect)
        {
            echo "<p>Connection failed</p>";
        }   
        if(mysql_select_db($dbName, $dbConnect) === false)
        {
            echo "<p>Could not select the database ".$dbName ."<br/>".mysql_error($dbConnect)." </p>";
        }
        if(isset($_POST['submit']))
        {
            $name=@$_POST['nameAdd'];
            $playerAdd = "INSERT INTO `vfwleaguetest`.`players` (`playerName`, `seasonTotal`) VALUES ('".$name."', '0')";
            if(mysql_query($playerAdd, $dbConnect) === false)
            {
                echo "<p>Error adding player to database: ".mysql_error($dbConnect)."</p>";
            }
        }
        unset($_POST['submit']);
        if(isset($_POST['delete']))
        {
            $name= @$_POST['nameAdd'];
            $playerDelete = "DELETE FROM `vfwleaguetest`.`players` WHERE `players`.`playerName` = '".$name."'";
            if(mysql_query($playerDelete, $dbConnect) ===false)
            {
                echo "<p>Error deleting player to database: ".mysql_error($dbConnect)."</p>";
            }
            else
            {
                echo $name." successfully removed from player list";
            }
        }
        if(isset($_POST['adjust']))
        {
            ?>
            <br/>
            <input type='text' name='scoreAdjust' size=5 />&nbsp;
            <input type='submit' name='fixScore' value='new season total for <?php echo $_POST['nameAdd'];?>' />
            <?php
            if(isset($_POST['fixScore'])) //THIS IS WHERE THE PROBLEM SEEMS TO LIE
            {
                echo "after fixScore click";
                //add sql below
            }
        }   
    ?>
    <form name="players" action="" method="post">
    <?php
        $playerList = mysql_query($getPlayers, $dbConnect);
        echo "<table><th><tr>";
        echo "<td>Player name</td><td>Season total</td></tr></th>";
        while(($row = mysql_fetch_row($playerList)) != false)
        {
            echo "<tr><td>$row[0]</td><td>$row[1]</td></tr>";
        }
        echo "</table>";
    ?>
    Manage players&nbsp;<input type="text" name="nameAdd" />&nbsp;
<input type="submit" name="submit" value="add" />&nbsp;
<input type="submit" name="delete" value="delete" />&nbsp;
<input type="submit" name="adjust" value="adjust score" />
    </form>
</body>
</html>    

足球测试
您的
scoreAdjust
元素需要位于正在提交的
元素中。

使用以下代码:

            <br/>
            <form method="post">
                <input type='text' name='scoreAdjust' size=5 />&nbsp;
                <input type='submit' name='fixScore' value='new season total for <?php echo $_POST['nameAdd'];?>' />
            </form>
            <?php
            if(isset($_POST['fixScore'])) //THIS IS WHERE THE PROBLEM SEEMS TO LIE
            {
                echo "after fixScore click";
                //add sql below
            }


问题是分数调整输入不符合形式:

<input type="text" size="5" name="scoreAdjust">
<input type="submit" value="new season total for aaa" name="fixScore">

你需要:

<form method="post" action=''>
  <input type="text" size="5" name="scoreAdjust">
  <input type="submit" value="new season total for aaa" name="fixScore">
</form>


您现在所拥有的对SQL注入非常开放,如果您还没有被注入,您将被黑客攻击。学习在PDO中使用准备好的查询,以完全避免此问题。另外,在输出到HTML的任何变量数据周围使用
htmlspecialchars()
,这样某些数据就不会破坏页面,也不会受到XSS的攻击。另一个友好提示:使用
mysql
扩展。正如Brad指出的那样,看看如何使用
mysqli
PDO
。此外,还应该使用(它代表MySQL改进版),并清理数据库查询。否则,正如@Brad所说,您的网站
完全可以接受SQL注入,您*将被黑客攻击*
。您不需要
action='
。如果省略,页面将自动提交。感谢Alireza、Shaquin、Brad和Deefour!我发誓我试过这样一个版本,所有必要的东西都在形式上,但我一定是错过了什么。经过一些小的修补,它现在开始工作了。谢谢布拉德、沙昆和迪福!我感谢您对SQL注入的额外关注,我知道,是的,在当前状态下,它确实要求被黑客攻击。现在我只是试着把功能放下,一旦我有了它,我就会回去按照建议实施保护措施。再次感谢。