write_update.haed.skin.php 에서 경고창 띄울 수 있는 방법이 있을까요?

write_update.haed.skin.php 에서 경고창 띄울 수 있는 방법이 있을까요?

QA

write_update.haed.skin.php 에서 경고창 띄울 수 있는 방법이 있을까요?

본문

구현하고자 하는 방법 : 

게시글에 이미지 업로드시 

업로드 이미지 가로 사이즈를 확인하여 지정한 사이즈(예:1200px)보다 크면 

"업로드한 이미지가 1200px보다 크므로 업로드 하지 않습니다."

라는 경고창이 나오고 게시글 작성이 완료되도록 한다.

 

구현하고 있는 코드 :

write_update.haed.skin.php

<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
if(isset($_FILES['bf_file']['name']) && is_array($_FILES['bf_file']['name'])) {
    for ($i=0; $i<count($_FILES['bf_file']['name']); $i++) {
        $tmp_file  = $_FILES['bf_file']['tmp_name'][$i];
        $tmp_filename  = $_FILES['bf_file']['name'][$i];
        if (is_uploaded_file($tmp_file)) {
            $timg = @getimagesize($tmp_file);
            $width = $timg[0];  // 너비
            if($width > 1200) { // 1200보다 크다면
                $temp_msg .= '업로드한 \"'.$tmp_filename.'\" 이미지가 1200px 보다 크므로 업로드 하지 않습니다. 현재 가로 사이즈: ('.$width.')\\n';
                continue;
            }
        }
    }
}
if ($temp_msg)
    alert($temp_msg)

 

문제점 :

alert($temp_msg) 

적용시 당연히 글쓰기 페이지로 돌아갑니다. 원하는 구현방법은 경고창만 나오고 게시글이 정상적으로 작동되었으면 합니다.

alert($temp_msg)  대신 echo "<script>alert('메세지');history.go(-1);</script>" 처럼 스크립트 처리하면 작동할 줄 알았는데 경고창이 나오지 않습니다.

 

어떻게 하면 write_update.haed.skin.php 파일에서 경고창으 띄우고 넘어가게 할 수 있을까요?

이 질문에 댓글 쓰기 :

답변 3

if ($temp_msg)
alert($temp_msg,G5_URL.'/'.$bo_table.'/'.$wr_id);
를 write_update.skin.php 여기에 위와 같이 넣으면 넘어는 가는데요.
올리신 코드가 이미지는 등록이 안되어야 하는것 아닌가요?
테스트 해보니 이미지 등록이 되는데요??

제가 잘못이해한건가요?

맞습니다. 이미지는 등록이 안되어야 합니다.
이게 코어를 건드리지 않고는 방법이 없는 듯 하여 스크립트로
<script>alert('메세지');history.go(-1);</script>
이렇게 되돌아가면 제일 좋을 듯 한데 이 스크립트는 write_update.haed.skin.php 에서 먹히질 않네요.

이미지 사이즈가 지정사이즈보다 크면
이미지 사이즈 크다고 알터창뜨고
이미지는 등록이 안되고 글은 등록되면 되는건가요?
그렇담 사이즈가 클때 이미지를 삭제하면되는것 아닌가요?
write_update.skin.php


if ($temp_msg) {

$sql2 = " select * from {$g5['board_file_table']} where bo_table = '$bo_table' and wr_id = '{$wr_id}' ";
$result2 = sql_query($sql2);
while ($row2 = sql_fetch_array($result2)) {
   $delete_file = run_replace('delete_file_path', G5_DATA_PATH.'/file/'.$bo_table.'/'.str_replace('../', '', $row2['bf_file']), $row2);
   if( file_exists($delete_file) ){
     @unlink($delete_file);
   }
}

alert($temp_msg,G5_URL.'/'.$bo_table.'/'.$wr_id);
}

단 여러개중 1개가 크면 다 삭제하니 그 부분만 정리하면 될것 같은데요.

말씀해주신 방법이 제일 좋을 듯 싶습니다.
간밤에 마땅한 방법이 떠오르지 않아 일단 업로드는 유지한채 다른 방법으로 처리하는 것으로 짜보았는데 이렇게 사용하도록 새로 짜봐야겠네요.
끝까지 신경써주셔서 감사합니다 :)

찾으시는게 맞는지 모르겠지만...
다른거 검색하다가 비슷한게 보여서 살짝 수정해서 남겨봅니다^^;
write_update.skin.php
write_update.skin.php
2개 다지우고
write.skin.php


<?php for ($i=0; $is_file && $i<$file_count; $i++) { ?>
......
<!--여기서부터-->
<script>
$("input[id=bf_file_<?php echo $i+1 ?>").change(function(){
    // 필드 채워지면
    if($(this).val() != ""){
        // 가로,세로 길이
        var file = this.files[0];
        var _URL = window.URL || window.webkitURL;
        var img = new Image();
	var $target = $(this);
             
        img.src = _URL.createObjectURL(file);
        img.onload = function() {
	    var maxSize = 1200;
	    if(img.width > maxSize){
            alert("업로드한 이미지 가로사이즈가 1200px 보다 크므로 업로드 불가입니다.\n현재 가로 사이즈:" + img.width + "\n\n가로사이즈가 1200px 보다 작은 파일을 다시 선택해주세요.");
            $target.val('');
            }
        }
    }
});
</script>
<!--여기까지추가-->
<?php } ?>

테스트 크롬만 해봤어요~

소중한 코드 감사합니다.
업로드 전에 검사하는 것이 가장 좋은 방법인데 올려주신 방법으로 해결이 되는군요. ㅎㅎ
앞에 올려주신 코드를 손봐서 write_update.skin.php에 적용해서 조건에 안맞는 것은 파일과 $g5['board_file_table']의 db도 지우도록 변경해서 실사용에 적용했는데 아직은 별탈이 없습니다.
새로 올려주신 스크립트는 파일업로드의 기본 스타일을 변경해서 사용중이라
$("input[id=bf_file_<?php echo $i+1 ?>").change(function(){
부분에서 change 인식을 못할 것 같아요.


if ($temp_msg)
 alert($temp_msg)

이 부분을 write.update.tail.skin.php에 넣거나 훅을 활용하여 실행 순서를 최하단으로 옮기시면 될 것 같네요.

답변 감사합니다.
볼피드님 말대로 해보니 write_update.head.skin.php > write_update.skin.php > write_update.tail.skin 까지 진행이 되어 경고창이 나옵니다.
하지만 다시 글쓰기 창으로 돌아가버리네요. 그나마 글쓰기 창에 작성했던 내용이 남아있기라도 하면 좋은데 그마저도 없어 사용자 경험이 좋지 않게 됩니다.

/bbs/write_update.php 의


            // 관리자가 아니면서 설정한 업로드 사이즈보다 크다면 건너뜀
            if (!$is_admin && $filesize > $board['bo_upload_size']) {
                $file_upload_msg .= '\"'.$filename.'\" 파일의 용량('.number_format($filesize).' 바이트)이 게시판에 설정('.number_format($board['bo_upload_size']).' 바이트)된 값보다 크므로 업로드 하지 않습니다.\\n';
                continue;
            }

위의 구문 처럼 업로드는 되지 않지만 게시글 작성은 완료되었으면 좋겠는데 방법이 없을까요?

write.skin.php 에서

ajax로 하거나,  

파일만 먼저 서버로 전송하여 사이즈체크를 하시는게 더 나을것 같습니다.

 

javascript로 체크하는방법도 있습니다.

https://m.blog.naver.com/PostView.nhn?blogId=platinasnow&logNo=220913413142&proxyReferer=https:%2F%2Fwww.google.com%2F

역시 코어를 건드리지 않는 이상 뾰족한 방법이 없네요.
플래토님 말대로 ajax가 그나마 가장 좋은 대안 같습니다.
아니면 말씀하신 스크립트를 function fwrite_submit(f) 안에서 처리하여 못넘어가게 하는 방법도 될 듯 싶네요.

답변을 작성하시기 전에 로그인 해주세요.
전체 95
QA 내용 검색

회원로그인

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