[PHP] 변수에 달러 기호가 삽입되는경우[PHP] 변수에 달러 기호가 삽입되는경우

Posted at 2018. 8. 10. 15:42 | Posted in PHP
반응형




PHP에 특정 API에 접속하기위한 작업중


$변수값에 달러($) 특수 문자가 들어가는 경우에 이런무제가 발생하였다.




<?php
  error_reporting(E_ALL);
  ini_set("display_errors", 1);
  date_default_timezone_set('Asia/Seoul');

  $dollar = "abcde$x";
?>



<?php
  error_reporting(E_ALL);
  ini_set("display_errors", 1);
  date_default_timezone_set('Asia/Seoul');

  // $dollar = "abcde$x";

  // 쌍 따옴표( " )를 홑따옴표( ' )로 변경하여 해결
  $dollar = 'abcde$x';

  // 역슬래쉬(\) 기호를 삽입
  $dollar = "abcde\$x";

  echo $dollar;
?>




반응형
//

[PHP] SimpleSql 라이브러리를 사용한 손쉬운 쿼리사용[PHP] SimpleSql 라이브러리를 사용한 손쉬운 쿼리사용

Posted at 2018. 4. 16. 16:16 | Posted in PHP/PHP Library
반응형




다운로드 : https://github.com/cballou/SimpleSql







■ SimpleSQL이란?



뭐라고 자세히 적고 싶지만, 필자도 자세히는 모른다.

PHP상에서 SQL을 쉽게 사용할 수 있도록 해주는 라이브러리 정도라고 밖에는...

해당 포스팅외에도. 당장 GitHub를 뒤져보면.

PHP이외에도 여러 언어들에서 사용가능하고 배포중인 SimpleSQL 라이브러리의 모습을 확인 할 수 있다.



필자도 근무했던 회사에서 사용중이었기에.

관심을 가지고 이것이 어떤것인지 사용방법과 세팅에 대해 공부하기 위해 해당 포스팅을 작성하게 되었다.

필자는 코드이그나이트나, 라라벨 같은 프레임워크를 쓰지 않는 프로젝트에서

자주 사용을 해보려 한다.





■ SimpleSql 라이브러리 세팅하기




-. 해당포스팅의 SimpleSql 라이브러리를 사용하기위해서는 PDO를 사용할 수 있어야 한다.

-. PDO의 사용방법에 관해서는 http://wickedmagica.tistory.com/16 포스팅을 참고하자.




01. https://github.com/cballou/SimpleSql 접속하여 SimpleSql-master.zip 파일을 다운받는다.




02. 압축을 해제한 폴더를 살펴보면 src/CraftBlue/ 경로 안에 SimpleSql.php 파일이 존재한다.

     다른 파일상관없이 이 SimpleSql.php 하나만 작업할 프로젝트 경로로 복사하면 된다.




※ 필자의 환경에서는 SimpleSql.php 파일의 아래 두개의 코드로 에러가 발생하여 삭제 or 주석처리 하였다.

 SimpleSql.php

<?php

// namespace CraftBlue;


// use PDO;



class SimpleSql {

   /*** 기타 생략 ***/

}
?>




※ 같이 사용할 DB접송 정보 파일

 db_info.php

<?php
    define("DB_HOST", "DB IP주소");
    define("DB_USER", "DB접속 계정");
    define("DB_PASS", "DB접속 패스워드");
    define("DB_NAME", "DB이름");
?>






■ SimpleSql을 이용한 데이터 SELECT 하기



01. fetchRow 함수를 사용한 데이터 단건 데이터 조회



# 소스코드

<?php
    require_once("db_info.php");
    require_once("SimpleSql.php");

    $sql = new SimpleSql(DB_HOST, DB_USER, DB_PASS, DB_NAME);
       
    $row = $sql -> fetchRow("SELECT * FROM girl_group WHERE name = '웬디'");

    echo "<pre>";
    print_r($row);
    echo "</pre>";
?> 




# 출력결과




02. fetchRows 함수를 사용한 데이터 다수 데이터 조회



# 소스코드

<?php
    require_once("db_info.php");
    require_once("SimpleSql.php");

    $sql = new SimpleSql(DB_HOST, DB_USER, DB_PASS, DB_NAME);
        
    $row = $sql -> fetchRows("SELECT * FROM girl_group WHERE group_name = 'REDVELVET'");

    foreach($row as $key => $val) {
        echo "<pre>";
        print_r($val);
        echo "</pre>";
    }
?>




# 출력코드




■ SimpleSql을 이용한 데이터 INSERT 하기



# 소스코드

<?php
    require_once("db_info.php");
    require_once("SimpleSql.php");

    $sql = new SimpleSql(DB_HOST, DB_USER, DB_PASS, DB_NAME);
    
    $obj = array();
    $obj['name'] = "신비";
    $obj['position'] = "메인댄서, 서브보컬";
    $obj['group_name'] = "GIRLFRIEND";
    $obj['company'] = "쏘스뮤직";
    $obj['birthday'] = "1998-06-03 00:00:00";

    $cnt = $sql -> insert("girl_group", $obj);

    if($cnt > 0) {
        echo "등록 되었습니다.";
    } else {
        echo "등록에 실패 하였습니다.\n다시 시도하여주십시오.";
    }
?>



# 쿼리결과






■ SimpleSql을 이용한 데이터 UPDATE 하기



# 소스코드

<?php
    require_once("db_info.php");
    require_once("SimpleSql.php");

    $sql = new SimpleSql(DB_HOST, DB_USER, DB_PASS, DB_NAME);
    
    $obj = array();
    $obj['position'] = "메인보컬, 리드댄서";

    $whr = array();
    $whr['idx'] = "14";
    $whr['name'] = "Kei";

    $cnt = $sql -> update("girl_group", $obj, $whr);

    if($cnt > 0) {
        echo "업데이트 되었습니다.";
    } else {
        echo "업데이트에 실패 하였습니다.\n다시 시도하여주십시오.";
    }
?>




# 소스코드

 SimpleSql.php

<?php


/*** 기타 생략 ***/


public function update($table, array $data, $where = array()) {


        /*** 기타 생략 ***/


        // handle data portion
        $dataSql = array();
        foreach ($data as $key => $val) {
            if (strpos($key, ":") === 0) {
                $dataSql[] = substr($key, 1) . " = " . $key;
            } else {
                $dataSql[] = $key . " = :" . $key;
            }
        }
        $sql .= implode(",\n", $dataSql);


        /* 쿼리 구문 추가 */
        $sql .= " WHERE ";

        // handle where clause
        if (!empty($where)) {


        /*** 기타 생략 ***/


}


/*** 기타 생략 ***/


?>


WHERE를 추가한 이유 (공백)WHERE(공백)


update 함수를 실행시 조건을 제시할 WHERE절을 사용하거나 받아오는 부분이 도통 보이지 않았다.

그래서 강제로 " WHERE " 해당 구문을 삽입하여 사용하였다.




■ SimpleSql을 이용한 데이터 DELETE 하기


<?php
    require_once("db_info.php");
    require_once("SimpleSql.php");

    $sql = new SimpleSql(DB_HOST, DB_USER, DB_PASS, DB_NAME);
    
    $obj = array();
    $obj['name'] = "쯔위";

    $cnt = $sql -> delete("girl_group", $obj);

    if($cnt > 0) {
        echo "삭제 되었습니다.";
    } else {
        echo "삭제에 실패 하였습니다.\n다시 시도하여주십시오.";
    }
?>





반응형
//

[PHP] PHP 메일 발송[PHP] PHP 메일 발송

Posted at 2018. 4. 10. 00:11 | Posted in PHP/PHP Library
반응형




■ PHPMailer 다운받고 세팅하기.




01. https://github.com/PHPMailer/PHPMailer 사이트에 접속하여 PHPMailer-master.zip 파일을 다운받는다.



02. 다운받은 PHPMailer-master.zip 파일의 압축을 해제한다.




※ 필자는 포스팅 작성일 기준으로 PHP5 버전을 사용중이었기에 몇가지 문법이 맞지 않는 문제가 발생했었다.

   PHP7 버전을 사용중이라면 문제가 없겠지만 아래 버전을 사용하는 경우는 아래의 문서를 수정하여 사용해야 한다.



첨부파일 : PHPMailer.phpSMTP.php









참고 : http://still.tistory.com/172

참고 : https://support.google.com/a/answer/2520500?hl=ko




■ PHPMailer를 사용한 Gmail 전송




# 소스코드

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require "./php_mailer/src/PHPMailer.php";
require "./php_mailer/src/SMTP.php";
require "./php_mailer/src/Exception.php";

$mail = new PHPMailer(true);

try {

    // 서버세팅
    $mail -> SMTPDebug = 2;    // 디버깅 설정
    $mail -> isSMTP();        // SMTP 사용 설정

    $mail -> Host = "smtp.gmail.com";                // email 보낼때 사용할 서버를 지정
    $mail -> SMTPAuth = true;                        // SMTP 인증을 사용함
    $mail -> Username = "지메일ID@gmail.com";    // 메일 계정
    $mail -> Password = "지메일 비밀번호";                // 메일 비밀번호
    $mail -> SMTPSecure = "ssl";                    // SSL을 사용함
    $mail -> Port = 465;                            // email 보낼때 사용할 포트를 지정
    $mail -> CharSet = "utf-8";                        // 문자셋 인코딩

    // 보내는 메일
    $mail -> setFrom("지메일ID@gmail.com", "transmit");

    // 받는 메일
    $mail -> addAddress("애플ID@me.com", "receive01");
    $mail -> addAddress("네이버ID@naver.com", "receive02");
    
    // 첨부파일
    $mail -> addAttachment("./test.zip");
    $mail -> addAttachment("./anjihyn.jpg");

    // 메일 내용
    $mail -> isHTML(true);                                               // HTML 태그 사용 여부
    $mail -> Subject = "PHPMailer 발송 테스트 입니다.";              // 메일 제목
    $mail -> Body = "PHPMailer 발송에 <b>성공</b>하였습니다.";    // 메일 내용

    // Gmail로 메일을 발송하기 위해서는 CA인증이 필요하다.
    // CA 인증을 받지 못한 경우에는 아래 설정하여 인증체크를 해지하여야 한다.
    $mail -> SMTPOptions = array(
        "ssl" => array(
              "verify_peer" => false
            , "verify_peer_name" => false
            , "allow_self_signed" => true
        )
    );
    
    // 메일 전송
    $mail -> send();
    
    echo "Message has been sent";

} catch (Exception $e) {
    echo "Message could not be sent. Mailer Error : ", $mail -> ErrorInfo;
}
?>




# 출력결과① - 브라우저를 통해 소스코드를 실행 시킨다.





# 출력결과 - 받는 메일함으로 접속을 하면 아래와같이 메일이 성공적으로 도착한 것을 확인 할 수 있다.









■ PHPMailer를 사용한 NAVER 메일 전송



앞서 지메일에서는 CA인증이 필요했지만 네이버 메일에서는 CA인증이 필요치 않았다.


<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require "./php_mailer/src/PHPMailer.php";
require "./php_mailer/src/SMTP.php";
require "./php_mailer/src/Exception.php";

$mail = new PHPMailer(true);

try {

    // 서버세팅    
    $mail -> SMTPDebug = 0;    // 디버깅 설정
    $mail -> isSMTP();               // SMTP 사용 설정

    $mail -> Host = "smtp.naver.com";                      // email 보낼때 사용할 서버를 지정
    $mail -> SMTPAuth = true;                                // SMTP 인증을 사용함
    $mail -> Username = "네이버메일ID@naver.com";  // 메일 계정
    $mail -> Password = "메일 비밀번호";                   // 메일 비밀번호
    $mail -> SMTPSecure = "ssl";                             // SSL을 사용함
    $mail -> Port = 465;                                        // email 보낼때 사용할 포트를 지정
    $mail -> CharSet = "utf-8";                                // 문자셋 인코딩

    // 보내는 메일
    $mail -> setFrom("네이버메일ID@naver.com", "transmit");

    // 받는 메일
    $mail -> addAddress("ID@me.com", "receive01");
    $mail -> addAddress("지메일ID@gmail.com", "receive02");
    
    // 첨부파일
    $mail -> addAttachment("./test.zip");
    $mail -> addAttachment("./anjihyn.jpg");

    // 메일 내용
    $mail -> isHTML(true);                                                         // HTML 태그 사용 여부
    $mail -> Subject = "PHPMailer 발송 테스트 입니다.";                  // 메일 제목
    $mail -> Body = "PHPMailer 발송에 <b>성공</b>하였습니다.";    // 메일 내용
    
    // 메일 전송
    $mail -> send();
    
    echo "Message has been sent";

} catch (Exception $e) {
    echo "Message could not be sent. Mailer Error : ", $mail -> ErrorInfo;
}
?>




# 출력결과 - 브라우저를 통해 코드를 실행한다.




# 출력결과 - 받는메일은 Gmail로 지정하였다.






반응형
//

[PHP] DB 입출력시 따옴표( ' )를 처리방법[PHP] DB 입출력시 따옴표( ' )를 처리방법

Posted at 2018. 4. 6. 14:28 | Posted in PHP
반응형




■ 따옴표를 처리하는 addslashes(), stripslashes() 함수



PHP에서 문자열에 따옴표(큰 따옴표 : ", 작은 따옴표 : ')가 들어간 내용을 DB 값으로 집어 넣을때 addslashes, stripslashes 를 사용한다.

그런데 HTML에 직접 값을 넣지않고, PHP에서 바로 출력하는 경우 문제가 생겨 간단히 정리하고자 한다.


addslashes : 문자열에 따옴표가 사입된 경우 문자열 앞에 역슬래시(\')를 붙인다.

stripslashes : addslashes를 사용한 해당 문자열의 역슬래시를 제거한다.


단순하지만 아래 출력 코드와 같이 input 트그에 값을 넣눈경우가 있어 이렇게 저리해 보고자한다.





# 소스코드

<?

// 테스트할 따옴표가 들어간 문구

$str = "Rockin' In Rhythm";


echo $str;

echo "<br/><hr/><br/>";


// addslashes를 사용하여 따옴표 앞에 역슬래시를 붙임(\')

echo "addslashes : ".addslashes($str);

echo "<br/><hr/><br/>";


// stripslashes를 사용하여 따옴표 앞에 역슬래시를 제거(\')

echo "stripslashes  : ".stripslashes($str);

echo "<br/><hr/><br/>";



// value값등에 넣을 경우 \"%s\" 식으로 따옴표를 감싸주어서 해결해야 한다.

echo sprintf("<input type='text' value=\"%s\"/>", stripslashes($str));

?>




# 출력결과





위와같이 INPUTE 타입에 콤마를 삽입하는 경우 \"%s\" 로 감싸서 해결하였다.

단순한 실수 지만 순간 왜그러지 라고 계속 생각하느라 시간을 잡아 먹어서 이렇게 정리해 본다.








반응형
//