2011-04-25 4 views
0

저는 잠시 일해 왔습니다. 이것은 제가 아는 간단한 문제입니다. 어떤 이유로 웹 페이지에 도착하면 드롭 다운되고 결과가 실제로 렌더링되지 않습니다. 사용자는 드롭 다운 메뉴에서 mysql 테이블에서 보려는 사용자 중 하나를 선택하게됩니다. 그런 다음 테이블에 해당 사용자 정보가 채워지고 사용자에게 표시됩니다. 테이블 정보는 다음과 같습니다.AJAX PHP와 mysql

내 데이터베이스에 7 개의 항목이 있습니다. 모두 기본 키 idUsers로 표시됩니다. 유효한 레코드는 데이터가 삭제되거나 데이터베이스에 추가 되었기 때문에 숫자 1,3,4,5,6,7,16입니다. 그런 다음 과목 이름 (SubjectName) 다음에 시험 전 (PostStressLvl), 시험 날짜 (TestDate) 및 시험을 시행 한 사람의 이름 (ProctorName)

이제 HTML FrontPage 색인 .html 중에서

<html> 
<head> 
<script type="text/javascript"> 
function showUser(str) 
{ 
if (str=="") 
    { 
    document.getElementById("txtHint").innerHTML=""; 
    return; 
    } 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=function() 
    { 
if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText; 
    } 
    } 
xmlhttp.open("GET","oldgetuser1.php?q="+str,true); 
xmlhttp.send(); } 
</script> 
</head> 
<body> 

<form> 
<select name="users" onchange="showUser(this.value)"> 
<option value=""> Select Subject:</option> 
<option value="1"> Geoff Jones</option> 
<option value="3"> Kandy Cane</option> 
<option value="4"> Robery Ostby</option> 
<option value="5"> Joomla Joseph</option> 
<option value="6"> Jack Killgore</option> 
<option value="7"> Mighty Duck</option> 
<option value="16"> Carolyn Spencer</option> 

</select> 
</form> 
<br /> 
<div id="textHint"><b>Info will be listed here.</b></div> 
</body> 
</html> 

여기에 어떤 도움이 많이 주시면 감사하겠습니다 oldgetuser1.php

<?php 
$q=$_GET["q"]; 
$con = mysql_connect('localhost','n00592629','carolyn'); 
if (!$con) 
{ 
echo 'connection Failed.'; 
exit; 
} 
mysql_select_db("n00592629", $con); 
$sql="SELECT * FROM SUBJECTS WHERE idUsers='".$q."'"; 

$result = mysql_query($sql); 

echo "<table border='1'> 
<tr> 
<td>idUsers</td> 
<td> SubjectName</td> 
<td> PreStressLvl</td> 
<td> PostStressLvl</td> 
<td> TestDate</td> 
<td> ProctorName</td> 
</tr>"; 

while ($row = mysql_fetch_array($result)) 
{ 
echo "<tr>"; 
echo "<td> value='$row[0]'</td><td> 
value='$row[1]'</td><td> 
value='$row[2]'</td><td> 
value='$row[3]'</td><td> 
value='$row[4]'</td><td> 
value='$row[5]'</td>"; 
echo "</tr>"; 
} 
echo "</table>"; 
mysql_close($con); 

?> 

의 PHP입니다.

답변

0

전체 게시물을 읽지는 않았지만 엄청난 SQL 주입 문제가 있습니다. 개발 이외의 것이라면 $ _GET [ 'q']을 통해 제공되는 내용의 유효성을 검사해야합니다. 누군가가 데이터베이스에 직접 명령을 보내는 것이 쉬울 것입니다.

코드를 살펴보면 div ID가 잘못되었다고 보입니다. 'txtHint'여야합니다.

0

코드를 확인해야합니다. 언급 한 파일을 축약 된 논리로 작성했습니다 (테스트하기 위해 데이터베이스를 사용하지 않고 데이터베이스를 작성했습니다). 에서 getElementById가 null 얻을 수 becase,

document.getElementById("txtHint").innerHTML=xmlhttp.responseText; 

그것은

document.getElementById("textHint").innerHTML=xmlhttp.responseText; 

(textHint하지 txtHint를) 말을해야하고 또한 내가 읽어

를 null로 .innerHTML에게 어차피 : 말한다 라인을 확인 @Ethan 응답과 그것은 정말 큰 문제를 지적합니다. (개방형 시스템에서 실제 데이터로 이것을 사용할 계획이라면). 큰 문제를 피하려면

$q = mysql_real_scape($_GET['q']); 

과 같은 것을 사용할 수 있습니다. 이것은 완벽한 해결책은 아니지만 적어도 그 무엇인가입니다.

+0

감사합니다. 그게 내 문제라고 믿을 수가 없어. 이제는 SQL 인젝션을 방해하기 위해 real_escape 부분을 추가했습니다. 고맙습니다; – user723091