2014-05-22 3 views
0

나는 사용자가 시스템으로 동물 게임을 간단히 추측하는 웹 사이트를 만들었습니다. 스크립트가 연결되는 데이터베이스는 하나의 테이블 이진 트리이며 각 행에는 노드 ID가 있습니다. 게임의 현재 단계가 포함 된 화면에 URL을 인쇄해야 복사 및 붙여 넣기를하면 다른 사용자가 같은 지점으로 이동하게됩니다. 어떻게해야합니까? 대신 HREF의, SESSION을 사용하고 있기 때문에웹 링크에 노드 ID를 첨부하는 방법은 무엇입니까?

$query = "SELECT `message`, `parentID`,`answerYesID`, `answerNoID`, `nodeID` FROM  `creature`"; 
$where = ""; 

if(isset($_POST['answer'])){ 

$_SESSION['node'] = $_POST['answer'];} 

elseif (isset($_SESSION['node'])){ $where = "WHERE `nodeID` = '{$_SESSION['node']}'";} 

else { $where = "WHERE `parentID` IS NULL";} 

?> 

<?php 
if (isset($_POST['reset'])){ 

     $where = "WHERE `parentID` IS NULL"; 
     $_SESSION['node'] = 1; 
     echo $_SESSION['node']; 
} 

if (isset($_POST['submit']) && (isset ($_POST['answer']))){ 

     $where = "WHERE `nodeID` = '{$_POST['answer']}'"; 

}elseif (isset($_POST['submit']) && (!isset ($_POST['answer']))){ 

     $where = "WHERE `nodeID` = '{$_SESSION['node']}'"; 

     } 
echo'<div class="form">'; 
$result = mysqli_query($dbconn, $query.$where); 
$row = mysqli_fetch_assoc($result); 

echo "<p class = \"answer\">"; 
echo$row['message']; 
echo "</p>"; 

?> 

<form action="assignment.php" method="POST"> 
<input type="radio" name="answer" value="<?php echo $row['answerYesID'];?>">Yes 
<input type="radio" name="answer" value="<?php echo $row['answerNoID'];?>">No 
<input type="submit" name="submit" value="submit" class = "submit"> 
<input type='submit' name='reset' value='reset' class = "reset"> 
<a href="assignment.php"target="_blank" class = "link">click here...</a> 
</form> 

</div> 

<div class = "speech"> 
<span class= "welcome" ><h1>Welcome!</h1></span> 
<p>My name is Barry and I'm the game keeper.<br> 
This is the Creatures Expert Game. Answer <br> 
the first question to begin. Let's see if I can <br>guess what creature you are  thinking of!<br> 
<br> Hit the reset button to restart at anytime.</p> 
<a><img src="speech.png"></a> 
</div> 
<div class ="sparky"> 
<a><img src="sparkydog.png"></a> 
</div> 

<div class ="sign"> 
<a><img src="sign.png"></a> 
</div> 
</body> 

</html> 

페이지는 에코 할 수 있습니다 "assignment.php"= s573022.neongrit.net/assignment

+1

당신은 [SQL 주입 공격 (HTTP에 취약하다 :

따라서, 당신은 당신이 파일의 시작에서과 같이 URL에 설정 한 노드 아이디가 있다면 먼저 확인해야합니다 // bobby-tables.com). –

답변

0

에서 볼 수 있습니다 :

<a href="assignment.php?nodeId=<?=$_SESSION['node']?>" target="_blank" class = "link">click here...</a> 

그러나 기존 코드의 문제점은 양식을 제출하지 않으면 불가능한 $ _POST [ 'answer']를 발견 한 경우에만 $ _SESSION [ 'node']을 설정한다는 것입니다.

if (isset($_GET['nodeId']) && $_GET['nodeId'] != '') { 
    $_SESSION['node'] = $_GET['nodeId']; 
} 
else { //do whatever you do now to get the answer } 
+0

감사합니다. 저는 $ _SESSION [ 'node']을 사용하여 추적하고 있습니다. 인쇄 된 URL을 새 브라우저에 붙여 넣을 수 있고 게임의 같은 지점을 열 수 있도록 첨부하는 방법이 필요합니다. – user3519506

+0

@ user3519506 위의 내 대답을 편집했습니다. 지금 그것이 더 명확한 경우에 저에게 알려주십시오. – christosPan

관련 문제