APM이라고 부르는 이유를 알게 되었다.


Apache -> PHP ->Mysql -> phpmyadmin 순으로 깔아야 문제가 발생하지 않는다.


아파치 설정을 잘 못 건들여서 


apache2 unrecognized service


에러가 발생하였다. 수정 전으로 복구시켜보려 노력해봤으나 도저히 답이 없었다.


대부분의 사람들이 완전 삭제 후 재설치를 추천했다.


그래서 쓰여있는대로 아파치를 purge를 이용하여 싹 지우고 다시 설치를 했다.


그런데 문제가 발생했다.


웹 브라우저에서 PHP를 읽지 못하는 것이었다.


브라우저에 PHP코드 그대로 출력되었다...뭔가 패키지가 연동이 안 된 것이라 생각해 


검색해본 결과 


apt-get install libapache2-mod-php5 


이 명령어를 이용하여 아파치와 PHP의 연결을 해줘야한다.


다시 원상복구~




Posted by sungho88
,

<?php $saved_date = $row['date']; // 데이터베이스 값을 변수에 저장 $dateVal = substr($saved_date, 5, 10); // 날짜만 잘라서 변수에 저장 ?>


$row['date']에 2017-09-02 이 저장되어 있다고 가정하면,

substr() 함수를 이용하여 문자열을 원하는 위치에서 자를 수 있다.


 월.일


형태의 날짜를 작성하고 싶다면, 년 부분을 제거시키면 된다.

주의할 점은 잘라내는 부분이 사라지는 것이 아니라 그 부분만 남는다는 것이다.


위와 같이 substr($saved_date, 5, 10)로 작성하면 이 부분만 남게 된다는 것이다.


2017-09-02


문자열 하나하나가 위치다.


앞에서부터 5번째 즉, 2017-(이부분)


결론 2017-을 버리고 09-02까지만 잘라 사용하겠다는 의미이다!

반대로 음수로 할 수도 있다. 이것은 뒤에서부터 똑같이 진행된다.


Posted by sungho88
,

$_SERVER['PHP_SELF']


- 셀프. 즉, 자기 자신 PHP를 나타낸다.

- 즉, $_SERVER['PHP_SELF']을 사용하는 페이지가 test.php 면 test.php 경로 자체를 가지고 온다.

- 이것은 보통 form에서 action에 주로 사용한다. 이러면,  실행중인 PHP를 다시 호출한다.


        <form id="register-form" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">

            <input type="email" name="usr_email" placeholder="Email" class="form-control" />

<input type="text" name="usr_name" placeholder="Email" class="form-control" />

        </form>


이렇게 주로 작성한다. 나도 그냥 갖다 붙여서 잘 모르고 사용헀다.


그런데 만약에 PHP에서 사용하던 변수를 계속 사용하려면 어떻게 할까?


서버측에서(php포함) header를 사용하여 location으로 페이지를 이동한다.


그래서 다음과 같이 URL 뒤에 변수 = 값을 사용하는 GET방식으로 변수를 보내고 싶었다.


header("Location: ../index.php?number=$num");


이렇게 했는데 아무리 해도 주소창에


index.php?number=


으로 나오며 해당 페이지가 나오지 않았다... 왜 값을 가져오지 못하는것일까.

검색을 하다가 form에 의문을 갖게 되었고, 이때서야 의미를 알지 못하던 

$_SERVER['PHP_SELF']에 대해 검색해봤다.


그 결과,


https://stackoverflow.com/questions/18747843/pass-get-variables-when-using-serverphp-self


여기서 발견. 어이없이 action을 비워두라는 답변. 해봤는데 오 된다.


<form action="" method="POST">

정확한 문법, 왜 그러지는지는 아직 잘 모르곘다.


아마 해당 PHP파일로만 이동(위의 경우 /index.php로) 만 보내고 GET 파라미터를 무시하는것이 

아닌가하는 생각을 해본다.


※결론※

어쨋거나 form 태그 속성 중 action에 $_SERVER['PHP_SELF']을 집어넣는 경우 

GET 파라미터들이 무시되며 null? 공백? 으로 나온다는 것을 알게 되었다.

Posted by sungho88
,

<?php 


// php코드


?> 이것은 php 문법임을 나타내는 기호이다.


이 안에서, 자바스크립트 코드를 출력하고 싶다면? 또는 함수를 호출하고 싶다면 어떻게 해야 할까?


눈에 볼 수 있도록 출력해주는 명령어는 echo이다.


그리고, echo 뒤에 자바스크립트 코드를 넣주면 된다. 굉장히 더티하게 보일 수 있고, 

비효율적으로 보이기도 한다.

만약, 자바스크립트에서는 


alert("출력하고 싶은 문장");


만 작성하면 alert 경고창이 뜬다. 하지만, PHP에서의 경우에는 허용하지 않는다.


1. 만약 alert창을 PHP에서 띄우고 싶다면 어떻게 할까?


<?php echo "<script>alert('삭제되었습니다');</script>"; ?>


이렇게 echo 안에 스크립트 태그부터 열고 닫고 한 뒤, 안에 코드를 직접 입력해야 한다.


2. 만약, 자바스크립트 함수를 실행하고 싶다면 어떻게 할까?


동일하다.


<?php echo("<script language='javascript'>function_test();</script>"); ?>


이렇게 작성하면 자바스크립트 함수가 실행된다.


Posted by sungho88
,

홈페이지를 만들다보니 SQL문을 종종 짜야할 때가 있다.

이번에는 게시물 하단에 LIST를 구현하는데, 해당 게시물을 중심으로 -5개부터 +5개를 만들었다.

이 경우 어떤 범위 내에 값을 DB로부터 끌고와야 하는데, 이 역할을 하는 문법이 바로 BETWEEN이다

단어의 뜻을 알면 당연하다.


WHERE id BETWEEN 시작값 AND 끝값


이렇게 작성하면 DB에 저장된 id값들 중 시작값부터 끝값까지 조건에 맞는 값만 추출해낼 수 있다.

만약,  현재 보고있는 게시물을 중심으로 5번째 이전 게시물부터 5번째 이후 게시물까지 보고싶다면


$sql01 = 'select * from student_table where id between ' .$bno. '-5 and ' .$bno.'+5';


이렇게 작성하면 된다. 이 문장의 의미는


student_table 테이블에서 id 속성을 현재 글 번호 bno에서 -5한 값부터 +5한 값까지 불러오는 코드다.

이렇게 하면 해당 게시물을 기준으로 상단, 하단으로 5개씩 리스트가 생기게 된다.


참고로, echo에서 php 변수를 HTML 태그와 혼용하는 경우에는 다음과 같이 작성한다

 

echo "<b>{$title}</b>";


이렇게 하면 title 변수를 b태그 처리 한 뒤, echo로 출력해준다.

Posted by sungho88
,

홈페이지를 리뉴얼하면서 게시판에 있는 게시물들을 다른 사이트로 옮기고 싶었다.

어떻게 해야할지 막막했지만, 엑셀 파일을 이용하면 간편하게 할 수 있다는 것을 알게되었다.

찾아본 결과 파일명.csv 형식의 파일로 만들면 집어넣을 수 있다고 한다. 

SCV도 아니고 CSV는 무슨 약자일까?


CSV = Comma Separated values

즉, 몇 가지 데이터 필드를 쉼표로 구분한 텍스트 데이터 및 텍스트 파일이다.


1. 일단 엑셀을 실행시키고, 데이터베이스에 삽입할 데이터를 작성한다.

(DB에 생성된 컬럼들을 맞춰주자)


2. 작성한 뒤, 다른이름으로 저장 -> 파일형식 -> CSV(쉼표로 분리)를 선택한 후 저장한다.


mysql에 접속한 뒤, DB를 선택하고 다음과 같은 문장을 써서 입력했다고 한다.


LOAD DATA INFILE '파일위치/파일명.csv' INTO TABLE 테이블명 FIELDS TERMINATED BY ',';


이렇게하면 다른사람들은 되는데 에러가 발생한다.


--secure-file-priv 옵션이 무엇인가? 


으... 오전 내내 이것때문에 진행을 못해서 점심먹고 오후부터는 다른 방법을 쓰기로 했다.


바로 phpmyadmin.


여기서 import를 사용해서 .csv파일을 넣을 수 있다고 한다.

해봤다.


이런!! 또다시 같은 에러가 발생한다.

검색하다보니 LOCAL을 써줘야 잘 작동한다고 한다.


1. 업로드 파일에서 -> 올리고자 하는 csv파일을 선택하고,

2. 파일 문자셋은 무난한 -> UTF-8

3. 형식은 -> CSV가 아닌 CSV using LOAD DATA

4. 열(컬럼) 구분자 -> ,

5. 열 감싸기 -> "

6. LOCAL 키워드 사용 에 체크!


이렇게 한 뒤 실행을 눌렀다. 그랬더니. 


에러 메세지가 바뀌었다. 오 뭔가 값을 읽는 느낌이 생겼다. 좋다.

UTF-8 설정했지만, 엑셀쪽이 UTF-8이 아닐 경우 이런 문제가 발생한다.

엑셀에서 문자 인코딩을 변경해주거나 아니면 txt 파일로 편집을 누른뒤에 메모장에서 인코딩을 바꿔도 된다.

어떻게하던지 인코딩만 바꿔주면된다.

자. 다시 도전 



오호라. 해결~ 빨간색보다 훨씬 기분이 좋은 녹색~

Posted by sungho88
,

태그내에서는 공백(띄어쓰기)나 줄바꿈 같은 것들은 무시된다.( 한 번은 된다)


그럼 공백을 어떻게 해야 인지를 할까?


줄 바꿈의 경우 <br> 태그를 사용하며,


공백의 경우 &nbsp;  를 입력해주면 된다.


주의할점은 세미클론;을 붙이지 않으면 앞 5글자가 문자열이 되어버려 문자로 출력되게 된다.

너무나 간단하지만, 모르면 헷갈리는 것이다.



Posted by sungho88
,

$bNo = $_GET['no'];

$tables = $_GET['table'];

$sql = 'select * from comment_free where b_no=' . $bNo;


처음에는 comment_free 테이블에 존재하는 데이터 열 중 b_no컬럼이 $bNo인것만 조회하기를 원했기때문에 위와 같이 작성했다.

하지만, 한가지 조건이 더 생기게 되어 WHERE조건 중 AND를 사용하게 되었다.

그런데, 분명 값을 잘 갖고 나오는데 result가 아무것도 나오지 않아 리스트가 빈 화면이 계속 나왔다.

계속 안 되어서 mysql을 터미널로 접속을 해 SQL문을 직접 입력해보기로 하였다.

먼저, 기존 코드를 작성해보니 조건에 따라 잘 조회되었다.

다음으로 안되는 코드를 갖다 복붙해보니...에러가 발생했다. 정말 안 되네? 왜 안되지? 하다가 

PHPMYADMIN을 오랜만에 열어 구조를 살펴보다가 알게되었다.

$bNo의 경우 데이터 타입이 INT이기 때문에 그냥 and b_no=' . $bNo;와 같이 호출을 하면 되지만,

$tables의 경우 데이터 타입이 TEXT이기 때문에 쌍따옴표(")를 붙여주어야한다.

따라서,


$sql = 'select * from comment_free where b_name=' . $tables . ' and b_no=' . $bNo;

이렇게 하면 안되고,


$sql = 'select * from comment_free where b_name="' . $tables . '" and b_no=' . $bNo;

이렇게 ' ' 안에 문자열이 끝나고 "를 붙여주어 이 $tables이 텍스트임을 알려주어야한다.



Posted by sungho88
,

자바에서는 +를 사용하면 되었는데,

PHP에서 변수를 사용하기 위해서는 마침표(.)를 사용한다.



$str01 = "Hello";

$str02 = "Jang";

 

$str03 = $str01 . " " . $str02;

echo  "str03=" . $str03;


좀 헷갈린다. 하지만 쉽게 말하면 $가 붙은 변수를 문자열에 연결할때는 마침표(.)를 써주면된다.

주의할 점은 뒤에 올 변수가 없는데 .을 붙이면 에러가 발생한다는 것이다.


SQL문을 작성할 때


$sql = 'select * cnt from ' .$tables;


로 쓰면 

테이블명이 달라진다고 해도 조회할 수 있다.




결론

- PHP에서는 문자열과 변수를 조합? 합칠때 +가 아니라 마침표(.)를 사용한다는 것.

- 경험상 쌍따옴표나 작은따옴표 차이는 없다는 것.

- 코드가 길어지면 + 에 비해 매우 가독성이 떨어진다는 것.


그럼 이만~

Posted by sungho88
,

date()함수를 이용했는데,


현재시간과 맞지 않았다.


지금 현재시간은 저녁 20시인데, 출력된 시간은 02시였다.


그래서, 한국시간대를 설정해줘야 하는가해서 검색해본 결과


PHP5 버전 이상에서 사용되는 문법이 존재했다.


  date_default_timezone_set("Asia/Seoul");

  echo date("Y-m-d H:i:s"); // (24시간제)


이렇게 하면 정상적으로 한국 현재 시간이 출려되게 된다.

Posted by sungho88
,