8月 172011
 

前回はフォームから画像を受け取り、WEBサーバーへ保存し、ページに表示させました。
phpの組み込み関数を使って、受け取ったファイルを操作して、
サムネール画像を作ってみましょう。

【form.html】
ファイルアップロードのテスト
<form action=”view.php” method=”postenctype=”multipart/form-data” name=”form1″ id=”form1″>
  <input name=”MAX_FILE_SIZE” type=”hidden” id=”MAX_FILE_SIZE” value=”100000″ />
画像:
<input name=”uploadfile” type=”file” id=”uploadfile” size=”50″ />
<br />
説明:
<input name=”comment” type=”text” id=”comment” size=”50″ />
<br />
<input type=”submit” name=”button” id=”button” value=”ファイルアップロード” />
</form>

【view.php】
<?php
$resizeX = 150;  //縮小するサイズを指定する
$thumnail_name = “thumnail.jpg”;  //縮小するファイル名を指定する

$file_dir = ‘file/';
$file_path = $file_dir.$_FILES[“uploadfile”][“name”];

if(move_uploaded_file($_FILES[“uploadfile”][“tmp_name”],$file_path)){
 $img_dir = “file/”;
 $img_path = $img_dir.$_FILES[“uploadfile”][“name”];
 $thumnail_path = $img_dir.$thumnail_name;
 if(mb_strpos($_FILES[‘uploadfile’][‘type’],’jpeg’)){
  $gdimg_in = imagecreatefromjpeg($file_path);  //ファイルのイメージIDを取得する
  $ix = imagesx($gdimg_in);  //画像ファイルの横幅を取得する
  $iy = imagesy($gdimg_in);  //画像ファイルの高さを取得する
  
  $ox = $resizeX;        //サイズ変更後の横幅
  $oy = ($ox*$iy)/$ix;  //サイズ変更後の高さを計算する

  $gdimg_out = imagecreatetruecolor($ox,$oy);  //サイズ変更後のイメージIDを作る
  imagecopyresized($gdimg_out,$gdimg_in,0,0,0,0,$ox,$oy,$ix,$iy);  //画像の複製とサイズ変更を行う
  imagejpeg($gdimg_out,$thumnail_path);  //画像をファイルに保存する
  imagedestroy($gdimg_out);  //メモリを解放する
  imagedestroy($gdimg_in);    //メモリを解放する
  
  $size = getimagesize($file_path);
  $size2 = getimagesize($thumnail_path);

?>
ファイルアップロードを完了しました。<br />
<img src=”<?php echo $img_path?>” <?php echo $size[3]?>>
<img src=”<?php echo $thumnail_path?>” <?php echo $size2[3]?>><br />
<?php echo $_POST[“comment”] ?>

<?php
 }else{
 print “JPEG形式の画像をアップロードしてください<br />”;
 }

}else{
 print “正常にアップロード処理されませんでした。”;
}
?>

画像ファイルの加工

8月 132011
 

phpを使って、ファイルをWEBサーバーへ送信することが出来ます。
画像ファイルを受け取り、WEBサーバーへ保存し、
受け取った画像を表示さてみましょう。

【form.html】
ファイルアップローダーのテスト
<form action=”view.php” method=”postenctype=”multipart/form-data” name=”form1″ id=”form1″>
  <input name=”MAX_FILE_SIZE” type=”hidden” id=”MAX_FILE_SIZE” value=”100000″ />
画像:
<input name=”uploadfile” type=”file” id=”uploadfile” size=”50″ />
<br />
説明:
<input name=”comment” type=”text” id=”comment” size=”50″ />
<br />
<input type=”submit” name=”button” id=”button” value=”ファイルアップロード” />
</form>

【view.php】
<?php
$file_dir = ‘file/';
$file_path = $file_dir.$_FILES[“uploadfile”][“name”];

if(move_uploaded_file($_FILES[“uploadfile”][“tmp_name”],$file_path)){

$img_dir = “file/”;
$img_path = $img_dir.$_FILES[“uploadfile”][“name”];
$size = getimagesize($file_path);

?>
ファイルアップロードを完了しました。<br />
<img src=”<?php echo $img_path?>” <?php echo $size[3]?>><br />
<?php echo $_POST[“comment”] ?>

<?php
}else{
?>
正常にアップロード処理されませんでした。
<?php
}
?>

画像ファイルアップローダー

8月 092011
 

ユーザーの閲覧履歴を管理するためにクッキーを使う方法がありますが、
今回はセッションを使う方法を扱います。
クッキーを使った訪問数カウンターをセッションを使ったカウンターに直してみましょう。
ドキュメント宣言より前に、セッションの開始を宣言しておくことが重要です。

【session.php】
<?php
session_start();   //セッションの開始を宣言する
$count = 1;
if(isset($_SESSION[“count”])){
 $count = $_SESSION[“count”];
 $count++;
}
$_SESSION[“count”] = $count;
?>
<!DOCTYPE ・・・
<body>
セッション変数のテスト<br />
<?php
if($count == 1){
?>
初めての訪問です。<br />
セッション変数にデータがありません。<br />
ページをリロードしてください。<br />
<?php
}else{
?>
あなたの訪問は<?php echo $count ?>回目です。
<?php
}
?>
</body>

セッションの管理 → SESSION

sec03にて非表示項目を送信する方法を扱いましたが、
hidden属性を用いているだけなので、プログラムソースを表示されてしまうと
ID等すべて確認できてしまうという問題点がありましたが、
POST変数からSESSION変数へ値を受け渡すことにより、
送信している値を確認できないように工夫しましょう。

【form.html】
複数行テキスト送信のテスト
<form id=”form1″ name=”form1″ method=”post” action=”confirm.php“>
  名前:
    <br />
  <input name=”name” type=”text” size=”30″ maxlength=”20″ />
  <br />
  本文:<br />
  <textarea name=”honbun” cols=”30″ rows=”5″></textarea>
  <br />
  <input type=”submit” value=”送信” />
  <input name=”usei_id” type=”hidden” value=”0001″ />
</form>

【confirm.php】
<?php
session_start();   //セッションの開始を宣言する

//POST変数からSESSION変数へ値の受け取り
$_SESSION[“name”] = $_POST[“name”];
$_SESSION[“honbun”] = $_POST[“honbun”];

if(isset($_POST[“usei_id”])){
 $_SESSION[“usei_id”] = $_POST[“usei_id”];
}
?>
<!DOCTYPE ・・・

確認画面
<form id=”form1″ name=”form1″ method=”post” action=”view.php“>
<?php
if($_POST[“name”]==””){
 print “名前を入力してください。” ;
}else{
 print $_POST[“name”].”さんからのメッセージ” ;
 print “<br/><br/>”;
 print “本文:<br/>”;
 print nl2br($_POST[“honbun”]);
}
?>
<br />
<input name=”confirm” type=”submit” value=”確認” />
<input name=”back” type=”submit” value=”戻る” />
</form>

【view.php】
<?php
session_start();   //セッションの開始を宣言する
?>
<!DOCTYPE ・・・
<?php
if(isset($_POST[“confirm”])){
?>

<?php
//確認ボタンがクリックされた時
if($_SESSION[“name”]==””){
 print “名前を入力してください。” ;
}else{
 print $_SESSION[“name”].”さんからのメッセージ” ;
 print “<br/><br/>”;
 print “本文:<br/>”;
 print nl2br($_SESSION[“honbun”]);
}
?>

<?php
}elseif(isset($_POST[“back”])){
//戻るボタンがクリックされた時
?>
複数行テキスト送信のテスト
<form id=”form1″ name=”form1″ method=”post” action=”confirm.php“>
  名前:
    <br />
  <input name=”name” type=”text” size=”30″ maxlength=”20″ value=”<?php print $_SESSION[“name”] ?>” />
  <br />
  本文:<br />
  <textarea name=”honbun” cols=”30″ rows=”5″ ><?php print $_SESSION[“honbun”] ?></textarea>
  <br />
  <input type=”submit” value=”送信” />
</form>

<?php
}else{
//上記以外の場合
?>
エラーです。<br />
直接このページを表示させることはできません。<br />
<a href=”form.html”>form.html</a>からアクセスしてください。

<?php
}
?>

非表示項目の取得 → SESSION

7月 232011
 

セレクトボックスは複数選択肢の中から一つしか選ぶことができませんが、
Ctrlキーを押しながら複数選択できるものをリストボックスと呼びます。
複数の値を送信するため、name属性に配列を指定するだけでよく、
これまでと同じ方法で取得できます。

【form.html】リストボックス送信のテスト
<form id=”form1″ name=”form1″ method=”post” action=”view.php“>
  趣味:
  <br />
<select name=”hobby[]” size=”10″ multiple=”multiple”>
  <option value=”読書”>読書</option>
  <option value=”映画鑑賞”>映画鑑賞</option>
  <option value=”音楽鑑賞”>音楽鑑賞</option>
  <option value=”カラオケ”>カラオケ</option>
  <option value=”ガーデニング”>ガーデニング</option>
  <option value=”写真”>写真</option>
  <option value=”ドライブ”>ドライブ</option>
  <option value=”ゴルフ”>ゴルフ</option>
  <option value=”サーフィン”>サーフィン</option>
  <option value=”旅行”>旅行</option>
  <option value=”釣り”>釣り</option>
  <option value=”料理”>料理</option>
  </select>
  <input type=”submit” value=”送信” />
</form>

【view.php】
<?php
if(isset($_POST[hobby])){
 print “私の趣味は以下の通りです。<br /><br />”;
 foreach($_POST[“hobby”] as $hobby)
 {
  print $hobby;
  print “<br />”;
 }
}else{
 print “私の趣味はありません。”;
}
?>

リストボックスの取得 → POST

7月 152011
 

セレクトボックスは複数の選択肢の中から一つだけを選ぶため、
配列にする必要はありません。
取得方法はこれまで同様、name属性に指定した名前をキーとして取得します。
セレクトボックスにはオシャレにjQueryを組み込みました。

【form.html】
チェックボックス送信のテスト
<form id=”form1″ name=”form1″ method=”post” action=”view.php“>
  都道府県:
  <br />
  <select name=”ken” id=”pref”>
  <option value=”” selected=”selected”/></option>
  <optgroup label=”北海道”>
  <option value=”北海道” />北海道</option>
  </optgroup>
  <optgroup label=”東北”>
  <option value=”青森県” />青森県</option>
  <option value=”岩手県” />岩手県</option>
・・・以下省略
  <optgroup label=”沖縄”>
  <option value=”沖縄県” />沖縄県</option> 
  </optgroup>
  </select>
  <br /><input type=”submit” value=”送信”/>
</form>

【view.php】
<?php
if($_POST[ken] <> “”){
 print “都道府県:”;
 print $_POST[“ken”];
}else{
 print “都道府県を選んでください。”;
}
?>

セレクトボックスの取得 → POST

7月 092011
 

ラジオボタンは複数の選択肢の中から一つしか選ぶことができません。
そのため、チェックボックスのときのように配列を使う必要はなくなりますが、
取得方法はこれまで同様、name属性に指定した名前をキーとして取得します。

【form.html】
チェックボックス送信のテスト
<form id=”form1″ name=”form1″ method=”post” action=”view.php“>
  性別:
  <br />
  <input name=”gender” type=”radio” value=”男” />男<br />
  <input name=”gender” type=”radio” value=”女” />女<br />
  <input type=”submit” value=”送信” />
  <input name=”usei_id” type=”hidden” value=”0001″ />
</form>

【view.php】
<?php
if(isset($_POST[gender]) && ($_POST[gender]==”男” || $_POST[gender]==”女”)){
 print “性別:”;
 print $_POST[gender];
}else{
 print “性別を選んでください。”;
}
?>

ラジオボタンの取得 → POST

7月 022011
 

チェックボックスは複数選択することが出来るため、
配列を使ってデータを受け渡しますが、
取得方法はname属性に指定した名前をキーとして取得します。

【form.html】
チェックボックス送信のテスト
<form id=”form1″ name=”form1″ method=”post” action=”view.php“>
  私の趣味:
  <br />
<input name=”hobby[]” type=”checkbox” value=”スポーツ” />スポーツ<br />
<input name=”hobby[]” type=”checkbox” value=”映画鑑賞” />映画鑑賞<br />
<input name=”hobby[]” type=”checkbox” value=”音楽鑑賞” />音楽鑑賞<br />
<input name=”hobby[]” type=”checkbox” value=”読書” />読書<br />
<input name=”hobby[]” type=”checkbox” value=”パソコン” />パソコン<br />
<input name=”hobby[]” type=”checkbox” value=”ショッピング” />ショッピング<br />
<input type=”submit” value=”送信” />
<input name=”usei_id” type=”hidden” value=”0001″ />
</form>

【view.php】
<?php
if(isset($_POST[“hobby”])){
 $hobby = implode(‘と’,$_POST[hobby]);
 print “私の趣味は”;
 print $hobby;
 print “です。”;
}else{
 print “私の趣味はありません。”;
}
?>

チェックボックスの取得 → POST

6月 232011
 

phpを使えば確認ボタンをクリックした場合と、
戻るボタンをクリックした場合で表示される結果を変えることが可能です。
isset関数を使って、どっちのボタンのクリックされたかを取得し、
if文でブロック分けを行い、それぞれの結果として表示されるようにコードを書きます。

【form.html】
複数行テキスト送信のテスト
<form id=”form1″ name=”form1″ method=”post” action=”confirm.php“>
  名前:
    <br />
  <input name=”name” type=”text” size=”30″ maxlength=”20″ />
  <br />
  本文:<br />
  <textarea name=”honbun” cols=”30″ rows=”5″></textarea>
  <br />
  <input type=”submit” value=”送信” />
  <input name=”usei_id” type=”hidden” value=”0001″ />
</form>

【confirm.php】
確認画面
<form id=”form1″ name=”form1″ method=”post” action=”view.php“>
<?php
if($_POST[“name”]==””){
 print “名前を入力してください。” ;
}else{
 print $_POST[“name”].”さんからのメッセージ” ;
 print “<br/><br/>”;
 print “本文:<br/>”;
 print nl2br($_POST[“honbun”]);
}
?>
<br />
<input name=”confirm” type=”submit” value=”確認” />
<input name=”back” type=”submit” value=”戻る” />
<input name=”user_id” type=”hidden” value=”<?php print $_POST[“usei_id”] ?>” />
<input name=”name” type=”hidden” value=”<?php print $_POST[“name”] ?>” />
<input name=”honbun” type=”hidden” value=”<?php print $_POST[“honbun”] ?>” />
</form>

【view.php】
<?php
if(isset($_POST[“confirm”])){ //確認ボタンがクリックされた時
?>
<?php
if($_POST[“name”]==””){
 print “名前を入力してください。” ;
}else{
 print $_POST[“name”].”さんからのメッセージ” ;
 print “<br/><br/>”;
 print “本文:<br/>”;
 print nl2br($_POST[“honbun”]);
}
?>

<?php
}elseif(isset($_POST[“back”])){ //戻るボタンがクリックされた時
?>
複数行テキスト送信のテスト
<form id=”form1″ name=”form1″ method=”post” action=”confirm.php”>
  名前:
    <br />
  <input name=”name” type=”text” size=”30″ maxlength=”20″ value=”<?php print $_POST[“name”] ?>” />
  <br />
  本文:<br />
  <textarea name=”honbun” cols=”30″ rows=”5″ ><?php print $_POST[“honbun”] ?></textarea>
  <br />
  <input type=”submit” value=”送信” />
<input name=”user_id” type=”hidden” value=”<?php print $_POST[“usei_id”] ?>” />
</form>

<?php
}else{ //上記以外の場合
?>
エラーです。<br />
直接このページを表示させることはできません。<br />
<a href=”form.html”>form.html</a>からアクセスしてください。

<?php
}
?>

送信ボタンの取得 → POST

6月 182011
 

ブラウザに表示されない入力項目にhidden属性というものがあります。
name属性に指定した名前をキーとして取得します。
ここではテスト、サンプルとして架空のユーザーIDをhidden属性でデータ取得していますが、
たとえブラウザには表示されていなくても、HTMLファイル内にはコードが書き込まれるため、
IDやパスワードをこのような方法で送信するのはセキュリティに問題有りです。

【form.html】
複数行テキスト送信のテスト
<form id=”form1″ name=”form1″ method=”post” action=”confirm.php”>
  名前:
    <br />
  <input name=”name” type=”text” size=”30″ maxlength=”20″ />
  <br />
  本文:<br />
  <textarea name=”honbun” cols=”30″ rows=”5″></textarea>
  <br />
  <input type=”submit” value=”送信” />
  <input name=”usei_id” type=”hidden” value=”0001″ />
</form>

【confirm.php】
確認画面
<form id=”form1″ name=”form1″ method=”post” action=”view.php”>
<?php
print $_POST[“name”].”さんからのメッセージ” ;
print “<br/><br/>”;
print “本文:<br/>”;
print nl2br($_POST[“honbun”]);
?>
<br />
<input name=”” type=”submit” value=”確認” />
<input name=”user_id” type=”hidden” value=”<?php print $_POST[usei_id] ?>” />
<input name=”name” type=”hidden” value=”<?php print $_POST[name] ?>” />
<input name=”honbun” type=”hidden” value=”<?php print $_POST[honbun] ?>” />
</form>

【view.php】
<?php
if($_POST[“name”]==””){
 print “名前を入力してください。” ;
}else{
 print $_POST[“name”].”さんからのメッセージ” ;
 print “<br/><br/>”;
 print “本文:<br/>”;
 print nl2br($_POST[honbun]);
}
?>

非表示項目の取得 → POST

6月 112011
 

複数行を入力したテキストエリアからデータを取得する場合も方法は同じです。
name属性に指定した名前をキーとして取得します。

【form.html】
複数行テキスト送信のテスト
<form id=”form1″ name=”form1″ method=”post” action=”view.php”>
  名前:
    <br />
  <input name=”name” type=”text” size=”30″ maxlength=”20″ />
  <br />
  本文:<br />
  <textarea name=”honbun” cols=”30″ rows=”5″></textarea>
  <br />
  <input type=”submit” value=”送信” />
</form>

【view.php】
<?php
if($_POST[“name”]==””){
 print “名前を入力してください。” ;
}else{
 print $_POST[“name”].”さんからのメッセージ” ;
 print “<br/><br/>”;
 print “本文:<br/>”;
 print nl2br($_POST[honbun]); 
}
?>
複数行テキストの取得 → POST