我是一个相对较新的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']))
{
[email protected]$_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>
你现在有什么是**敞开** SQL注入,和你* *如果你还没有被黑客攻击**。学习如何使用PDO准备的查询完全避免此问题。另外,在输出到HTML中的任何变量数据周围使用'htmlspecialchars(),以便某些数据不会破坏您的页面,因此您不太容易受到XSS的攻击。 – Brad 2012-07-10 04:25:38
另一个友好的提示:使用'mysql'扩展名[不鼓励](http://php.net/manual/en/function.mysql-connect.php)。正如Brad指出的那样,看看使用'mysqli'或'PDO'。 – deefour 2012-07-10 04:31:53
此外,应该使用['Mysqli'](http://php.net/manual/en/book.mysqli.php)(它代表MySQL改进)和['mysqli_real_escape_string'](http:// php .net/manual/en/mysqli.real-escape-string.php)来清理数据库查询。否则,正如@Brad所说的,你的网站对SQL注入是开放的,你*将被黑客攻击*'。 – 2012-07-10 04:33:48