테스트 사이트 - 개발 중인 베타 버전입니다

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

무와보 4년 전 조회 4,134

구현하고자 하는 방법 : 

게시글에 이미지 업로드시 

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

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

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

 

구현하고 있는 코드 :

write_update.haed.skin.php

</p>

<p><?php

if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가</p>

<p>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;

            }

        }

    }

}</p>

<p>if ($temp_msg)

    alert($temp_msg)</p>

<p>

 

문제점 :

alert($temp_msg) 

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

alert($temp_msg)  대신 echo "" 처럼 스크립트 처리하면 작동할 줄 알았는데 경고창이 나오지 않습니다.

 

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

댓글을 작성하려면 로그인이 필요합니다.

답변 3개

채택된 답변
+20 포인트

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

제가 잘못이해한건가요?

로그인 후 평가할 수 있습니다

답변에 대한 댓글 7개

무와보
4년 전
맞습니다. 이미지는 등록이 안되어야 합니다.
이게 코어를 건드리지 않고는 방법이 없는 듯 하여 스크립트로
<script>alert('메세지');history.go(-1);</script>
이렇게 되돌아가면 제일 좋을 듯 한데 이 스크립트는 write_update.haed.skin.php 에서 먹히질 않네요.
열공중
4년 전
이미지 사이즈가 지정사이즈보다 크면
이미지 사이즈 크다고 알터창뜨고
이미지는 등록이 안되고 글은 등록되면 되는건가요?
그렇담 사이즈가 클때 이미지를 삭제하면되는것 아닌가요?
write_update.skin.php
[code]
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);
}
[/code]
단 여러개중 1개가 크면 다 삭제하니 그 부분만 정리하면 될것 같은데요.
무와보
4년 전
말씀해주신 방법이 제일 좋을 듯 싶습니다.
간밤에 마땅한 방법이 떠오르지 않아 일단 업로드는 유지한채 다른 방법으로 처리하는 것으로 짜보았는데 이렇게 사용하도록 새로 짜봐야겠네요.
끝까지 신경써주셔서 감사합니다 :)
열공중
4년 전
찾으시는게 맞는지 모르겠지만...
다른거 검색하다가 비슷한게 보여서 살짝 수정해서 남겨봅니다^^;
write_update.skin.php
write_update.skin.php
2개 다지우고
write.skin.php
[code]
<?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 } ?>
[/code]
테스트 크롬만 해봤어요~
무와보
4년 전
소중한 코드 감사합니다.
업로드 전에 검사하는 것이 가장 좋은 방법인데 올려주신 방법으로 해결이 되는군요. ㅎㅎ
앞에 올려주신 코드를 손봐서 write_update.skin.php에 적용해서 조건에 안맞는 것은 파일과 $g5['board_file_table']의 db도 지우도록 변경해서 실사용에 적용했는데 아직은 별탈이 없습니다.
새로 올려주신 스크립트는 파일업로드의 기본 스타일을 변경해서 사용중이라
$("input[id=bf_file_<?php echo $i+1 ?>").change(function(){
부분에서 change 인식을 못할 것 같아요.
무와보
4년 전
알려주신 두번째 코드로 여차저차해서 수정하는데 성공하였습니다.
신경써주셔서 거듭 감사합니다 ^^
열공중
4년 전
잘 해결되었다니 다행이네요~^^

댓글을 작성하려면 로그인이 필요합니다.

플래토
4년 전

write.skin.php 에서

ajax로 하거나,  

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

 

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

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

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

댓글을 작성하려면 로그인이 필요합니다.

4년 전

</p>

<p>if ($temp_msg)</p>

<p> alert($temp_msg)</p>

<p>

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

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

/bbs/write_update.php 의
[code]
// 관리자가 아니면서 설정한 업로드 사이즈보다 크다면 건너뜀
if (!$is_admin && $filesize > $board['bo_upload_size']) {
$file_upload_msg .= '\"'.$filename.'\" 파일의 용량('.number_format($filesize).' 바이트)이 게시판에 설정('.number_format($board['bo_upload_size']).' 바이트)된 값보다 크므로 업로드 하지 않습니다.\\n';
continue;
}
[/code]
위의 구문 처럼 업로드는 되지 않지만 게시글 작성은 완료되었으면 좋겠는데 방법이 없을까요?

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인