레이블이 PHP인 게시물을 표시합니다. 모든 게시물 표시
레이블이 PHP인 게시물을 표시합니다. 모든 게시물 표시

2010년 11월 24일 수요일

[PHP] php에서 숫자표현할때 소수점 둘째자리까지만 나오게하는 방법은?

출처 : http://www.happyjung.com/gnuboard/bbs/board.php?bo_table=lecture&wr_id=275&sca=&sfl=&stx=&sst=wr_1&sod=desc&sop=&page=10


[ 방법1 ]
<?
$a=4.99*10;
echo sprintf("%2.2f" ,$a);
?>
%2.2f 부분이 실수형을 00.00식으로 표현하게 해줍니다.
%2.3f 는 00.000이겠죠?


[ 방법2 ]
숫자형으로 출력시 소수점과 1000단위 컴마 표시법

<?
$number = 1234.56;

// english notation (default)
$english_format_number = number_format($number);
// 1,234

// French notation
$nombre_format_francais = number_format($number, 2, ',', ' ');
// 1 234,56

$number = 1234.5678;
// english notation without thousands seperator
$english_format_number = number_format($number, 2, '.', '');
// 1234.57
?>

2010년 11월 11일 목요일

PHP Ajax MySQL 로그인 중복체크

중복 중복 중복 ㅠㅠ;;
로그인 중복체크가 이렇게 어려울줄이야~~ 여러가지로 검색을 해보아도 나오지가 않아서 저 나름데로 짜집기(?)를 하여 중복체크 성공을하게되었습니다.

혹여나~ 다른곳에서 찾아헤메지마시고~ 제가 쓴방법을 한번 써보시기 바랄께요~~

p.s - 완벽하지는 않습니다.  ㅡ,.ㅡ;;

웹 사용환경
서버 : CentOS 5.5
APM : Apache 2.2.14, PHP5.2.12, MySQL5.1.41
사용언어 : PHP, Ajax

아래에 붙여질 소스코드에 대해서는 제가 사용하는 환경의 소스를 그대로 올리도록 하겠습니다.
클래스화 시켜 사용하던건데 일일이 풀기가 애매하네요.. 기억도 안나고 ㅎㅎ;;;

기능 1 - 로그인전이면 새로 데이터를 입력한다. → 로그인처리
기능 2 - 로그인된상태일때 다른곳에서 로그인이되면 먼저 로그인된 페이지는 자동 로그아웃된다.
기능 3 - 같은 브라우져에서 로그인을 중복해서하게되면 로그인정보의 시간만 업데이트가된다.

1. 중복체크를할 테이블 생성
Table: smstmember_session
 Field Type Comment
 sesskey varchar(50) NOT NULL 
 expiry int(10) NOT NULL 
 sessvalue varchar(50) NOT NULL 
 sessid varchar(30) NOT NULL 
 security int(1) NOT NULL 
 remoteip varchar(20) NULL 
저는 위의 형식으로 테이블을 생성하였습니다. ^^

2. 로그인 처리페이지 소스 추가 (ex> login_ok.php)

소스보기

소스와같이 세션DB에 로그인했을때의 세션ID와 사용자 ID 로그인 시간등을 입력하게됩니다.
또한 같은 세션ID일때 로그인을 다시하게되면 로그인 시간이 업데이트됩니다.

3. 로그아웃 처리하기 (ex> logout.php)

소스보기

로그아웃 페이지에서는 세션을 클리어하는것은 물론이고, 로그인하면서 DB에 입력되어있던 로그인정보를 삭제하게됩니다.

4. 중복 로그인 체크페이지 (ex> outlogin_check_session.php)

소스보기

다른곳에서 중복로그인이 되었는지 체크하는 페이지이다.
이 페이지에서는 세션DB의 값과 비교하기위한 정보들을 담고 있는다.
header 페이지나 footer 페이지 즉, 항상 웹페이지에 표시되는 부분에 추가하면 되겠다.

5. 중복 로그인 체크값 추출 (ex> login_check_tender.php)

소스보기

지금보이는 코드는 xml 형식으로 데이터를 추출하게되는 부분이다.
다음으로 설명된 js 파일에서 위의 페이지에서 생성된 xml 코드를 참조하여 로그인여부를 체크하게된다.

6. 중복로그인 체크 및 처리하기 (ex> login_check.js)

소스보기

바로위에서 말했듯이 "login_check_tender.php" 페이지에서 생성된 xml 형식의 코드를 분석 참조하여
다른곳에서 로그인이 이루어졌는지를 판단 및 처리를하게되는 스크립트이다.
다른곳 또는 다른 웹브라우저로 로그인을하게되면 기존에 로그인된 웹페이지는 자동적으로 로그아웃이 이루어지게된다.

여기까지 섭군이가 대충 짜집기한 중복로그인 방지 소스코드였습니다.
실질적으로 구상은 쉽게되는데 짜맞추려니... 여간 힘든게 아니네요 ㅠㅠ;;
질문은 않받을래요~ 머리가 뽀개질꺼 같거든요 ㅎㅎ;;;

2010년 9월 30일 목요일

[MySQL] 두개(여러개) 테이블 데이터 합치기

출처 : http://dddd87.untoc.com/tc/13

잊어먹을라~ ㅠㅠ;;

  1. INSERT Ignore INTO A SELECT * FROM B;

    테이블 A 와 B 가 같은 schema 일 때, 테이블 B의 데이터를 A 의 데이터에 넣는
    쿼리문이다.  A 와 B 의 중복 데이터를 제거하고 A와 다른 데이터만 추가하게 된다.

    예를 들어
      테이블 A 가

      id    name    age
    --------------------------
      1     kim         20
      2     lee         22
      3     kim         23

     이고
     
      테이블 B 가

      id    name    age
    --------------------------
      1     kim         20
      2     lee         22
      3     lee         24
      4     park       20

    일때 INSERT Ignore INTO A SELECT * FROM B; 쿼리 문을 실행 하게 되면 테이블 A는 아래와 같이 된다.
     
      id    name    age
    --------------------------
      1     kim         20
      2     lee         22
      3     kim         23
      4     lee         24
      5     park       20

  2. SELECT * FROM A UNION SELECT * FROM B

    1번과 같은 역할이지만 A테이블로 insert 하는것이 아니라
    테이블 A, B 를 중복된 데이터 제거하고 테이블이 union 되여 화면에 출력된다.
    이때도 테이블 A, B 는 같은 schema

2010년 9월 15일 수요일

PHP에서 UTF-8, EUC-KR 인코딩 변경

출처 : http://bomool.net/bbs/board.php?bo_table=bo0102&wr_id=10

UTF-8을 EUC-KR로 변경
$str = iconv("UTF-8", "EUC-KR", $str);

EUC-KR을 UTF-8로 변경
$str = iconv("EUC-KR", "UTF-8", $str);

다른 서버에서 글 내용을 가져와 파싱하는 경우에 특히 많이 사용하게 된다.
상식적으로 알아둘 점: EUC-KR에서 한글은 2byte, UTF-8에서 한글은 3byte이다.
글자수 기준으로 substr() 함수를 이용하여 자를 때 참고해두자.

2010년 8월 25일 수요일

[CentOS 5.4] PHP에서 파일업로드 않될때


기본적으로 PHP에서 파일 업로드가 않되는 이유는 두가지정도로 알고있다.

첫번째, httpd 서비스 실행자인 nobody에게 read/write 권한을 주었느냐이다.
두번째, php.ini 환경설정에서 file_uploads 옵션이 off로 되어있는지 확인하는것이다.

첫번째 문제라면은 웹 루트폴더 (DocumentRoot)에 가서 권한설정 명령어를 때려준다.
# chown -R nobody htdocs/

두번째 문제일때
# cd /usr/local/apache/conf/
# vi php.ini
여기서 [ : ]을 누르면 화면하단에 [ : ] 표시가 보일것이다~
이것이 vi 편집기 명령어를 사용할수 있게해준다.

[ :/file_uploads ] 라고치고 엔터!! ( 동일 패턴을 검색해주는것이다~ 찾기기능 )
file_uploads = ON 으로 되어있는지 확인하고 저장 [ :wq ] 하고 나온다.

마지막으로 httpd (아파치) 서비스를 다시시작해준다.

# /etc/init.d/httpd restart

2010년 8월 20일 금요일

[클래스] 자리수 지정한 문자로 채우기 str_pad()

출처 : http://www.saybox.co.kr/bbs/board.php?bo_table=board02&wr_id=137


PHP에서 특정 자리수 만큼 지정된 문자로 변경하고자 할 때 간단하게 str_pad() 함수를 이용하면 편리 합니다.
예를들어 1~20까지의 숫자가 있는데 1~9까지는 2자리수로 맞혀 주기 위해 앞에 "0"을 붙이고자 할 경우

str_pad($a, 2, "0", STR_PAD_LEFT);

라고 하면 간단하게 1~9 인경우 앞에 "0"이 붙게 됩니다.
기타 옵션에 따른 결과를 간단히 설명하겠습니다.

<?
$input = "test";
echo "<br>1:".str_pad($input, 8)."s";
echo "<br>2:".str_pad($input, 8, "*", STR_PAD_LEFT)."s";
echo "<br>3:".str_pad($input, 8, "*", STR_PAD_BOTH)."s";
echo "<br>4:".str_pad($input, 5 , "***")."s";
?>

결과 :
1:test    s
2:****tests
3:**test**s
4:test*s

1번은 변경할 문자를 입력하지 않을 경우 " " 부족한 자릿수 만큼 우측에 공백으로 추가합니다.
2번의 경우는 LEFT 부족한 자리수 만큼 왼쪽부터 채우며,
3번 BOTH는 좌,우 모두 균등하게 배치합니다.
만약 남은 공백이 5칸인경우 좌측에 2칸, 우측에 3칸을 추가 합니다.
4번은 변경할 값이 *** 3자리 이지만 자리수를 5칸으로 지정 했기에 * 하나만 적용되었습니다.

다양한 옵션으로 상황에 맞게 적용 하시면 됩니다.

2009년 10월 10일 토요일

IIS7.5 - php 설정은 어떻게?? 도움 부탁드립니다 ^^

제가 모처럼 타이핑을 하는시간이 되었습니다 ^^;;

다들 즐거운 주말시간 보내고 계시져? 많은 웹개발관련 고수님들께 여쭙고자 포스팅글을 씁니다.

요즘 제가 웹개발관련에 대해 배움을 하고자 기초지식을 배우고 있습니다.

asp와 php 그리고 ms-sql을 배우고 있는데요

학원에서 배우는지라 학원에서는 대충시키는대로 하면 되더라구여 ^^

집에서 php를 사용해보려고하니 잘 되지를 않네욤 ㅠㅠ

제가 설치&설정했던 부분을 정리할텐데 잘못된 부분이 있으면 지적좀 해주시기  바랍니다~

1. mySQL 설치 -> 이놈은 정상작동합니다.
http://dev.mysql.com/downloads/ 여기서 5.1버전으로 다운받아서 설치했습니다.


2. PHP설치 -> 설치이후 php파일이 보이기는합니다.
단지 <?php ... ?> 라고 써주어야지만 보이네요
<? ... ?> 기본문구로 php를 제거한 문구로 사용해서 보이지가 않아요 ㅠㅠ
http://windows.php.net/download/ 다운버전은 5.3.0-nts-vc9.msi 로 다운받아서 설치해봤으며
다른것들도 다운받아서 설치해봤는데 똑같네요~ 5.2.11도 같은 증상이로군요 ;;
<?php phpinfo(); ?> 이놈만 실행하면 이런 에러문구가 ;;;
<? phpinfo(); ?> 이렇게치면 아무것도 안나옵니다 ㅠㅠ

근데 그냥 html코드로 코딩하고 php파일로 저장한놈은 잘 보입니다.

아... 검색해도 않나오고 미치겠네요 ^^;;;


요놈만 잘되면 설치사용기를 올려보려고 합니다 ^^;;

저같이 고생하시는분들이 계실까 하구염~


위 내용을 정리해보자면...

1. PHP문서를 작성할때 왜 <?php ... ?> 로만 해주어야지 실행되는지 ?

2. <? ... ?> 로 작성해서 작동이 잘되도록하는 설정법이 있는지 ?

3. <?php phpinfo(); ?> 와 <? phpinfo(); ?> 두개의 파일전부 PHP 정보가 않보이는데 보이게하는 설정법??


아무쪼록 즐겁고 편한 주말되시구요~ 작은도움이라도 주시면 감사하겠습니다 (--)(__) 꾸벅

- 섭군 -

2009년 10월 6일 화요일

PHP 날짜관련함수 - date()

<?
$today = date("F j, Y, g:i a");                 // March 10, 2001, 5:16 pm
$today = date("m.d.y");                        
// 03.10.01
$today = date("j, n, Y");                      
// 10, 3, 2001
$today = date("Ymd");                          
// 20010310
$today = date('h-i-s, j-m-y, it is w Day z ');  
// 05-16-17, 10-03-01, 1631 1618 6 Fripm01
$today = date('\i\t \i\s \t\h\e jS \d\a\y.');  
// It is the 10th day.
$today = date("D M j G:i:s T Y");              
// Sat Mar 10 15:16:08 MST 2001
$today = date('H:m:s \m \i\s\ \m\o\n\t\h');    
// 17:03:17 m is month
$today = date("H:i:s");                        
// 17:16:17
?>


PHP 날짜 함수 정리 ( Write By Yaku)

 

오늘로부터 5일 후

echo date("Y-m-d",strtotime("+5 day"));
다음은 오늘로부터 3일 전이 되겠습니다.
echo date("Y-m-d",strtotime("-3 day"));

 

오늘로부터 6주 전

$calyoil = 5 - date("w"); //현재 요일에서 금요일을 구하기 위한 가감
$needday = strtotime("-6 week"); // 6
주전
$needday = date("Y-m-d" , strtotime("$calyoil days",$needday));
echo $needday;

 

윤년

if(29==date('t',mktime(0,0,0,2,1,$year))
echo "
윤년";
else echo "
윤년아님";

 

--mktime(시,분,초,월,일,년도)--

 

그 달의 마지막 날짜  가지고 오기

$lastday = date('t',mktime(0,0,1,$month,1,$year));

 

금주의 시작일 구하기

$now=date("w");

$m=$now-1;

$start=date("Y-n-d",strtotime("-$m day"));

 


JS 날짜 정리 ..

Month ( 0 ~ 11까지 정의 된다 )  현재월을 표시하려면 month -1 하여라 ..

 

날짜 객체  생성  var today = new Date( 년 , 월 , 일 ) ;

날짜 년 가지고 오기 today.getYear();

날짜 월 가지고 오기 today.getMonth();  ( 현재월 가지고 올경우  +1 )

날짜 일 가지고 오기 today.getDate();  (day 가 아니 getDate 이다)

날짜 월 짜리수 맞추기 위한 if 문 = parseInt(월) < 10 ? “-“ + parseInt(월) : parseInt(월);

 


Mysql 날짜 함수

select date_sub(now(), interval 5 day);
5
일후..
select date_add(now(), interval 5 day);
5
일전...

PHP 날짜 함수 정리 ( Write By Yaku)

 

오늘로부터 5일 후

echo date("Y-m-d",strtotime("+5 day"));
다음은 오늘로부터 3일 전이 되겠습니다.
echo date("Y-m-d",strtotime("-3 day"));

 

오늘로부터 6주 전

$calyoil = 5 - date("w"); //현재 요일에서 금요일을 구하기 위한 가감
$needday = strtotime("-6 week"); // 6
주전
$needday = date("Y-m-d" , strtotime("$calyoil days",$needday));
echo $needday;

 

윤년

if(29==date('t',mktime(0,0,0,2,1,$year))
echo "
윤년";
else echo "
윤년아님";

 

--mktime(시,분,초,월,일,년도)--

 

그 달의 마지막 날짜  가지고 오기

$lastday = date('t',mktime(0,0,1,$month,1,$year));

 

금주의 시작일 구하기

$now=date("w");

$m=$now-1;

$start=date("Y-n-d",strtotime("-$m day"));

 


JS 날짜 정리 ..

Month ( 0 ~ 11까지 정의 된다 )  현재월을 표시하려면 month -1 하여라 ..

 

날짜 객체  생성  var today = new Date( 년 , 월 , 일 ) ;

날짜 년 가지고 오기 today.getYear();

날짜 월 가지고 오기 today.getMonth();  ( 현재월 가지고 올경우  +1 )

날짜 일 가지고 오기 today.getDate();  (day 가 아니 getDate 이다)

날짜 월 짜리수 맞추기 위한 if 문 = parseInt(월) < 10 ? “-“ + parseInt(월) : parseInt(월);

 


Mysql 날짜 함수

select date_sub(now(), interval 5 day);
5
일후..
select date_add(now(), interval 5 day);
5
일전...


숫자 관련 함수

PHP 숫자에 콤마(,) 찍기

<?
$Money = Number_Format("10000");
Echo $Money;
?>
결과 :
10,000

Asp에서 FormatNumber(숫자) 와 같은것이다.

2009년 10월 5일 월요일

PHP - 형변환

Type Casting (형 변환)
형식(바꿀자료형)$변수명

1> (int),(interger):정수형변환
2> (real),(double),(float) :실수형으로 변환
3> (string) :문자열으로 변환
4> (array) : 배열형으로 변환
5>(object) :객체로의 형 변환

예)3
/*filename test_type.php*/ <br>
<?
     $a = 123.45 ;
     $b = ( int ) $a ;
     echo ("실수값 $a 를 정수 $b 로 형변환시킨 예입니다.");
?>

2009년 9월 29일 화요일

PHP와 DB(mySQL)의 연결 방법

=====================================================================
1 번째. 먼저 MySQL에서 'php_exam'이라는 database 를 하나 만든다.
=====================================================================
mysql> create database php_exam;
Query OK, 1 row affected (0.06 sec)

mysql> show databases;
+----------+
| Database |
+----------+
| company  |
| mysql    |
| php_exam |
+----------+
3 rows in set (0.00 sec)

mysql> use php_exam;
Database changed

mysql> show tables;
Empty set (0.00 sec)



======================================================================
2번째. 웹에서 테이블을 만들수 있게 하는 php페이지를 작성한다.
======================================================================

<?php
// 1. 연결 : mysql_connect(호스트명, 아이디, 비밀번호)
$conn=mysql_connect('localhost', 'root', 'apmsetup'); //db 연결부분

     /*
     if($conn)
      echo "db연결성공";
     else
      echo "db연결 실패";
     */

// DB 선택 : mysql_select_db(해당 db명, $conn)
$db=mysql_select_db("php_exam", $conn);
if($db)
 echo "db 연결성공";
else
 echo "db 연결 실패";


// DB에 table 쿼리(query 질의).
$sql="create table php_tbl(num int, name varchar(10))";
//mysql_query($sql, $conn)  db에 질의 수행.
mysql_query($sql, $conn);
?>

// 테이블이 생성되었음을 알려주는 경고창. 물론, 쿼리와 직접적 상관은 없다;
<script>
alert("테이블 생성");
</script>



======================================================================
3번째. 웹에서 만든 테이블을 mysql에서 확인.
======================================================================

msql> show tables;
+--------------------+
| Tables_in_php_exam |
+--------------------+
| php_tbl            |
+--------------------+
1 row in set (0.00 sec)

mysql> desc php_tbl;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| num   | int(11)     | YES  |     | NULL    |       |
| name  | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)


======================================================================
4번째. 이번에는 웹에서 테이블 내용을 입력하게 하는 php 페이지 작성.
======================================================================

<?php

$host="localhost";
$user="root";
$password="apmsetup";

$conn=mysql_connect($host, $user, $password);
mysql_select_db("php_exam", $conn);

$sql="insert into php_tbl values(1, '홍길동')";
mysql_query($sql, $conn);

$sql="insert into php_tbl values(2, '루피')";
mysql_query($sql, $conn);

?>

<script>
alert("DB 입력 성공! mysql에서 확인해보세요!");
</script>



======================================================================
5번째. 웹에서 입력한 테이블 내용을 MySQL에서 확인하기.
======================================================================

mysql> select * from php_tbl;
+------+--------+
| num  | name   |
+------+--------+
|    1 | 홍길동 |
|    2 | 루피   |
+------+--------+
2 rows in set (0.02 sec)








======================================================================
special test..  내맘대로 만들어보기.
======================================================================

less..

펼쳐두기..

less..






======================================================================
6 번째. 입력된 내용을 불러와 웹상에서 확인해보기.
======================================================================
http://localhost/db_m/dbselect.php
<?php

$conn=mysql_connect('localhost', 'root', 'apmsetup');     //MySQL 접속 및 설정 저장
mysql_select_db("php_exam", $conn);            //DB 접속

$sql="select * from php_tbl";                         //test 테이블의 레코드를 모두 뽑아오기
$sql_result=mysql_query($sql, $conn);          //질의(위 내용)를 수행하라.


$count=mysql_num_rows($sql_result);          //mysql_num_rows() 함수 : 행의 개수를 세는 함수.
echo $count;     //mysql query 수행 후 반환되는 결과값을 매개변수로 받고 그 레코드의 개수를 반환

echo "<br><br>";




//mysql_result(쿼리실행결과, 행번호, 변수값) : 결과값을 행 단위로 화면에 출력해주는 함수.
/*
for($i=0; $i<$count; $i++)
{
    $num=mysql_result($sql_result, $i, num);
    $name=mysql_result($sql_result, $i, name);
   
    echo "$num : $name <br>";
}
*/



//mysql_fetch_array($sql_result) 배열 형식으로 결과값을 화면상에 출력해주는 역할..
for($i=0; $i<$count; $i++)
{
    $result_array=mysql_fetch_array($sql_result);
    echo "$result_array[num] : $result_array[name] <br>";
}

?>

실행 결과