Php 使用“提交”按钮(取决于首先提交的另一个按钮)
我对PHP比较陌生,在一个不相关的领域工作了几年后回到学校。我正在为我爸爸做一个外部项目,遇到了一个表面上看来很容易解决的问题,而我似乎无法解决 在有问题的页面上,它显示了一个联盟中的球员列表及其得分。下面的表单有一个文本框,允许您输入名称和三个按钮;一个用于添加球员姓名(默认分数为0),从球员列表中删除该球员,第三个用于调整该球员的分数。我得到了前两个(“添加”和“删除”)来按照我的意愿工作,但是我遇到的问题是分数调整 如果单击“调整分数”按钮,它将显示一个新的文本框以输入分数,同时显示另一个按钮以实际提交分数。问题是当你按下new按钮来调整分数时什么都没有发生,此时我刚刚得到了一个测试“echo”语句,它应该在提交时显示出来,但是没有发生。下面是有问题的代码。有没有关于我如何解决的想法?谢谢你的建议Php 使用“提交”按钮(取决于首先提交的另一个按钮),php,html,forms,Php,Html,Forms,我对PHP比较陌生,在一个不相关的领域工作了几年后回到学校。我正在为我爸爸做一个外部项目,遇到了一个表面上看来很容易解决的问题,而我似乎无法解决 在有问题的页面上,它显示了一个联盟中的球员列表及其得分。下面的表单有一个文本框,允许您输入名称和三个按钮;一个用于添加球员姓名(默认分数为0),从球员列表中删除该球员,第三个用于调整该球员的分数。我得到了前两个(“添加”和“删除”)来按照我的意愿工作,但是我遇到的问题是分数调整 如果单击“调整分数”按钮,它将显示一个新的文本框以输入分数,同时显示另一个
<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 />
<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 <input type="text" name="nameAdd" />
<input type="submit" name="submit" value="add" />
<input type="submit" name="delete" value="delete" />
<input type="submit" name="adjust" value="adjust score" />
</form>
</body>
</html>
足球测试
您的
scoreAdjust
元素需要位于正在提交的
元素中。使用以下代码:
<br/>
<form method="post">
<input type='text' name='scoreAdjust' size=5 />
<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注入的额外关注,我知道,是的,在当前状态下,它确实要求被黑客攻击。现在我只是试着把功能放下,一旦我有了它,我就会回去按照建议实施保护措施。再次感谢。