post사용법 관련 질문입니다
본문
sql문을 post로 다른 파일에 전송하려는데 안되길래
간단한 테스트 코드를 짜서 테스트 해봤는데 역시나 안되네요..
a.php
b.php
일단 저 url은 아마 문제 없을거에요... 대체 뭐가 문제일까요? ?
답변 6
질문의 의도가 정확히 어떤건지는 잘 모르겠지만.
올려주신 코드로만 보고 답변을 드리자면 다음과 같이 해 볼 수 있을 것 같습니다.
먼저, CURLOPT_POSTFIELDS에 전송할 데이터를 배열 형태로 설정. 현재는 'sql' => $sql로 설정되어 있으며
또한, CURLOPT_RETURNTRANSFER을 1 대신 true로 설정.
마지막으로, echo '$sql';에서 작은따옴표로 둘러싸인 $sql을 출력하고 있으며, 변수를 출력하기 위해서는 작은따옴표나 큰따옴표를 사용하지 않아야 함.
a.php
<?php
include_once('../common.php');
$sql = "test-test-test";
$url = G5_PATH."/2test/b.php";
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_URL => $url,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => array(
'sql' => $sql
)
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
?>
?>
b.php
<?php
include_once('../common.php');
$sql = $_POST['sql'];
echo $sql;
?>
a.php 파일에서 curl_setopt_array 함수의 CURLOPT_POSTFIELDS 부분을 배열 형태로 수정하였고, CURLOPT_RETURNTRANSFER 값을 true로 변경.
또한, b.php 파일에서 $sql 변수 출력 부분에서 작은따옴표를 제거하였으며,
SQL 문이 b.php로 POST 방식으로 전송되어 출력될 것으로 생각합니다.
!-->!-->
제공해주신 코드를 살펴보면 몇 가지 문제가 있습니다. 아래에 각 문제와 그에 대한 해결 방법을 설명하겠습니다.
-
include_once('../common.php');
구문이 두 파일(a.php와 b.php) 모두에 포함되어 있습니다.include_once
를 사용하면 같은 파일이 이미 포함되어 있다면 다시 포함하지 않습니다. 그러므로 b.php에서는include_once('../common.php');
를 제거해야 합니다. -
cURL 요청 설정 중
CURLOPT_POST => 1,
을 사용하여 POST 요청을 보내고 있지만, b.php에서 전달받은 데이터를 실제로 사용하지 않고$sql
변수를 그대로 출력하고 있습니다. 따라서 b.php에서 전달받은 POST 데이터를 사용하려면echo '$sql';
을echo $sql;
로 수정해야 합니다.
다음은 수정된 코드입니다:
a.php:
<?php
include_once('../common.php');
$sql = "test-test-test";
$url = G5_PATH."/2test/b.php";
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => $url,
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => array(
'sql' => $sql
)
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
?>
b.php:
<?php
include_once('../common.php');
$sql = $_POST['sql'];
echo $sql;
?>
이제 수정된 코드를 사용하면 a.php에서 b.php로 파일 전송이 정상적으로 동작할 것입니다. 그러나 코드에서 사용된 G5_PATH
와 같은 상수들이 정의되어 있는지 확인해야 합니다. 필요에 따라 ../common.php
파일에서 해당 상수들을 확인하거나 정의해야 할 수 있습니다.
또다른 답변
제시해주신 소스 코드에서 문제가 발생하는 이유는 다음과 같습니다:
-
파일 경로 문제:
a.php
와b.php
가 동일한 디렉토리에 위치해야 합니다.a.php
의$url
변수에 설정된 경로에서b.php
파일을 찾을 수 있어야 합니다. -
common.php
파일 포함:include_once('../common.php');
를 통해common.php
파일을 포함하려고 합니다. 이 경우,common.php
파일이 올바른 경로에 위치하고 있어야 합니다. 경로가 올바른지 확인하고 필요한 경우 경로를 수정해야 합니다. -
CURL 설정:
CURLOPT_POSTFIELDS
옵션을 사용하여 POST 데이터를 전송하려는데, 현재는 단순한 문자열인$sql
을 전달하고 있습니다.CURLOPT_POSTFIELDS
는 배열 형태로 전달되어야 합니다. 따라서 아래와 같이 수정해야 합니다:
CURLOPT_POSTFIELDS => array(
'sql' => $sql
)
echo '$sql';
구문: b.php
에서 echo '$sql';
이라는 코드가 있습니다. 이 경우, 변수 $sql
을 출력하지 않고 문자열 '$sql'을 그대로 출력합니다. 변수 $sql
의 값을 출력하려면 아래와 같이 수정해야 합니다:
echo $sql;
위의 수정 사항을 반영하여 코드를 수정하고 실행하면 문제가 해결될 것입니다. 또한, PHP 에러 메시지를 확인하여 추가적인 문제를 파악할 수도 있습니다.
챗GPT 답변입니다.
참고하세요..
!-->!-->!-->!-->
...
//$url = G5_PATH."/2test/b.php";
$url = G5_URL."/2test/b.php";
...
CURLOPT_POSTFIELDS => http_build_query(array(
'sql' => $sql
))
...
안 되는 증상이 무엇인가요?
G5_PATH."/2test/b.php
브라우저에서 이 주소를 열어 보았을 때
에러가 나지 않는지 살펴보세요
제가 아는게 정답은 아니겠지만 Curl 의 구조를 모르시는것 같은데..
a에서 b로 전송하는건 리턴이 존재 해야 합니다.
즉 b에서 확인을 하는것이 아닌 a에서 보내서 제대로 왔는지 확인하는거죠..
쉽게 a에서 전송한 data값이 test-test-test라고 할때
b에서 변수로 받으셨고 그럼 그냥 조건을 만들던지 아님 return "Y"; 를 던져주던지 리턴값을 주고...
a에서 $response 자체를 echo 를 찍어서 통신에 성공을 했는지 여부를 보는것일텐데요...
한번 저러게 바꿔서 확인해보세요.
b.php에서
echo $sql;
이렇게 바꾸시면 됩니다.
!-->