웹에서 일주일이 지났는데도 일주일이 지난 후에 전문가에게 물어볼 것이라고 생각하는 데 사과 할 수 있으면 사과드립니다.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'오류로 인해 발생합니다. 이것으로 해결할 수있는 것이 무엇인지 알 수는 없습니다.
아직 브라우저에서 콘솔을 사용하지 않고 mysql_fetch_assoc – Orangepill
을 사용하지 않으면 아약스 호출에서 돌아 오는 것을 검사 할 수 있습니다. (console.log (responce_json)을 입력하면 콜백의 성공 사례가 표시됩니다.) 수신자가 무엇을 얻고 있는지 통찰력을 얻을 수 있습니다. – Orangepill
console.log (xmlhttp.responseText) 대신 ... 반환 된 json을 구문 분석 할 수없는 곳에서 PHP 통지 또는 뭔가를 얻는 중 – Orangepill