2012-07-10 53 views
0

我是一个相对较新的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 />&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>  
+2

你现在有什么是**敞开** SQL注入,和你* *如果你还没有被黑客攻击**。学习如何使用PDO准备的查询完全避免此问题。另外,在输出到HTML中的任何变量数据周围使用'htmlspecialchars(),以便某些数据不会破坏您的页面,因此您不太容易受到XSS的攻击。 – Brad 2012-07-10 04:25:38

+1

另一个友好的提示:使用'mysql'扩展名[不鼓励](http://php.net/manual/en/function.mysql-connect.php)。正如Brad指出的那样,看看使用'mysqli'或'PDO'。 – deefour 2012-07-10 04:31:53

+0

此外,应该使用['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

回答

0

问题得分调整输入都出了形式为:

<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> 
+0

你不需要'action ='''。如果省略,页面将提交给自己。 – 2012-07-10 04:36:18

+0

感谢Alireza,Shaquin,Brad和Deefour!我会发誓我尝试了一个这样的版本,其中一切都是必需的,但我必须在某个地方漏掉某些东西。经过一些小调整后,它现在正在工作。 – 2012-07-10 14:00:48

0

您的scoreAdjust<input>元素必须是被提交<form>元素中。

+0

感谢Brad,Shaquin和Deefour!我很欣赏你对SQL注入的额外关注,我知道是的,在目前的状态下它确实要求被黑客入侵。现在,我只是试图让功能下降,一旦我有了这些建议,我会回去实施保护措施。再次感谢。 – 2012-07-10 14:06:23

0

使用此代码:

  <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 
      } 

对于现场提交到$_POST,它需要一个form内。