post사용법 관련 질문입니다

post사용법 관련 질문입니다

QA

post사용법 관련 질문입니다

본문

sql문을 post로 다른 파일에 전송하려는데 안되길래

간단한 테스트 코드를 짜서 테스트 해봤는데 역시나 안되네요..

 

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';
 
?>

 

일단 저 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 방식으로 전송되어 출력될 것으로 생각합니다.

 

제공해주신 코드를 살펴보면 몇 가지 문제가 있습니다. 아래에 각 문제와 그에 대한 해결 방법을 설명하겠습니다.

  1. include_once('../common.php'); 구문이 두 파일(a.php와 b.php) 모두에 포함되어 있습니다. include_once를 사용하면 같은 파일이 이미 포함되어 있다면 다시 포함하지 않습니다. 그러므로 b.php에서는 include_once('../common.php');를 제거해야 합니다.

  2. 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 파일에서 해당 상수들을 확인하거나 정의해야 할 수 있습니다.
또다른 답변

 

제시해주신 소스 코드에서 문제가 발생하는 이유는 다음과 같습니다:

  1. 파일 경로 문제: a.phpb.php가 동일한 디렉토리에 위치해야 합니다. a.php$url 변수에 설정된 경로에서 b.php 파일을 찾을 수 있어야 합니다.

  2. common.php 파일 포함: include_once('../common.php');를 통해 common.php 파일을 포함하려고 합니다. 이 경우, common.php 파일이 올바른 경로에 위치하고 있어야 합니다. 경로가 올바른지 확인하고 필요한 경우 경로를 수정해야 합니다.

  3. 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 답변입니다.

참고하세요..

제가 아는게 정답은 아니겠지만  Curl 의 구조를 모르시는것 같은데..

a에서 b로 전송하는건 리턴이 존재 해야 합니다.

즉 b에서 확인을 하는것이 아닌 a에서 보내서 제대로 왔는지 확인하는거죠..

쉽게 a에서 전송한 data값이 test-test-test라고 할때

b에서 변수로 받으셨고 그럼 그냥 조건을 만들던지 아님 return "Y"; 를 던져주던지 리턴값을 주고...

a에서 $response 자체를 echo 를 찍어서 통신에 성공을 했는지 여부를 보는것일텐데요...

한번 저러게 바꿔서 확인해보세요.

답변을 작성하시기 전에 로그인 해주세요.
전체 0
QA 내용 검색
filter #php ×
  • 개별 목록 구성 제목 답변작성자조회작성일
  • 질문이 없습니다.

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT