<?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
,

날짜를 표기하기 위해서는  date() 함수를 사용하면 간단하게 날짜를 구할 수 있다.

보통 $date = date('Y-m-d H:i:s'); 이렇게 하면 모두 출력된다.

또한 2017-04-04가 아니라,  2017.04.04로 표시하고 싶다면 쉽다.


- 대신 .으로 대체해주면 된다.


$abcd = date('Y.m.d H:i:s');

이러면,

2017.04.04 11:30:20     로 표시된다.

그리고 날짜만 필요하다면, 둘로 쪼개서 사용하면된다.


$datetime = explode(' ', $abcd);     // ' ' 공백이 구분점이 되어 배열에 저장된다.

$date = $datetime[0];                  // 첫 번째 요소가 날짜        

$time = $datetime[1];                  // 두 번째 요소가 시간



이렇게 하면 시간과 날짜를 나누어 사용할 수 있다.


ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

추가적으로 2017.07.01 11:00:00  형식말고,  - 이나 /로 하고 싶다면?

쉽다.

그냥 . 대신 - 나 /를 넣어주면 된다.


<!DOCTYPE html>
<html>
<body>

<?php
echo "Today is " . date("Y/m/d") . "<br>";
echo "Today is " . date("Y.m.d") . "<br>";
echo "Today is " . date("Y-m-d") . "<br>"
?>


</body>
</html>


결과는 


Today is 2017/06/30
Today is 2017.06.30
Today is 2017-06-30 


https://www.w3schools.com/php/php_date.asp


또한 추가적으로,


.으로 변경을 해서 사용하는데, 표준이 아니므로 날짜로 인식하지 않을 때가 있다.

- 또는 /는 날짜로 인식이 잘 되는데 . 은 잘 안된다.

이때는 날짜가 아니라 문자로 인식되는데, 이 때는 . 을 - 로 아래와 같이 변경한 뒤에 사용해야 한다.


$replace_date=str_replace(".","-",$date);


게시판 구현 시, 현재 날짜로부터 30일 이전에 등록된 게시물일 경우 new 표시를 하고자 한다면,

현재 시간과 등록된 게시물의 시간을 각각 timestamp로 변경을 한 뒤, 차이를 구한다.

이 결과는 초로 계산되므로, 


30일 동안의 초보다 작다면? 30일이 안 된 글이므로 new를 표시,

30일 동안의 초보다 크다면? 30일이 지난 글이므로 new를 표시하지 않는다. 즉, if 조건식에는


30일 동안의 초를 구한다. 


60 * 60 * 24가 하루의 총 초이므로, 30을 곱해야 30일이 되겠다.

다음과 같이 조건식을 작성하면 된다.


if(time() - strtotime($date) <= 60 * 60 * 24 * 30) { .... }

와 같이 하면 된다.

time() : (현재) 날짜 시간.
strtotime() : (매개변수로 들어간 변수의) 날짜 시간.



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
,

PHP에서는 여러 데이터베이스를 사용할 수 있다.

그 중에서, MySQL 을 연동하기 위해 mysqli_connect() 함수를 사용한다.

DB관련 정보 파일을 따로 만드는 것이 좋다.

각 파일마다 동일한 접속을 하는것은 코드 자원의 낭비이자, 훗날 유지보수를 위해 피해야한다.

설정파일이므로 dbconfig.php로 이름을 지정하자.(이름은 물론 마음대로)


dbconfig.php


<?php


$DBhost = "localhost";

$DBuser = "root";

$DBpassword = "XXXXX";

$DBname = "testDB";


$conn = mysqli_connect($DBhost, $DBuser, $DBpassword, $DBname);


if ($conn->connect_error) {

die("Connection failed: " . $conn->connect_error);

}

?>



이렇게하면, php와 mySQL이 연동된다.


mysqli_connect의 매개변수


1 : 아이피 주소

2 : MySQL 아이디

3 : MySQL 비밀번호

4 : MySQL DB 이름

5 : MySQL PORT(생략 가능. 기본적으로 3306이기 때문에)


이렇게 파일을 작성했으면, 여러 PHP파일에서 불러다가 사용할 수 있다.

불러오는 방법은 


require_once() 또는 include_once()를 사용하면 된다. 이 외에도 require()나 include()가 존재한다.

_once가 붙었으므로 한 번 호출된다는 것은 알 것이다.

php 시작 전에 


require_once("../dbconfig.php");


을 입력하게 되면(물론 괄호 안에는 본인의 상황에 맞는 경로로 지정해야 함)

다른 php파일에서 위 파일을 사용할 수 있게 된다.

Posted by sungho88
,