掲示板に投稿データの追加

掲示板に投稿データの追加
#05 投稿データを追加する
http://dotinstall.com/lessons/bbs_php/1005

を参考に
投稿されたデータを書き込み用の配列に追加
まず、投稿があったか判定するために
if で判定する
まず、POSTで投稿されているか判定するため
if($_SERVER[‘REQUEST_METHOD’] == ‘POST’){
で判定する
これでPOSTでないのなら
この if 処理は飛ばされる
投稿があったら
という処理は
!empty($_POST[‘message’])
となるので
これを && をつかって条件式にする
くっつけて表示すると
if($_SERVER[‘REQUEST_METHOD’] == ‘POST’ && !empty($_POST[‘message’])){
という条件式になる
POSTで投稿されたら、というのは決まり文句で
サーバーのリクエストメソッドがPOSTだった場合
というのが
$_SERVER[‘REQUEST_METHOD’] == ‘POST’
とかく
$posts で入力された一番最初の値を追加する
これは最新の投稿を一番最初にするようにするため
これを実装するには
array_unshift()
一つ以上の要素を配列の最初に加える
というのを使う
array_unshift($posts, $_POST[‘message’]);
これで、先頭に投稿した内容が
配列として格納されるようになる
書式にすると
array_unshift(追加する対象の配列 , 追加する内容)
このほか便利なものとして
array_shift()
配列の先頭から要素を一つ取り出す
array_push()
一つ以上の要素を配列の最後に追加する
array_pop()
配列の末尾から要素を取り除く

PHPで簡易掲示板の作成

PHPで簡易掲示板の作成
#01 一行掲示板の画面をつくる
http://dotinstall.com/lessons/bbs_php/1001

を参考にPHPの応用を学習
使用する環境は、ドットインストールで構築した
ローカル開発環境
まずは,
それで使うためのディレクトリを作成
掲示板なので
boardとした
mkdir /var/www/html/boad/
次に、index.php の作成
フォームと
ul 要素でリストの作成
フォームは
<form action=”” method=”post”>
<input type=”text” name=”message”>
<input type=”submit” value=”投稿”>
</form>
というように
form タグ内部に作成
リストはul 要素内部に
li 要素でリストを作っていく
action=””
となっているのは
同じファイルだから
もし、send.php というように別のファイルへおくるのなら
そのファイルを指定することになる
method=”post”
でPOST形式を指定
次に
#03 ファイルを読み込む
http://dotinstall.com/lessons/bbs_php/1003
を参考にPHP処理を追記
ファイルの先頭にPHP 処理を追記していく
読み込む外部ファイルは
ソースをそのまま使うことにする
用意できたら、index.php へ処理を記述していく
$dataFile=”bbs.dat”;
というように
ファイル名を変数に格納する
そして、ファイル全体を読み込んで配列へ格納するため
file() を使う
このときに、最後の配列に改行文字をいれないように
FILE_IGNORE_NEW_LINES
を指定しておく
このfile の結果も変数に格納しておく
これで、ファイルの読み込みは完了
次に、投稿データの表示
#04 投稿データを表示する
http://dotinstall.com/lessons/bbs_php/1004
を参考に実装
if でデータの中身があるか判定するtame
<ul>
<li>まだ投稿はありません</li>
</ul>
の部分を書き換える
<ul>
<?php if(count($posts)):?>
<?php foreach($posts as $post): ?>
<li><?php echo htmlspecialchars($post); ?></li>
<?php endforeach; ?>
<?php else:?>
<li>まだ投稿はありません</li>
<?php endif;?>
</ul>
というようにして
php で if で count の中身があるか判定して
もし、配列があるのなら
htmlspecialchars() で無害化して表示
もし、何も配列にないのなら
まだ投稿はありません
と表示する
データの読み込み成功しているのなら
ファイルに書かれた内容が
リスト表示される

PHP でのファイル分割

PHP でのファイル分割
#12 ファイルを分割してみよう
http://dotinstall.com/lessons/basic_php_advanced/6912
を参考に
PHPでのファイルの分割について学習
メンテなどを考えると
1つのファイルにすべて記述するのは好ましくない
このため、
クラスだけ別のファイルに書いて読み込むようにする
今回なら
vim user.class.php
として
name = $name;
$this->email = $email;
}
public function sayHi() {
echo “hi! my name is “.$this->name;
}
}
class SuperUser extends User{
public function superSayHi(){
echo ” URyyyyyyyyyyyyy!!! \n my email is “.$this->email;
}
}
というクラス部分だけ記述
そして、元の index.php の部分は
この部分は削除してOK
こうして分割されたクラスファイルを読み込むには
PHPの場合
require_once()
を使う
これは require_once(‘読み込むファイル’);
というようにする
今回は、分割したファイルを
index.php で読み込みたいので
reqire_once(‘user.class.php’);
とする
これで、分割前とおなじ結果になるなら成功
ほかにも
require()
include()
include_once()
などがあり、それぞれ挙動が異なる
require() はファイルを読み込むけど
require_once() は一度だけ読み込む
require()
は途中でエラーが起きた時エラーで強制停止する
include() はエラーで警告はだすけど実行はされる
という違いがある

PHPのクラス継承とサブクラス

クラス継承とサブクラス
#11 クラスを継承してみよう
http://dotinstall.com/lessons/basic_php_advanced/6911
を参考に
PHPでの継承とサブクラスについて学習
クラスをつくり、拡張したいときには
継承を使う
これは extends すればいい
例えば、
class User を継承して
SuperUser というクラスを作りたいのなら
class UperUser extends user{}
とする
ちなみに、継承すると
User で定義した
メンバー変数とかユーザ関数も使えるし
さらに書き換えて別の機能を実装することもできる
これが継承というもの
PHP以外にも java とかで使われる機能
あとは、クラスの中に新しい関数を用意してみた
public function superSayHi(){
echo “URyyyyyyyyyyyyyyyy !”;
}
そして
あとは実体化するため
$bob = new superUser(“bob”,”dummy@dummybob.com”);
とする
クラスは設計図
new でこのようにかくことで実体化させることができる
superUser クラスで
User クラスと同じ構造で実体化できるのは
継承により
public function __construct($name, $email) {
$this->name = $name;
$this->email = $email;
}
も受け継いでいるため
再度 コンストラクタを書く必要性がない
あとは
$bob->superSayHi();
とすれば
Uryyyyyyyyyyyyy!
と表示される
あと、継承に関しては
public
private
の他に
protected が存在する
protected で宣言したメンバー変数などは
定義したクラスや
それを継承してできたサブクラス(継承して拡張したクラスなど)
でも使える
private との違いは
private だと
作成したクラスではアクセスできるけど
これを元に作成したサブクラスでは作った変数とかが使えないというようになる
ためしに、
class User {}
の中になる
public $email;

protected $email;
と変更して
class SuperUser extends User{}
の中の
echo の部分を
public function superSayHi(){
echo “URyyyyyyyyyyyyyyyy !”;
}
から
public function superSayHi(){
echo ” URyyyyyyyyyyyyy!!! \n my email is “.$this->email;
}
と変更すると
URyyyyyyyyyyyyy!!! my email is dummy@dummybob.com
となり
. で連結した文字部分の
$this->email;
が表示できているのがわかる
もし、
protected ではなく private にするとエラーになる
アクセス可能な領域により使い分けることになる

PHP と cookie

PHP と cookie
#06 Cookieを使ってみよう
http://dotinstall.com/lessons/basic_php_advanced/6906
を参考に
ブラウザにデータを保存する仕組みであるCookieについて学習
使い方は
setcookie(“クッキーの名前”,”クッキーの値”)
となる
setcookie(“userName”,”taguchi”);
で保存してブラウザでアクセスし
echo $_COOKIE[‘userName’];
を追記してから再度リロードすると
userName の中身である
taguchi
が表示される
また、
setcookie() には有効期限の設定ができる
というよりも
この有効期限を設定しない場合
ブラウザを閉じると消えてしまうので注意
書き方は
setcookie(“クッキー名”,”値”,有効期限)
となる
有効期限はUNIXタイムスタンプになる
2週間にするなら
time()+60*60*24*14
となる
time() で現在時刻
60*60*24*14

60秒*60*24*14という意味
あと、cookie の指定時間にマイナスで指定すると
削除する意味になる
なので、
setcookie(‘userName’,” ,time()-60);
とすれば cookie の削除が可能

php-pdoとpdo_mysqlをインストール

SQLSTATE[28000] [1045] Access denied for user
がでてきたので、
php-pdoとpdo_mysqlをインストールしてみました
実際の問題は、ただ単に面倒だったのでコピペで sql ファイルを
作ったのが失敗で、全角文字が入っていたというだけでしたが
今回、使用した環境は
CentOS 6.4 64bit
http://www3441ui.sakura.ne.jp/wordpress/?p=479
を参考に実行
yum install mysql-devel
cd /usr/lib64/php/modules/
pecl install pdo_mysql
あとは
extension=pdo.so
extension=pdo_msql.so

/etc/php.ini の 937 行目あたりに追記して
apache再起動
これで設定完了

フォームからのデータ受け取りについて

フォームからのデータの受け取りについて
#32 フォームからのデータを受け取ろう
http://dotinstall.com/lessons/basic_php_beginner/6832
でフォームからの値の受け取りについて学習
PHPのフォームから受けとったデータを処理するのに使う
今回の注目点は
<form action=”get_info.php” method=”post”>
のところ
これは
get_info.php に送信して
送信はPOST形式で送るというもの
今回、送るデータは
<input type=”text” name=”birthday” value=””>
のところ
受けとるほうは
$birthday = $_POST[‘birthday’];
として受けとる
ちなみに、送信方法が
method =”get” だった場合
$_GET になる
そして、このbirthday の値を元に曜日を返すようにする
これは
date() をつかう
フォーマットには l を使うと曜日になり
UNIXタイムで取得するので
strtotime($birthday)
という引数にする
$youbi = date(“l”,strtotime($birthday));
これで、
フォーマット l で 曜日にした birthday のデータが
$youbi に格納される
あとは、この $youbi をHTMLのソースのほうで
echo で出力する
<?php echo htmlspecialchars($youbi); ?>
とすればOK
出力するときには
htmlspecialchars() で無害化するのを忘れずに

PHP でファイルからデータ読み出し その2

PHP でファイルからデータ読み出し その2
#31 ファイルからデータを読み出そう (2)
http://dotinstall.com/lessons/basic_php_beginner/6831
に、もっと簡単なデータの読み出しがあったので
これも学習
これは
file_get_contensts()
を使う
これも変数に格納できるので
$contents = file_get_contents($testfile);
でもOK
また、URLを指定することも可能
$contents = file_get_contents(“http://dotinstall.com”);
とすれば、ドットインストールのソースを
とってくるということもできる
あと、
$contents =file($testfile);
というように
file() を使うと、指定したファイルの内容を
1行ずつ読み込むようになる
使い道としては
web api 関連が一番おおそう

PHP でファイルからデータ読み出し

PHP でファイルからデータ読み出し
#30 ファイルからデータを読み出そう (1)
http://dotinstall.com/lessons/basic_php_beginner/6830
を参考にファイルからデータ読み出しを学習
今回、書き込みに使ったように
読み込みでも
fopen() を使う
ただし、今回のモードは
r
となる
そして、できたかどうか判定するため
if を使って判定する
if(!$fp = fopen($testfile,”r”)){
この判定がうまくいったら
ファイルの読み込みをするので
fread() を使う
第1引数に、ファイルポインタ
第2引数に、ファイルサイズを指定する
ファイルサイズ指定は、大抵の場合はファイルサイズの最大値になるので
filesize($testfile)
というように対象のファイルを格納した変数になることがほとんど
ちなみに、今回の動画だと
$testfile =”test.dat”;
と指定しているので
filesize($testfile)
としている
この読みこんだものは変数に格納可能
$contents = fread($fp , filesize($testfile));
あとは
var_dump() で中身を確認
ファイルを開いた場合、クローズは閉じるのがセットなので
fclose($testfile);
で閉じることを忘れずに

PHP でファイル書き込み

PHP でファイル書き込み
#29 ファイルにデータを書き込もう (3)
http://dotinstall.com/lessons/basic_php_beginner/6829
を参考に、PHPでのファイル書き込みに付いて学習
この判定にはif を使う
if(fwrite($fp,$contens) === false){
echo “could not write”;
exit;
}
これで false だった、つまり書き込みできないのなら
echo “could not write”
を実行して
exit で終了している
PHP の場合 === として == とおなじ意味になる
正確には、==より厳密な比較になる
これだと型まで比較できるようになる
if(fwrite($fp,$contens) === false){
echo “could not write”;
exit;
}
で成功したら
echo “success”;
で表示して
最後にファイルを開いたら閉じるので
これには fclose() をつかう
C言語でも ファイルのオープン、書き込み、ファイルクローズがあるけど似た様な処理になる
今回の場合には
fclose($fp);
となる
実行するとからのファイルへ
追記されているのがわかる
Ubuntu でおこなうときには
chmod 777 test.dat
としてパーミッションを変更する必要があるので注意