2013-05-25 1 views
0

웹에서 일주일이 지났는데도 일주일이 지난 후에 전문가에게 물어볼 것이라고 생각하는 데 사과 할 수 있으면 사과드립니다.PHP에서 javascript로 데이터베이스 정보 전송 - mysql_fetch_array가 예상대로 작동하지 않음

조준 : 질의 (이 경우 PHP)에 서버 측 코드를 통해 SQL 데이터베이스, 다음 버튼을 동적으로 생성 할 수 있도록하는 웹 페이지에 자바 스크립트이 데이터베이스 정보를 전달한다. 데이터베이스에서 여러 행이 반환됩니다. 일단 버튼이 생성되면 PHP 코드를 호출하여 데이터베이스의 값을 변경하지만, 지금은 고민하고있는 첫 번째 부분입니다.

현재 솔루션 (꽤 작업) :이 코드를 수행하는 최적화는 여전히 제가 작은 비트에게 자신을 나중에 검토하고 세부 사항을 필요로하지 않는 문제를 정렬하려고하지만로,이 인식 그걸로.

개요 : PHP는 mysql_query를 통해 mysql 쿼리를 전송하여 데이터베이스에서 정보를 가져옵니다. 그런 다음 AJAX를 json_encode와 함께 사용하여 PHP의 정보를 인코딩 한 다음 에코를 사용하여 javascript에 대한 대답을 인쇄합니다.

PHP 코드 :

<?php //start php code 
include 'DatabasePhp/openDatabase.php'; //includes my mysql_connect code to connect to the database. Works. 
$query = 'SELECT `users`.`user_name`, `users`.`user_id`, `users`.`join_date`' 
. ' FROM users' 
. ' LIMIT 0, 30 '; 
$result= mysql_query($query); 
include 'DatabasePhp/closeDatabase.php'; 
$aa = mysql_fetch_array($result, MYSQL_ASSOC); 
$total_array[0] = $aa; 
$total_array[1] = array('user_name' => 'bb','day' => '5'); 
$formatted_variable_pass = json_encode($total_array); 
echo $formatted_variable_pass; 
?> 

PHP 노트 : 내 데이터베이스 결과의 각 라인을 통해 실행하고 $ total_array에 추가하는 문제를 해결하면 내가 while 루프를 사용합니다. 현재이 문제를 강조하기 위해 배열 색인 두 개만 설정되어 있습니다. $ total_array [0]은 mysql 쿼리의 응답을 저장하고 있습니다. $ total_array [1]은 연관 배열을 생성합니다 (mysql_fetch_array에서 얻은 것 같습니다).

자바 스크립트 코드 :

<script type="text/javascript" language="JavaScript"> 
document.write("Well your starting javascript"); 
var btn_num = 0; 

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() // the function called when a result is returned from the php 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
var responce_json = JSON.parse(xmlhttp.responseText); 
    document.getElementById("txtHint").innerHTML="got responce "+responce_json[0]['user_name']+" "+responce_json[1]['user_name']; 
}else if(xmlhttp.status==404){ 
    document.getElementById("txtHint").innerHTML="Not found"; 
}else if(xmlhttp.readyState==0){ 
    document.getElementById("txtHint").innerHTML="Responce was 0"; 
}else{ 
    document.getElementById("txtHint").innerHTML="Not completed the responce"; 
} 
} 
xmlhttp.open("POST","DatabasePhp/getUsers.php",true); 
xmlhttp.setRequestHeader("Content-type","application/json;charset=UTF-8"); 
xmlhttp.send(null); 

document.write("and the results are .... "); 

</script> 

자바 스크립트 노트 :이 코드는 기본적으로 사용중인 브라우저를 기반으로 XMLHttpRequest의 유형 클래스를 생성 후 xmlhttp.open를 통해 POST 요청을 보냅니다. 응답은 xmlhttp.onreadystatechange = function()을 통해 처리됩니다. 즉, 응답이 완료되면 xmlhttp.readyState == 4 & & xmlhttp.status == 200 일 때만 응답이 작성됩니다.

문제점 : mysql_fetch_array 데이터를 자바 스크립트로 전달하는 데 문제가 있습니다. $ associ_array [1]에 PHP associative array를 두었던 이유는 변수를 전달할 수 있다는 것을 증명하고 싶기 때문입니다. 코드가 성공적으로 다른 배열 내의 해당 배열을 전달하고 나는 responsece_json [1] [ 'user_name']을 통해 javascript에 액세스 할 수 있습니다. 불행히도 연관 배열을 얻으려고 시도해도 관계형 배열을 반환하도록 설정된 mysql_fetch_array에서 반환 된 코드는 responce_json [0] [ 'user_name']에 의해 수행되는 현재 코드에서 응답을 얻지 못합니다. 시련 동안 [0]에서 aa 연관 배열을 얻으려고 할 때 'null'이 혼합되어 반환되었습니다. 일반적으로 [user_name]]에 액세스하려고하면 코드가 완료되지 않습니다. mysql이 연관 배열을 반환했습니다.

그래서 질문입니다 : mysql_fetch_array (MYSQL_ASSOC을 통해 연관 배열을 반환하도록 설정된)에 대한 연관 배열에 대해 누락 된 것이 있습니까? 수동으로 생성 된 연관 배열처럼 반응하지 않습니다 (한 번은 javascript - php에서 제대로 작동합니다.) 그리고 왜 그럴 수 없는지 알 수 없습니다. 누구든지 변환 할 수/mysql 배열 내 수동 것과 같은 반응을 어떻게 이해해야합니까?

추가 : 웹 페이지에 자바 스크립트로 전달하는 대신 웹 페이지에 PHP를 포함시킬 때 문제가되는 sql이 아니며 웹 페이지에 기록 된 응답은 '[{ "user_name": "Frank", "user_id": "1", "join_date": "2013-05-15"}, { "user_name": "bb", "day": "5"}] ' 따라서 그것은 데이터베이스에서 정보를 성공적으로 검색하고 내게 이것은 연관 배열이있는 하나의 배열처럼 보이지만, 나는 'bb'의 user_name 만 검색 할 수 있으며 javascript에서는 Frank를 얻을 수 없습니다. . 추신 : 나는 두 배열은 공통적으로 user_name을 가지고 있지만, 그 순간에 액세스하려는 유일한 하나임을 알고 있습니다.

죄송합니다. 긴 게시물을 기다리며, 모든 생각을 끝내려고합니다.

제안 결과 : mysql_fetch_assoc - Orangepill; 나는 이것을 시도했다. 변화가 없었다. 웹에서 검토 할 수있는 모든 문서에서이 결과는 mysql_fetch_array ($ result, MYSQL_ASSOC)와 동일하게 반환됨을 이해합니다.

이동 closeDatabase.php - Michel Feldheim; 이 이동은 출력에 영향을주지 않습니다.

console.log (responce_json) - Orangepill; 고마워, 내가 이런 식으로 그것을 검토 할 수 있다는 것을 몰랐다. XMLHttpRequest를 조사 할 때 콘솔을 통해 다음과 같이 반환됩니다. XMLHttpRequest {statusText : "OK", 상태 : 200, 응답 : "[null, {"user_name ":"bb ","day ":"5 "} ] ", responseType :" ", responseXML : null ...}. 이것으로부터 나는 mysql_fetch_array 응답이 null로 전송되는 것을 볼 수 있는데, 이는 '잡히지 않은 오류 : InvalidStateError : DOM Exception 11'오류로 인해 발생합니다. 이것으로 해결할 수있는 것이 무엇인지 알 수는 없습니다.

+0

아직 브라우저에서 콘솔을 사용하지 않고 mysql_fetch_assoc – Orangepill

+0

을 사용하지 않으면 아약스 호출에서 돌아 오는 것을 검사 할 수 있습니다. (console.log (responce_json)을 입력하면 콜백의 성공 사례가 표시됩니다.) 수신자가 무엇을 얻고 있는지 통찰력을 얻을 수 있습니다. – Orangepill

+0

console.log (xmlhttp.responseText) 대신 ... 반환 된 json을 구문 분석 할 수없는 곳에서 PHP 통지 또는 뭔가를 얻는 중 – Orangepill

답변

0

결국 내가 잘못 본 것.

웹 페이지를 생성하기 위해 PHP 스크립트를 호출 할 때 스크립트 내의 include 문에 액세스 할 수 있었던 것으로 보입니다. 스크립트가 자바 스크립트 코드에서 호출되었을 때 데이터베이스를 열고 닫는 것을 다루는 내 포함 된 명령문을 찾을 수 없었습니다.

이렇게하면 답변이 반환되지 않습니다.

0

closeDatabase.php이라는 스크립트가 포함되어 있습니다. 이것이 이름에서 알 수있는 것이면 후에 모든 데이터를 가져온 후에 을 수행해야합니다.

+0

closeDatabase가 제대로 추측 했으므로 데이터베이스를 닫기위한 라인.불행히도 나는 PHP의 끝으로 이동하고 모든 정보가 검색된 후 echo 문 바로 전에 시도했지만 결과에는 차이가 없다. – user2419692