2013-11-02 3 views
0

그래서 나는 AJAX 요청에서라는 PHP 페이지에서 파일을 포함하여 문제에 봉착 :PHP : AJAX 요청이 PHP하는

$(document).ready(function() { 
$("#image-status").html('Processing images...'); 
}); 

function process_images(files) { 
$.ajax ({ 
    type: "POST", 
    url: "includes/imageprocessor.php", 
    data: {files: JSON.stringify(files)}, 
    success: function(data){ 
     $("#image-status").html(data); 
    } 
}); 
} 

내가 imageprocessor.php에이 require_once를 노력하고있어이 :

또한 include 디렉토리에 있으며 작동합니다. 그냥 다른 페이지에서 사용하여 잘 작동하는 삽입을 실행했습니다. 하지만 실행하려고하면

Fatal error: Call to a member function prepare() on a non-object in /home/yogabopvolume26/theprivatesector.org/epic/includes/imageprocessor.php on line 90 

을 그 첫 번째 장소에서 db_connect이 필요하지 않은 것처럼 (그건 $ DB를 선언된다) :

function get_files($id) { 
$query = $db->prepare("SELECT * FROM files INNER JOIN file_profile_join ON files.id = file_profile_join.file_id WHERE file_profile_join.profile_id = " . $id . " GROUP BY files.id"); 
try { 
    $query->execute(); 
    $rows = $query->fetch(); 
} catch (PDOException $e) { 
    die($e->getMessage()); 
} 
} 

나중에 imageprocessor.php, 그것은 오류를. 그러나 db_connect.php를 찾을 수 없다는 오류도 반환하지 않습니다.

basename(__DIR__) 

(AJAX 요청을 통해 반복) imageprocessor.php에서 "포함"을 반환합니다.

require_once에서 절대 URL과 루트 경로를 모두 사용해 보았지만 오류가 발생하지 않고 imageprocessor.php에서도 계속 진행됩니다. require_once가 반환 된 후 해당 파일의 에코가 표시되지 않습니다. 또한 session_start (현재 세션이 활성화되어 있으므로 원본 페이지 [profile.php]에서 print_r $ _SESSION을 할 수 없습니다)에서 현재 세션을 가져올 수 없습니다. 아마 관련이있을거야? 나는 무엇이 잘못되었는지 알 수 없다.

+0

$ db의 내용을 덤프 할 수 있습니까? 외부 파일에 변수를 정의하면 define() 함수를 사용하여 변수를 참조해야합니다. –

+1

도움이 될까요? http://stackoverflow.com/questions/2531221/giving-my-function-access-to-outside-variable –

답변

0

db_connect.php 뭔가 링크입니다 희망 :

try { 
    $db = new PDO('mysql:host=localhost;dbname=test', $user, $pass); 
} catch (PDOException $e) { 
    print "Error!: " . $e->getMessage() . "<br/>"; 
    die(); 
} 

그리고 당신은 당신의 연결 파일에 대한 외부 연결 개체를 사용하는 경우, 당신은 global

를 사용하여 특정 파일에 해당 개체에 액세스 할 수 있습니다

그리고 내가 아는 당신이 파일 imageprocessor.php에서 개체 $db를 호출되지 않았기 때문에,이로 시도,이 오류가 :

function get_files($id) { 
    global $db; 
    $query = $db->prepare("SELECT * FROM files INNER JOIN file_profile_join ON files.id = file_profile_join.file_id WHERE file_profile_join.profile_id = " . $id . " GROUP BY files.id"); 
    try { 
     $query->execute(); 
     $rows = $query->fetch(); 
    } catch (PDOException $e) { 
     die($e->getMessage()); 
    } 
} 
을 에서가 아닌 객체의 멤버 함수 someFunc에
+0

Ah. 범위 문제. 늦었 어. 고마워, 그랬어. 그것은 이제 내 문장에 구문 오류를 반환하므로 모두 좋습니다! – Jeff

+0

@Jeff http://net.tutsplus.com/tutorials/php/php-database-access-are-you-doing-it-correctly/ 여기 PHP PDO에 대한 멋진 자습서입니다. –

0

전화() ...

어떤 객체의 someFunc() 메서드를 사용하고자 할 때 이러한 유형의 오류가 발생

, 그러나 불행히도 당신의 객체는 객체가 아닙니다. $nextObj 개체 때이 코드에서

$obj = New SomeObj(); 
$nextObj = $obj->someMethod(); // << Suppoes someMethod() returns a object if successfull 
$nextObj->newMethod(); 

한다고 가정

$nextObj->newMethod()에만 작동합니다. 그러나 성공에 성공한 경우에만 $obj->someMethod();이 개체를 반환하기 때문에 확실하지 않을 수 있습니다. 성공하지 못하면 개체를 반환합니다.

그렇게하는 것을 방지하는 좋은 방법입니다.

$nextObj = $obj->someMethod(); // << Suppoes someMethod() returns a object if successfull 
if(is_object($nextObj)){ 
    $nextObj->newMethod(); 
} else { 
    //Now you know that there is error while executing $obj->someMethod(); 
} 

또 다른 것 : 당신이 기능 function get_files($id)을 가지고 있기 때문에.$db 변수가 함수 범위 내에 정의되어 있지 않음을 스스로 확인할 수 있습니다. 그래서 $ db에는 현재 아무것도 들어 있지 않습니다. 다른 답변에서와 마찬가지로 global $db을 사용하거나 $db 개체를 함수의 인수로 전달할 수 있습니다.