저는 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 />
<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
다른 유용한 팁 : mysql 확장자를 사용하는 것은 권장하지 않습니다. (http://php.net/manual/en/function.mysql-connect.php). 브래드가 지적한대로'mysqli' 또는'PDO'를 사용하십시오. – deefour
또한 ['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 주입에 대해 열려 있으며, 당신은 * 해킹 당할 것입니다. '. –