2012-07-10 4 views
0

저는 PHP에 비교적 익숙하지 않습니다. 저는 수년 동안 관련없는 분야에서 일한 후 학교에 돌아 왔습니다. 저는 아빠를위한 외부 프로젝트에서 일하고 있으며 해결하기 어려운 것처럼 보이기 쉬운 표면으로 보이는 것을 실행했습니다.먼저 제출 된 다른 것에 대한 제출 버튼 사용

해당 페이지에서 리그의 선수 목록과 점수를 표시합니다. 아래 양식에는 이름과 3 개의 버튼을 입력 할 수있는 텍스트 상자가 있습니다. 하나는 플레이어로 이름을 추가하고 (기본값은 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

+1

다른 유용한 팁 : mysql 확장자를 사용하는 것은 권장하지 않습니다. (http://php.net/manual/en/function.mysql-connect.php). 브래드가 지적한대로'mysqli' 또는'PDO'를 사용하십시오. – deefour

+0

또한 ['Mysqli'] (http://php.net/manual/en/book.mysqli.php)를 사용해야합니다 (MySQL을 개선 한 것임), ['mysqli_real_escape_string'] (http : // php .net/manual/ko/mysqli.real-escape-string.php)를 사용하여 데이터베이스 쿼리를 삭제할 수 있습니다. 그렇지 않으면, @Brad가 말했듯이, 당신의 웹 사이트는'SQL 주입에 대해 열려 있으며, 당신은 * 해킹 당할 것입니다. '. –

답변

0

문제는 점수 입력 양식 벗어 조정됩니다

<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 = '''은 필요 없습니다. 생략하면 페이지 자체에 제출됩니다. –

+0

Alireza, Shaquin, Brad 및 Deefour에게 감사드립니다. 나는 맹세 했었습니다. 필요한 모든 것이 필요한 형태의 버전을 시도했지만 어딘가에 놓친 게 틀림 없습니다. 약간의 땜질 후에 그것은 지금 일하고있다. –

0

scoreAdjust에 대한 귀하의 <input> 요소가 제출되고있는 <form> 요소 내에 있어야합니다.

+0

Brad, Shaquin 및 Deefour에게 감사드립니다! SQL 주입에 대한 귀하의 추가 관심에 감사 드리며 실제로 현재 해킹을 요청하는 상태입니다. 지금 당장은 일단 기능을 중단하려고 시도하고 있습니다. 일단 내가 돌아 가면 제안대로 안전 장치를 구현할 것입니다. 다시 한번 감사드립니다. –

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 내부에 있어야합니다.

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

당신이 필요합니다 :