[JavaScript] 시간(HH:MM)만을 입력하는 텍스트 박스[JavaScript] 시간(HH:MM)만을 입력하는 텍스트 박스

Posted at 2018. 8. 17. 17:57 | Posted in JavaScript & jQuery/JavaScript




■ 텍스트 박스에 시간 입력시 콜론(HH:MM) 자동 삽입




jQuery 캘린더와 같이 jQuery모듈들 중에도 시간을 선택하게 해주는 모듈들이 상당히 있었으나.

분단위를 세세하게 지정하기 힘든등의 무언가 마음에 들지 않는 부분들이 있어 제작하게 되었다.

HHMM 식으로 콜론없이 쭉 4개의 숫자를 자동으로 입력하면 HH:MM형식으로 숫자가 자동으로 기입되는 그런 구조이다.



# 소스코드

<html>
<head>
<title>:: 시간 자동 콜론 삽입(HH:MM) ::</title>
<style type="text/css">
    .timeBox {
        text-align:center;
        width:60px;    
    }
</style>
<script type="text/javascript">
    function inputTimeColon(time) {


        // replace 함수를 사용하여 콜론( : )을 공백으로 치환한다.
        var replaceTime = time.value.replace(/\:/g, "");


        // 텍스트박스의 입력값이 4~5글자 사이가 되는 경우에만 실행한다.
        if(replaceTime.length >= 4 && replaceTime.length < 5) {

            var hours = replaceTime.substring(0, 2);      // 선언한 변수 hours에 시간값을 담는다.
            var minute = replaceTime.substring(2, 4);    // 선언한 변수 minute에 분을 담는다.


            // isFinite함수를 사용하여 문자가 선언되었는지 확인한다.
            if(isFinite(hours + minute) == false) {
                alert("문자는 입력하실 수 없습니다.");
                time.value = "00:00";
                return false;
            }


            // 두 변수의 시간과 분을 합쳐 입력한 시간이 24시가 넘는지를 체크한다.
            if(hours + minute > 2400) {
                alert("시간은 24시를 넘길 수 없습니다.");
                time.value = "24:00";
                return false;
            }


            // 입력한 분의 값이 60분을 넘는지 체크한다.
            if(minute > 60) {
                alert("분은 60분을 넘길 수 없습니다.");
                time.value = hours + ":00";
                return false;
            }

            time.value = hours + ":" + minute;
        }
    }
</script>
</head>
<body>
    <h2>시간을 입력해 주세요</h2>

    <!-- maxlength의 값을 5로지정하여 다섯자리 이상의 값이 등록되는것을 막는다. -->

    <input type="text" class="timeBox" onKeyup="inputTimeColon(this);" placeholder="HH:MM" maxlength="5"/>
</body>
</html>




# 출력결과 - 정상적인 시간을 입력한 경우








# 예외처리① - 문자를 입력한 경우




# 예외처리② - 24시를 넘긴 시간을 입력한 경우




# 예외처리③ - 60분을 넘긴 시간을 입력한 경우







Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[Editor] Daum Open Editor 커스텀 메뉴 버튼 제작[Editor] Daum Open Editor 커스텀 메뉴 버튼 제작

Posted at 2018. 4. 20. 12:43 | Posted in API/DAUM 오픈 에디터




■ 다음 오픈 에디터 YouTube 영상 삽입 커스텀 버튼 제작




01. 먼저 다음 오픈 에디터 라이브러리중 editor.html 파일을 열고 수정한다.





02. editor.html 소스코드에 YouTube 영상 삽입 메뉴를 추가한다.

 editor.html


      ~ 기타 코드 생략 ~


<li class="tx-list">
    <div unselectable="on" id="tx_image" class="tx-image tx-btn-trans">
        <a href="javascript:;" title="사진" class="tx-text">사진</a>
    </div>
</li>
<li class="tx-list">
    <div unselectable="on" id="tx_file" class="tx-file tx-btn-trans">
        <a href="javascript:;" title="파일" class="tx-text">파일</a>
    </div>
</li>


<!-- YouTube 영상 삽입 커스텀 버튼 시작 -->

<li class="tx-list">
    <div style="height:25px;font-size:11px;margin-top:3px;">
        <a href="javascript:;" onClick="youTubeImplant();" title="YouTube">
            <div style="float:left;display:flex;align-items:center;">
                <img src="./daumEditor/images/icon/editor/youtube-logo.png"/>    <!-- 버튼 이미지 -->
            </div>
            <div style="float:left;display:flex;align-items:center;margin-top:2px;">&nbsp;YouTube</div>
        </a>
    </div>
</li>

<!-- YouTube 영상 삽입 커스텀 버튼 종료 -->


<li class="tx-list">
    <div unselectable="on" id="tx_media" class="tx-media tx-btn-trans">
        <a href="javascript:;" title="외부컨텐츠" class="tx-text">외부컨텐츠</a>
    </div>
</li>


      ~ 기타 코드 생략 ~


※ 사용된 CSS Style들은 삽입한 이미지에 맞추기위해 사용된것이다. 각자 주어진 환경에 맞게 수정해야 할것이다.




03. 그럼 상단 메뉴에 아래와 같이 YouTube 버튼이 추가된 모습을 확인 할 수 있다.





04. 다음으로 다음에디터를 불러올 board.php 파일을 수정한다.






05. board.php 파일에 YouTube 업로드 기능을 수행할 팝업 기능을 가진 자바스크립트 함수를 추가한다.

 board.php

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Daum 에디터</title>
<script src="https://code.jquery.com/jquery-1.12.4.min.js" type="text/javascript"></script>
<style type="text/css">
    a { text-decoration:none;color:#000000; }
</style>
<script type="text/javascript">
function saveContent() {
    if(jQuery("#title").val() == "") {
        alert("제목을 입력해 주세요.");
        jQuery("#title").focus();
        return;
    }

    Editor.save();
}

// YouTube 영상 업로드 창 팝업
function youTubeImplant() {


    var popUrl = "./daumEditor/pages/trex/youtube.html";
    var popOption = "./daumEditor/pages/trex/youtube.html";
    window.open(popUrl, "", popOption);
}
</script>
</head>
<body>
<form name="tx_editor_form" id="tx_editor_form" action="view.php" method="post" enctype="multipart/form-data" accept-charset="utf-8">
&nbsp;<b>제목&nbsp;:</b>&nbsp;<input type="text" id="title" name="title" style="width:680px;"/>
<div style="height:10px;"></div>
<div style="width:750px;">
<?php
    include_once ("./daumEditor/editor.html");
?>
<div align="right"><input type="button" value="등록" onClick="saveContent();"/></div>
</div>
</form>
</body>
</html> 





06. 마지막으로 YouTube 동영상 업로드 기능을 수행할 youtube.html 파일을 제작한다.

※ 이 포스팅은  multimedia.html 파일을 복사한 youtube.html파일 안의 코드를 수정하는 식을 작업을 진행하였다.




07. youtube.html 파일의 수정결과는 아래와 같다.

 youtube.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Daum 에디터 - YouTube 영상첨부</title>
<script src="../../js/popup.js" type="text/javascript" charset="utf-8"></script>
<link rel="stylesheet" href="../../css/popup.css" type="text/css"  charset="utf-8"/>
<style type="text/css">
    input,textarea { border:1px solid #000000;vertical-align:middle;font-size:12px;}
    
    /* swf wrapper, set width/height */
    .wrapper { width:458px; }
    .code { width:458px; }
    
    .hidden { display:none;}
    .show { display:auto;}
    .desc{ margin: 15px 27px 5px 25px;padding:10px 8px;text-align:left;font-weight:bold;}
    .desc span{ color:#496ce5; }
    .field { margin:0 auto 10px;background:#ffffff url(../../images/icon/editor/tvpot/body_bg.gif?rev=1.0.1);width:420px;height:239px;}
    .field li{ list-style-type:none;}
    .field .codesubmenu { padding-top:20px;width:350px; margin:0 auto; }
    .codeMenu { margin:0px auto;}
    .codeMenu li { display:inline;margin-right:20px; }
    .inputmenu { margin-top:20px;padding-left:30px; color:#333;font-size:11px;font-family:"돋움",dotum}
    .inputmenu input, .inputmenu textarea{ width:308px; }
    #codeUrl { margin-top:10px;}
    
    .inputmenu .unselected{color:#bbbbbb}
    .inputmenu .unselected input, .inputmenu .unselected textarea{border:1px solid #bbbbbb;}
    
    .point {
        font-weight:normal;
        color:#a7b9ec;
    }
</style>
<script type="text/javascript">
// <![CDATA[
    function initEmbeder() {
        var _opener = PopupUtil.getOpener();
        if(!_opener) {
            alert('잘못된 경로로 접근하셨습니다.');
            return;
        }

        var _embeder = getEmbeder('media');
        window.execEmbed = _embeder.embedHandler;
        
        autoResizeHeight($tx("wrapper"));
    }
    
    // 코드 삽입 완료 후
    function done() {

        var _data = {};
        var str = document.getElementsByName("url")[0].value.trim();

       

        // YouTube URL 주소에서 뒤에서 11자리의 문자열을 잘라낸다.

        youtubeCode = str.substring(str.length - 11);
        _data.url = "https://youtu.be/" + youtubeCode;

        if(typeof(execEmbed) == 'undefined') { // Virtual Function
            return;
        }
        executeAfterDataCheck(_data, function(){
            execEmbed(_data);
            closeWindow();
        });
    }

    function executeAfterDataCheck(data, successHandler) {
        if (data.url || data.code) {
            successHandler();
        } else {
            alert("첨부할 멀티미디어 주소를 바르게 입력해주세요.");
        }
    }


    <!-- 삭제

    function selectType(id){
        var textArea = document.getElementsByName("source")[0];
        var input = document.getElementsByName("url")[0];   
        if ( id == 'codeUrl' ){
            $tx.addClassName($tx('codeSource'), "unselected")
            $tx.removeClassName($tx('codeUrl'), "unselected")
            textArea.value = "";
            textArea.disabled = true;
            input.disabled=false;
            input.focus();
        }else{
            $tx.addClassName($tx('codeUrl'), "unselected")
            $tx.removeClassName($tx('codeSource'), "unselected")
            textArea.disabled = false;
            input.value = "";       
            input.disabled=true;
            textArea.focus();
        }
        autoResizeHeight($tx("wrapper"));
    }

    -->

// ]]>
</script>
</head>

<!-- HTML 폼은 필요없는 부분들을 대부분 잘라내었다. -->

<body onload="initEmbeder()">
<div id="wrapper" class="wrapper">
<div class="header">
    <h1>YouTube 동영상 삽입</h1>
</div>    
<div class="body">
    <div id="code" class="code">
        <p class="desc">링크입력 상자에 삽입할 <span>YouTube</span> 영상의 주소를 입력하세요.</p>
        <p class="desc">
            <label>링크입력 </label>
            <input type="text" name="url" style="width:320px;"/>
        </p>
    </div>
</div>
<div class="footer">
    <p><a href="#" onclick="closeWindow();" title="닫기" class="close">닫기</a></p>
    <ul>
        <li class="submit"><a href="#" onclick="done();" title="등록" class="btnlink">등록</a> </li>
    </ul>
</div>
</div>
</body>
</html>




08. 이제 다시 브라우저에서 에디터를 오픈하고 YouTube 동영상을 Daum Open Editor에 삽입해보자.







Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[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다시 시도하여주십시오.";
    }
?>





Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[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.php SMTP.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("yinglong200@me.com", "receive01");
    $mail -> addAddress("yinglong200@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로 지정하였다.






  1. 비밀댓글입니다

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[PHP] PHPExcel 엑셀 파일 업로드 하고 내용 읽기[PHP] PHPExcel 엑셀 파일 업로드 하고 내용 읽기

Posted at 2018. 3. 22. 09:37 | Posted in PHP/PHP Library




■ *.xls 파일 업로드 하고 내용 읽기




# 소스코드 - 엑셀 파일 업로드 excel_upload.php

<html>
<head>
<title>:: PHPExcel 파일읽기 ::</title>
</head>
<form enctype="multipart/form-data" action="./excel_read.php" method="post">
<table border="1">
    <tr>
        <th style="background-color:#DCDCDC">파일</th>
        <td><input type="file" name="excelFile"/></td>
    </tr>
    <tr>
        <th style="background-color:#DCDCDC">등록</th>
        <td style="text-align:center;"><input type="submit" value="업로드"/></td>
    </tr>
</form>
</html>

<html>

<head>

<title>:: PHPExcel 파일읽기 ::</title>

</head>

<form enctype="multipart/form-data" action="./excel_read.php" method="post">

<table border="1">

<tr>

<th style="background-color:#DCDCDC">파일</th>

<td><input type="file" name="excelFile"/></td>

</tr>

<tr>

<th style="background-color:#DCDCDC">등록</th>

<td style="text-align:center;"><input type="submit" value="업로드"/></td>

</tr>

</form>

</html>



출처: http://wickedmagic.tistory.com/584?category=613655 [사악미소의 현대마법의 공방]




# 소스코드 - 엑셀 파일 읽기 excel_read.php

<?php
include "./PHPExcel-1.8/Classes/PHPExcel.php";

$objPHPExcel = new PHPExcel();

// 엑셀 데이터를 담을 배열을 선언한다.
$allData = array();

// 파일의 저장형식이 utf-8일 경우 한글파일 이름은 깨지므로 euc-kr로 변환해준다.
$filename = iconv("UTF-8", "EUC-KR", $_FILES['excelFile']['name']);

try {

    // 업로드한 PHP 파일을 읽어온다.
    $objPHPExcel = PHPExcel_IOFactory::load($filename);
    $sheetsCount = $objPHPExcel -> getSheetCount();

    // 시트Sheet별로 읽기
    for($sheet = 0; $sheet < $sheetsCount; $sheet++) {

          $objPHPExcel -> setActiveSheetIndex($sheet);
          $activesheet = $objPHPExcel -> getActiveSheet();
          $highestRow = $activesheet -> getHighestRow();             // 마지막 행
          $highestColumn = $activesheet -> getHighestColumn();    // 마지막 컬럼

          // 한줄읽기
          for($row = 1; $row <= $highestRow; $row++) {

            // $rowData가 한줄의 데이터를 셀별로 배열처리 된다.
            $rowData = $activesheet -> rangeToArray("A" . $row . ":" . $highestColumn . $row, NULL, TRUE, FALSE);

            // $rowData에 들어가는 값은 계속 초기화 되기때문에 값을 담을 새로운 배열을 선안하고 담는다.
            $allData[$row] = $rowData[0];
          }
    }
} catch(exception $exception) {
    echo $exception;
}

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




# 출력결과 - 엑셀 파일 업로드




# 출력결과 - 엑셀 내용 출력





Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[PHP] PHPExcel 설치하고 엑셀파일 다운받기[PHP] PHPExcel 설치하고 엑셀파일 다운받기

Posted at 2018. 3. 21. 17:08 | Posted in PHP/PHP Library




■ PHPExcel 라이브러리 설치하기




01. https://github.com/PHPOffice/PHPExcel 사이트에 접속하여 PHP Excel 라이버러리 파일을 다운받는다.




02. 다운받은 파일의 압축을 해제한다.








Excel 파일 다운받기


# 소스코드

01. https://github.com/PHPOffice/PHPExcel 사이트에 접속하여 PHP Excel 라이브러리 파일을 다운받자.

출처: http://wickedmagic.tistory.com/583 [사악미소의 현대마법의 공방]

<?php

include "./PHPExcel-1.8/Classes/PHPExcel.php";


$objPHPExcel = new PHPExcel();


$arrTwice = array();

$arrTwice[1] = array("name" => "나연", "position" => "리드보컬, 리드댄서", "birthday" => "09월 22일");

$arrTwice[2] = array("name" => "정연", "position" => "리드보컬", "birthday" => "11월 01일");

$arrTwice[3] = array("name" => "모모", "position" => "서브보컬, 메인댄서, 서브래퍼", "birthday" => "11월 09일");

$arrTwice[4] = array("name" => "사나", "position" => "서브보컬", "birthday" => "12월 29일");

$arrTwice[5] = array("name" => "지효", "position" => "리더, 메인보컬", "birthday" => "02월 01일");

$arrTwice[6] = array("name" => "미나", "position" => "서브보컬, 메인댄서, 서브래퍼", "birthday" => "03월 24일");

$arrTwice[7] = array("name" => "다현", "position" => "리드래퍼, 서브보컬", "birthday" => "05월 28일");

$arrTwice[8] = array("name" => "채영", "position" => "메인래퍼, 서브보컬", "birthday" => "04월 23일");

$arrTwice[9] = array("name" => "쯔위", "position" => "서브보컬, 리드댄서", "birthday" => "06월 14일");


$objPHPExcel -> setActiveSheetIndex(0)

-> setCellValue("A1", "NO.")

-> setCellValue("B1", "이름")

-> setCellValue("C1", "포지션")

-> setCellValue("D1", "생일");


$count = 1;

foreach($arrTwice as $key => $val) {

$num = 1 + $key;

$objPHPExcel -> setActiveSheetIndex(0)

-> setCellValue(sprintf("A%s", $num), $key)

-> setCellValue(sprintf("B%s", $num), $val['name'])

-> setCellValueExplicit(sprintf("C%s", $num), $val['position'])

-> setCellValue(sprintf("D%s", $num), $val['birthday']);

$count++;

}


// 가로 넓이 조정

$objPHPExcel -> getActiveSheet() -> getColumnDimension("A") -> setWidth(6);

$objPHPExcel -> getActiveSheet() -> getColumnDimension("B") -> setWidth(12);

$objPHPExcel -> getActiveSheet() -> getColumnDimension("C") -> setWidth(30);

$objPHPExcel -> getActiveSheet() -> getColumnDimension("D") -> setWidth(15);


// 전체 가운데 정렬

$objPHPExcel -> getActiveSheet() -> getStyle(sprintf("A1:D%s", $count)) -> getAlignment()

-> setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);


// 전체 테두리 지정

$objPHPExcel -> getActiveSheet() -> getStyle(sprintf("A1:D%s", $count)) -> getBorders() -> getAllBorders()

-> setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);


// 타이틀 부분

$objPHPExcel -> getActiveSheet() -> getStyle("A1:D1") -> getFont() -> setBold(true);

$objPHPExcel -> getActiveSheet() -> getStyle("A1:D1") -> getFill() -> setFillType(PHPExcel_Style_Fill::FILL_SOLID)

-> getStartColor() -> setRGB("CECBCA");


// 내용 지정

$objPHPExcel -> getActiveSheet() -> getStyle(sprintf("A2:D%s", $count)) -> getFill()

-> setFillType(PHPExcel_Style_Fill::FILL_SOLID) -> getStartColor() -> setRGB("F4F4F4");


// 시트 네임

$objPHPExcel -> getActiveSheet() -> setTitle("트와이스");


// 첫번째 시트(Sheet)로 열리게 설정

$objPHPExcel -> setActiveSheetIndex(0);


// 파일의 저장형식이 utf-8일 경우 한글파일 이름은 깨지므로 euc-kr로 변환해준다.

$filename = iconv("UTF-8", "EUC-KR", "트와이스_TWICE");


// 브라우저로 엑셀파일을 리다이렉션

header("Content-Type:application/vnd.ms-excel");

header("Content-Disposition: attachment;filename=".$filename.".xls");

header("Cache-Control:max-age=0");


$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel5");

$objWriter -> save("php://output");

?>



# 출력결과



위 이미지와 같이 엑셀파일이 생성되는 것을 확인 할 수 있다.




Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[PHP] PHP QR코드 이미지 저장하고 띄우기[PHP] PHP QR코드 이미지 저장하고 띄우기

Posted at 2018. 3. 16. 12:35 | Posted in PHP/PHP Library




■ <img>태그를 사용하여 QR코드 불러오기




# 소스코드01 - QR코드를 생성하는 php_qrcode_01.php

<?php

    include_once "./phpqrcode/qrlib.php";


ob_start("colback");

$codeText = "안녕하세요 반갑습니다.";

$debugLog = ob_get_contents();


ob_end_clean();


QRcode::png($codeText);

?>




# 소스코드02 - <img>태그를 사용하여 QR코드를 불러올 php_qrcode_02.php

<?php

    echo "<img src='php_qrcode_01.php'/>";

?>




# 출력결과








■ QR코드를 이미지로 저장하고 가지고오기




# 소스코드

<?php
    include_once "./phpqrcode/qrlib.php";
       
    $codeContents = "WickedMISO";
    $filePath = md5($codeContents).".png";
   
    if(!file_exists($filePath)) {
        QRcode::png($codeContents, $filePath);
        echo "파일이 정상적으로 생성되었습니다.";
        echo "<hr/>";
    } else {
        echo "파일이 이미 생성되어 있습니다.\n파일을 지우거나 이름을 바꾸어 실행하세요.";
        echo "<hr/>";
    }
   
    echo "저장된 파일명 : ".$filePath;
    echo "<hr/>";
    echo "<img src='".$filePath."'/>";
?>




# 출력결과




# 파일생성





※ QR코드를 정상적으로 성공하는데 성공했다면, 이제 QR코드의 스캔하여 그 데이터를 가져와 보자.


참고 : [JavaScript ] QR CODE 스캐너 제작 - jsQR 사용







Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[PHP] PHP QR코드 세팅하기[PHP] PHP QR코드 세팅하기

Posted at 2018. 3. 15. 01:02 | Posted in PHP/PHP Library




■ PHP QR Code 설치하기




 -. QR코드를 생성하기 위해서는 PHP GD가 사용 가능한 상태여야 한다.

 -. php.ini를 오픈하여 extension=php_gd2.dll 파일이 사용가능한 상태인지 확인해 보자.

사용이 가능하지 않은 상태라면 extension=php_gd2.dll주석( ; )을 제거하고 Apache 를 재시작 한뒤 진행해야 한다.




01. https://sourceforge.net/projects/phpqrcode/files/ 사이트에 접속하여 PHP QR Code 라이브 러리를 다운받는다.




02. 잠시 기다리고 있으면 phpqrcode.zip 파일을 다운받을 수 있다.




03. 다운받은 phpqrcode.zip 파일의 압축을 해제한다.










■ PHP QR Code를 사용하여 QR코드 생성하기




# 소스코드

<?php

    // 압축을 해제한 phpqrcode 폴더의 grlib.php 파일을 include한다.

    include_once "./phpqrcode/qrlib.php";

   

    // 출력 버퍼 사용 시작!!

    ob_start("colback");

   

    $codeText = "안녕하세요 반갑습니다.";

   

    // 출력 버퍼의 내용을 변수로 저장한다.

    $debugLog = ob_get_contents();


    // 출력 버퍼의 내용을 출력하지 않고, 출력 버퍼를 비우고 종료한다.

    // 출력 버퍼의 내용은 반드시 비워야 한다.

    ob_end_clean();


    QRcode::png($codeText);

?>




# 출력결과




위와같이 QR코드가 정상적으로 생성되는것을 확인할 수 있다.





Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기