2012-12-09 2 views
4

나는 잠시 동안 html 드롭 다운 메뉴에서 선택한 초기 텍스트 을 기반으로 데이터베이스에서 정보를 가져 오는 올바른 방법을 찾으려고 노력 해왔다.PHP, AJAX HTML의 입력란을 자동으로 채우시겠습니까?

<html> 
<head> 
</head> 
<script src="testjs.js"></script> 
<?php 
    $host = ""; 
    $username = ""; 
    $password = ""; 
    $database = ""; 
    mysql_connect($host, $username, $password); 
    mysql_select_db($database); 
?> 
<body> 

<form> 
<select name="users" onchange="showUser(this.value)"> 
<option value="">Select a person:</option> 
<?php 
    $Query = mysql_query("SELECT * FROM population"); 
    while ($Rows = mysql_fetch_array($Query)) 
    { 
     $ID = $Rows['ID']; 
     $Pop = $Rows['Pop']; 
     $UniqueID = $Rows['uid']; 
     echo "<option value=\"$UniqueID\">$Pop</option>"; 
    } 
?> 
</select> 
</form> 
<br> 
<p>DB ID <input type="text" id="ids" name="ID" ></p> 
<p>Population <input type="text" id="content" name="contet" ></p> 
<p>Unique ID <input type="text" id="uid" name="uid" ></p> 
<div id="GetInformation"><b>Person info will be listed here.</b></div> 

</body> 
</html> 

test.js 포함 :

function showUser(str) 
{ 
if (str=="") 
    { 
    document.getElementById("GetInformation").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("GetInformation").innerHTML=xmlhttp.responseText; 
    } 
    } 
xmlhttp.open("GET","getuser.php?q="+str,true); 
xmlhttp.send(); 
} 

가져 오기 사용자가 포함되어 여기

내 코드입니다

<?php 
$q=$_GET["q"]; 

$con = mysql_connect('', '', ''); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("DropDown", $con); 

$sql="SELECT * FROM population WHERE uid = '".$q."'"; 

$result = mysql_query($sql); 

while($row = mysql_fetch_array($result)) 
    { 
    $ID = $row['ID']; 
    $Pop = $row['Pop']; 
    $UID = $row['uid']; 
?> 
<script type="text/javascript"> 
var ids = '<?php echo json_encode($ID); ?>'; 
var content = '<?php echo json_encode($Pop); ?>'; 
var uid = '<?php echo json_encode($UID); ?>'; 
</script> 
<?php } 
mysql_close($con); 
?> 
+2

** 경고! ** 코드에 [SQL 주입 취약점] (http://en.wikipedia.org/wiki/SQL_injection)이 있습니다. [PDO로 전환] (http://php.net/book.pdo) 또는 [mysqli] (http://php.net/book.mysqli)에서 [준비된 문과 매개 변수화 된 쿼리 문]을 사용할 수 있도록하십시오 (http : //en.wikipedia.org/wiki/Prepared_statement). – Charles

+0

정말 원하는 것이 있습니까? – thiagoh

+0

@ thiagoh OP가 자바 스크립트를 사용하여 데이터베이스의 다른 테이블에서 정보를 얻고 싶다고 생각합니다. 그 변수들을 자바 스크립트에 제출하고, 자바 스크립트를 사용하여 자바 스크립트 문자열에 포함 된 정보를'

답변

1

는 변경하려고

while($row = mysql_fetch_array($result)) 
    { 
    $ID = $row['ID']; 
    $Pop = $row['Pop']; 
    $UID = $row['uid']; 
?> 
<script type="text/javascript"> 
var ids = '<?php echo json_encode($ID); ?>'; 
var content = '<?php echo json_encode($Pop); ?>'; 
var uid = '<?php echo json_encode($UID); ?>'; 
</script> 
<?php } 
,

while($row = mysql_fetch_array($result)) 
{ 
    $ID = $row['ID']; 
    $Pop = $row['Pop']; 
    $UID = $row['uid']; 
    echo $ID . ' - ' . $Pop . ' - ' . $UID; 
} 

이 작동합니다. 나중에 클라이언트 측에서 더 많은 액세스를 제공 할 수있는 더 좋은 방법이 있습니다. 예 : 다시 JSON 개체를 보내, 빠른 예는 다음과 같습니다

$info = array(); 
while($row = mysql_fetch_array($result)) 
{ 
    $ID = $row['ID']; 
    $Pop = $row['Pop']; 
    $UID = $row['uid']; 

    $info[] = array('id' => $ID, 'pop' => $Pop, 'uid' => $UID); 
} 
echo json_encode($info); 

를하고 JS는 것 같은 뭔가 :

if (xmlhttp.readyState==4 && xmlhttp.status==200) 
{ 
    var data = JSON.parse(xmlhttp.responseText); 
    for(var i=0;i<data.length;i++) 
    { 
     document.getElementById("GetInformation").innerHTML += data[i].id + ' - ' + data[i].pop + ' - ' + data[i].uid; 
    } 
} 

참고 :는 포함하지 않는 브라우저를 사용하여 작업하는 경우 http://www.json.org/js.html을로드해야하는 JSON 라이브러리 또한 jQuery를 사용하려는 경우 AJAX/DOM 변경 사항이 훨씬 간단해질 수 있습니다.

관련 문제