2014-04-11 2 views
0

PHP 파일에서 별도의 데이터를 가져와 jQuery와 함께 삽입 할 HTML 파일을 만들어야하므로 Json을 선택했습니다.

나는이 같은 (스크립트 태그 사이) 내 PHP 주요 파일을 보내

$.ajax({dataType: "json", url:'course_generator.php', data:{co_subj_co:editedCourseId}}).done(function(newCourse){ 
    var newCourseStructure = '<div class="tableRow dynamicRow noHeight injectedRow" data-isMultisubjectValue="'+isMultisubjectValue+'" data-subjectsNum="'+subjectsNum+'" data-id="'+courseId+'" id="'+courseId+'" data-abbrev="'+newCourseAbbrev+'" data-courseTypeId="'+newCourseTypeId+'" title="'+newCourseName+'"><div class="contentColumn40"><span class="tableContentText">'+newCourseName+' ('+newCourseTypeName+')</span></div><div class="contentColumn40">'+subjectList+'</div><div class="contentColumn10"><div class="tableIconLink"><a href="#"><div class="editIcon" data-id="'+courseId+'" title="Editar '+newCourseName+'"></div></a></div></div><div class="contentColumn10"><div class="tableIconLink"><a href="#"><div data-id="'+courseId+'" class="discontinueIcon" title="Discontinuar '+newCourseName+'"></div></a></div></div></div>';} 

이 제대로 editedCourseId 값 보냅니다. 그리고 무엇 course_generator.php 안에 것은입니다 :

$courseId = $_POST['co_subj_co']; 

$select_co = mysql_query("SELECT * FROM course_conf JOIN course_type ON co_fk_ct_id=ct_id JOIN co_rel_subj ON co_subj_co='$courseId' JOIN subject_conf ON su_id=co_subj_subj WHERE co_id='$courseId'"); 
$result_co = mysql_fetch_array($select_co); 

$newCourseId = $result_co['co_id']; 
$newCourseName = $result_co['co_name']; 
$newCourseAbbrev = $result_co['co_abbrev']; 
$newCourseTypeId = $result_co['co_fk_ct_id']; 
$newCourseTypeName = $result_co['ct_name']; 
$isMultisubjectValue = $result_co['co_multisubject']; 

$newCourseValues = '{"newCourseId":'.$newCourseId.',"newCourseName":'.$newCourseName.',"newCourseAbbrev":'.$newCourseAbbrev.',"newCourseTypeId":'.$newCourseTypeId.',"newCourseTypeName":'.$newCourseTypeName.',"isMultisubjectValue":'.$isMultisubjectValue.'}'; 

나는 두려워 임 $courseId = $_POST['co_subj_co'];가 제대로 수신되지 않는 경우, 그리고 둘 $newCourseValues 아무것도 생성되지 내 newCourseStructure로 내 주요 PHP 파일을 제대로 수신되지되고있다. 내가 만들고있는 몇 가지 오류를 확인해 주시겠습니까? 고맙습니다.


UPDATE :

내 PHP 주요 파일을 변경 한 후 대신 구조화 HTML 조각을 보여주는의

$courseId = intval($_POST['co_subj_co']); 
$subjectList = ""; 
$data =""; 

$select_co = mysql_query("SELECT * FROM course_conf JOIN course_type ON co_fk_ct_id=ct_id JOIN co_rel_subj ON co_subj_co='$courseId' JOIN subject_conf ON su_id=co_subj_subj WHERE co_id='$courseId'"); 
$result_co = mysql_fetch_array($select_co); 

$outArr['newCourseId'] = $result_co['co_id']; 
$outArr['newCourseName'] = $result_co['co_name']; 
$outArr['newCourseAbbrev'] = $result_co['co_abbrev']; 
$outArr['newCourseTypeId'] = $result_co['co_fk_ct_id']; 
$outArr['newCourseTypeName'] = $result_co['ct_name']; 
$outArr['isMultisubjectValue'] = $result_co['co_multisubject']; 

$subjectsNum=mysql_num_rows(mysql_query("SELECT * FROM co_rel_subj WHERE co_subj_co = '$courseId'")); 

$outArr['subjectsNum'] = $subjectsNum; 
echo json_encode($outArr); 

:

$.ajax({type : 'POST', dataType: "json", url:'config/forms/course_conf/course_generator.php', data:{co_subj_co:editedCourseId}}).done(function(newCourse){ 
var courseId = newCourse.newCourseId; 
var newcourseName = newCourse.newCourseName; 
var isMultisubjectValue = newCourse.isMultisubjectValue; 
var subjectsNum = newCourse.subjectsNum; 
var newCourseAbbrev = newCourse.newCourseAbbrev; 
var newCourseTypeId = newCourse.newCourseTypeId; 
var newCourseTypeName = newCourse.newCourseTypeName; 
var newCourseStructure = '<div class="tableRow dynamicRow noHeight injectedRow" data-isMultisubjectValue="'+isMultisubjectValue+'" data-subjectsNum="'+subjectsNum+'" data-id="'+courseId+'" id="'+courseId+'" data-abbrev="'+newCourseAbbrev+'" data-courseTypeId="'+newCourseTypeId+'" title="'+newCourseName+'"><div class="contentColumn40"><span class="tableContentText">'+newCourseName+' ('+newCourseTypeName+')</span></div><div class="contentColumn40">'+subjectList+'</div><div class="contentColumn10"><div class="tableIconLink"><a href="#"><div class="editIcon" data-id="'+courseId+'" title="Editar '+newCourseName+'"></div></a></div></div><div class="contentColumn10"><div class="tableIconLink"><a href="#"><div data-id="'+courseId+'" class="discontinueIcon" title="Discontinuar '+newCourseName+'"></div></a></div></div></div>';} 

그리고 내 course_generator.php 파일 , 이것은 무엇입니까 $newCourseStructure 결과 :

{"newCourseId":"243","newCourseName":"a","newCourseAbbrev":"ae","newCourseTypeId":"1","newCourseTypeName":"M\u00e1ster","isMultisubjectValue":"1","subjectList":" 
Edici\u00f3n y Acabado de Imagen Digital<\/div> 
","subjectsNum":1} 
+0

실제로 ajax 호출을하기 전에 jquery 스크립트에'editedCourseId' 변수가 정의되어 있습니까? –

+0

아래에 "아무 것도 표시되지 않습니다."라고 말하면됩니다. 생성 된 후에'newCourseStructure'로 무엇을하고 있습니까? – Archer

+0

내 문제의 실제 상태로 업데이트를 추가했습니다. 나는 Im가 newCourseStructure와 틀린 sthing을 만드는 것을 추측한다. – Biomehanika

답변

1

: 당신은 JSON 응답에서 subjectList를 사용하는 경우

$.ajax({ 
    type : 'POST', 
    dataType: "json", 
    url:'config/forms/course_conf/course_generator.php', 
    data:{ 
     co_subj_co:editedCourseId 
    }}) 
    .done(function(newCourse){ 
     var courseId = newCourse.newCourseId; 
     var newcourseName = newCourse.newCourseName; 
     var isMultisubjectValue = newCourse.isMultisubjectValue; 
     var subjectsNum = newCourse.subjectsNum; 
     var newCourseAbbrev = newCourse.newCourseAbbrev; 
     var newCourseTypeId = newCourse.newCourseTypeId; 
     var newCourseTypeName = newCourse.newCourseTypeName; 
     var newCourseStructure = '<div class="tableRow dynamicRow noHeight injectedRow"' 
     + ' data-isMultisubjectValue="' + isMultisubjectValue + '"' 
     + ' data-subjectsNum="' + subjectsNum + '"' 
     + ' data-id="' + courseId + '"' 
     + ' id="' + courseId + '"' 
     + ' data-abbrev="' + newCourseAbbrev + '"' 
     + ' data-courseTypeId="' + newCourseTypeId + '"' 
     + ' title="' + newCourseName + '">' 
     + '<div class="contentColumn40"><span class="tableContentText">' 
     + newCourseName + ' (' + newCourseTypeName + ')</span></div>' 
     // WHERE IS subjectList DEFINED? 
     + '<div class="contentColumn40">' + subjectList 
     + '</div>' 
     + '<div class="contentColumn10"><div class="tableIconLink">' 
     + '<a href="#"><div class="editIcon" data-id="' + courseId + '"' 
     + ' title="Editar ' + newCourseName + '"></div>' 
     + '</a></div></div><div class="contentColumn10"><div class="tableIconLink">' 
     + '<a href="#"><div data-id="'+courseId+'" class="discontinueIcon" ' 
     + 'title="Discontinuar '+newCourseName+'"></div></a></div></div></div>'; 
    /* 
    * your HTML is generated, but you never put it in the DOM 
    */ 
    $('#idOutputWrapper').empty().html(newCourseStructure); 
} 

, 그것은 어떤 이유로 닫는 </div> 태그와 함께 제공주의하시기 바랍니다, 어쩌면 당신도 그 변경해야 .

btw : 코드 서식이 끔찍합니다. 죄송합니다. js를 서버에 업로드하기 전에 압축 할 수 있지만 작업 중에는 읽을 수 있어야합니다. 방금 코드 블록에서 더 잘 맞도록 편집했습니다.

+0

Armin, 정말 열심히 읽을 수있는 권리가 있습니다. 임 그 변경 사항을 적용하려면, 나는 작동하는 경우 똑딱 거 야. 매우 감사드립니다. – Biomehanika

+0

이 근무했습니다. 고맙습니다. subjectList도 정의됩니다. – Biomehanika

+0

안녕하세요, 기쁜 소식을 듣고 답변을 수락 해 주셔서 감사합니다. – Armin

1

실제로 POST를 사용하고 있습니까, 아니면 GET 요청을 실행하고 있습니까 (브라우저의 개발자 도구에서이를 쉽게 알 수 있습니다). 에 의해 $courseId이 정수 인지도 확인해야합니다. 또한 요청 된 ID를 찾을 수없는 이벤트 조건을 추가해야합니다.

+0

고마워. 나는 그것을 바로 잡았다. 여전히 아무것도 표시되지 않으므로 더 많은 오류가 발생해야합니다. – Biomehanika

2

문자열 값을 따옴표로 묶지 않으므로 JSON 문자열이 유효한 JSON이 아닙니다. 수동으로 JSON을 만드는 대신 배열이나 객체를 만들고 json_encode()을 만듭니다.

JSON 문자열을 출력하는 데 별 모양을 사용하지 않습니다. echo 또는 print을 사용하십시오.

ajax 요청에 dataType : 'json'을 추가하면 jQuery가 JSON을 구문 분석하여 기본 JavaScript 객체를 반환합니다. success 함수에서 사용하는 모든 변수는 undefined입니다. JSON을 구문 분석 한 후에 사용해야합니다.

var courseId = newCourse.newCourseId; // and so on 

아약스 요청에 형식이 없으므로 기본값은 GET입니다. POST를 사용하려면 type : 'POST'을 추가하십시오.

+0

변경 사항을 적용하려고합니다. 나는 그 때 말할 것이다, 당신의주의를 당신을 감사하십시오. – Biomehanika

+0

내 문제의 실제 상태로 업데이트를 추가했습니다. 고맙습니다. – Biomehanika

2

POST 대신 $_GET['co_subj_co'];을 시도하십시오.

jQuery의 ajax 호출에 메서드를 지정하지 않으면 POST가 아니라 GET에 의해 호출됩니다.

1

MueR이 제안한 것처럼 courseID가 정수인지 확인하는 이유는 사람들이 원하는대로 전체 DB를 삭제하는 등의 작업을 수행하기를 원하지 않는다면 SQL 주입을 방지하기 위해서입니다. 물론 courseID는 자동 증가 int와 같은 것으로 가정합니다.

그러나 다른 많은 문제가 있습니다.

$outArr = array(); 
$outArr['newCourseId'] = $result_co['co_id']; 
$outArr['newCourseName'] = $result_co['co_name']; 
... 
echo json_encode($outArr); 

가 개인적으로, 난 그냥 모두 $ _POST와 $ _GET을 연결하는 $ _REQUEST를 사용하는 것을 선호 : 귀하의 JSON은 표면 상 인용되지 않은 문자열을 쓰고있어 이후 ... 방금로 json_encode를 사용해야 유효하지 않습니다. 더 쉽게 해줍니다. 내가 코드에서 두 가지를 주석 한

+1

NOOOOOOOOOOOO! $ _REQUEST (GET, POST 및 COOKIE fyi를 결합한)를 사용하지 마십시오. 입력 내용의 출처를 확인하십시오. POST 변수를 예상하면 POST에서 변수를 가져옵니다. $ _REQUEST는 _you_가 디버깅하는 것이 더 좋지만 안전하지 못합니다. – MueR

+1

예, 항상 유효성 검사를 실시합니다. 모든 사용자 파생 문자열은 공격의 대상이되므로 GET 대 POST 대 COOKIE 그 자체에 대해 걱정할 이유가 없습니다. –

+0

이것은 정말 유용했습니다. 많은 관심을 가져 주셔서 감사합니다 – Biomehanika

관련 문제