쿠폰번호 발행 업데이트판. (간단한 클래스화[PHP4 기준] 등...)
DB
CREATE TABLE `coupon_test` (
`couponNO` varchar(16) NOT NULL default '',
`ID` varchar(20) NOT NULL default '',
PRIMARY KEY (`couponNO`)
) TYPE=MyISAM;
쿠폰생성 소스
<?
// Mysql 클래스
class TMySql {
var $dbconn; // DB 연결 리소스
var $result; // Query 결과 저장 리소스
// 생성자: DB에 연결
function TMySQL($Host, $DB, $ID, $PW) {
$this->dbconn=mysql_connect($Host, $ID, $PW) or die("데이터베이스 연결에 실패하였습니다.<br/>".mysql_error());
mysql_select_db($DB, $this->dbconn) or die("{$DB}를 사용할 수 없습니다.<br/>".mysql_error());
}
// Query 실행. 결과를 $this->result 에 저장
function Query($SQL) {
mysql_real_escape_string($SQL);
$this->result=mysql_query($SQL, $this->dbconn);
if (!$this->result) die('INVALID QUERY: '.mysql_error());
}
// Query 결과의 갯수 반환
function Count() {
return mysql_num_rows($this->result);
}
}
// 쿠폰번호 클래스
class TCoupon {
var $coupon_len; // 쿠폰길이
var $arr_no; // 숫자배열
var $arr_alphabet;// 알파벳배열
// 생성자: 쿠폰길이를 받아 멤버에 세팅하고, 숫자와 알파벳배열을 세팅
function TCoupon($CouponLength=16) {
$this->coupon_len=$CouponLength;
// 숫자
for ($i=Ord('0'); $i<=Ord('9'); $i++) $this->arr_no[]=Chr($i);
// 알파벳
for ($i=Ord('A'); $i<=Ord('Z'); $i++) $this->arr_alphabet[]=Chr($i);
}
// 쿠폰번호 반환
function GetCoupon() {
$result_str="";
$len_no=count($this->arr_no);
$len_alphabet=count($this->arr_alphabet);
for ($i=0; $i<$this->coupon_len; $i++){
// 랜덤을 돌려 0 이면 숫자, 1 이면 알파벳
if (rand(0,1)==0) $result_str.=$this->arr_no[rand(0,$len_no-1)];
else $result_str.=$this->arr_alphabet[rand(0,$len_alphabet-1)];
}
return $result_str;
}
}
// DB 객체 생성
$MySQL=new TMySQL('localhost', 'db_bloodguy', 'bloodguy', 'nicehide');
// 길이가 16인 쿠폰번호 객체 생성
$Coupon=new TCoupon(16);
// 쿠폰발행 루프 (10000개의 번호를 생성한다고 가정)
$x=0;
while ($x<10000){
$CouponNo=$Coupon->GetCoupon();
// 해당 번호가 DB 있는 중복번호인가 체크
$MySQL->Query("select * from coupon_test where couponNO='{$CouponNo}'");
// 중복번호가 아니라면 DB 에 넣음
if ($MySQL->Count==0) {
$MySQL->Query("insert into coupon_test VALUES ('{$CouponNo}' ,'')");
//echo $CouponNo."<br>";
$x++;
}
// 중복번호라면 다시
else continue;
} // while ($x<10000)
?>