채택완료

input에 랜덤입력 방법

2018-02-02 (금) 17:32:27 2,404

게시물의 고유번호인것 처럼 하려고 하는건데요.

게시판 글쓰기 할때

wr_1에 5자리 숫자를 임의로 만들어

넣으려고 합니다.

그래서 업데이트 페이지에 

$wr_1=rand(30000,70000); 

해서 임의로 저장되게 해놨는데

문제는 중복이 생기면 안되는데

중복 방지는 어떻게 하는지 아세요?

아니면 영문을 섞어서 사용하는 방법이 있을까요?

다른 방법들도 알아보고 있지만 그방법이 가장 간편할 듯해서요.

|

답변 4개 / 댓글 3개

채택된 답변
+20 포인트
2018-02-02 (금) 17:41:44

function randomKey($length) { 

$key = "";

$pool = array_merge(range(0, 9), range('A', 'Z')); // 숫자, 영문 소문자, 영문 대문자

for($i=0; $i < $length; $i++){

    $key .= $pool[mt_rand(0, count($pool) - 1)];

}

return $key;

}

$wr_1 = randomKey(8); // 8자리의 랜덤 문자열

echo $wr_1;

이런식으로 사용하셔도 될 것 같네요 

답변에 대한 댓글 1개

2018-02-02 (금) 20:50:31
감사합니다. 좋네요. 딱 제가 원하던거네요 ^^

걍 시간+랜덤값에 md5를 돌리면 case sensitive영문+숫자로 구성된 문자열을 얻으실 수 있습니다.

이걸 5자리로 split해서 사용하시고 이후 중복 확인만 하면 될 듯 합니다.

5자리면 겹치긴 할텐데 숫자보다는 덜 겹치리라 생각 됩니다.

답변에 대한 댓글 1개

2018-02-02 (금) 20:50:47
감사합니다.

대강 이런식으로 응용하시면됩니다.

Copy
<?
$j = 0;
$create_coupon = false;

do {
    $wr_1 = '234092340234'; // 번호

    $sql3 = " select count(*) as cnt from g5_write_게시판명 where wr_1 = '$wr_1' ";
    $row3 = sql_fetch($sql3);

    if(!$row3['cnt']) {
        $create_coupon = true;
        break;
    } else {
        if($j > 20)
            break;
    }
} while(1);

if($create_coupon) {
    $sql = " update g5_write_게시판명
                set wr_1 = '$wr_1' where wr_id = '$wr_id' " ; 
    sql_query($sql); 
}
?>
2018-02-02 (금) 17:36:25

확실하게 할려면 무한반복하고 동일값이 없으면 반복문을 끝내시면 될거 같네요

답변에 대한 댓글 1개

2018-02-02 (금) 20:51:09
답변 감사합니다.

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