[MySQL]2テーブルの差分取得
同定義のテーブルA、テーブルBにおいて
テーブルAにあり、テーブルBに無いデータのidを取得する。
SELECT id FROM テーブルA WHERE NOT EXISTS (SELECT id FROM テーブルB WHERE テーブルB.id = テーブルA.id) ORDER BY id
同定義のテーブルA、テーブルBにおいて
テーブルAにあり、テーブルBに無いデータのidを取得する。
SELECT id FROM テーブルA WHERE NOT EXISTS (SELECT id FROM テーブルB WHERE テーブルB.id = テーブルA.id) ORDER BY id
配列演算
PHP
$a = array('a' => 'b','c'=>'d','e'=>'f' ); $b = array('g' => 'h','i'=>'j','k'=>'l','a'=>'あ' ); $c = $a+$b; foreach ($c as $key => $value) { echo $key.' : '.$value.'<br/>'; }
出力結果
PHP
$a = array('a' => 'b','c'=>'d','e'=>'f' ); $b = array('g' => 'h','i'=>'j','k'=>'l','a'=>'あ' ); $c=array_merge($a,$b); foreach ($c as $key => $value) { echo $key.' : '.$value.'<br/>'; }
出力結果
PHP
$a = array('a','b','c'); $b = array('d','e','f','g'); $c = $a+$b; foreach ($c as $key => $value) { echo $key.' : '.$value.'<br/>'; }
出力結果
PHP
$a = array('a','b','c'); $b = array('d','e','f','g'); $c=array_merge($a,$b); foreach ($c as $key => $value) { echo $key.' : '.$value.'<br/>'; }
出力結果
下記はエラーになる。
$c = $a-$b; $c = $a*$b; $c = $a/$b;
指定フォルダのファイル一覧を取得
<ul> <?php $tmp=getFiles('./image/'); foreach ($tmp as $key => $value) { echo '<li>'.$value.'</li>'; } function getFiles($targetDir){ $tmp=array(); $pDir=opendir($targetDir); while( false!==( $fileName = readdir($pDir) ) ){ if($fileName !== '.' && $fileName !== '..' && !is_dir($targetDir.$fileName)){ $tmp[]=$fileName; } } closedir( $pDir ); return $tmp; } ?> </ul>
checkboxでvalueを0に出来ない
この方法だと出来ない。
<?php $options = array('hiddenField' => false,'value'=>'0'); echo $this->form->checkbox('samples.check1.', $options); echo '1-A<br/>'; $options = array('hiddenField' => false,'value'=>'1'); echo $this->form->checkbox('samples.check1.', $options); echo '1-B'; ?>
出力結果
<input type="checkbox" name="data[samples][check1][]" value="1" id="samplesCheck1"/>1-A<br/> <input type="checkbox" name="data[samples][check1][]" value="1" id="samplesCheck1"/>1-B
理由はFormHelper.phpのcheckboxメソッドに下記の処理があるため
if (empty($options['value'])) { $options['value'] = 1; }
しかし、下記のやり方だと出来る。
ただし、<div>と<label>が勝手に付いてしまう。
<?php $label=array('2-A','2-B','2-C','2-D'); echo $this->Form->input('check2', array('type' => 'select', 'multiple' => 'checkbox', 'options' => $label, 'div'=>false, 'label'=>false, 'hiddenField'=>false, 'before'=>'', 'after'=>'', 'between'=>'', 'value' => array(0, 2) ) ); ?>
出力結果
<div class="checkbox"><input type="checkbox" name="data[samples][check2][]" checked="checked" value="0" id="SamplesCheck20" /><label for="SamplesCheck20" class="selected">2-A</label></div> <div class="checkbox"><input type="checkbox" name="data[samples][check2][]" value="1" id="SamplesCheck21" /><label for="SamplesCheck21">2-B</label></div> <div class="checkbox"><input type="checkbox" name="data[samples][check2][]" checked="checked" value="2" id="SamplesCheck22" /><label for="SamplesCheck22" class="selected">2-C</label></div> <div class="checkbox"><input type="checkbox" name="data[samples][check2][]" value="3" id="SamplesCheck23" /><label for="SamplesCheck23">2-D</label></div>
selectメソッドでも出来る。
<?php $label=array('2-A','2-B','2-C','2-D'); echo $this->Form->select('check3', $label, array('multiple' => 'checkbox', 'div'=>false, 'label'=>false, 'hiddenField' => false, 'class'=>'testClass' ) ); ?>
inputでファイル選択後即時アップ。
[Twitter]tweet with mediaでも実装していました。jQuery.uploadを使います。
Sample ※Firefox,IE8,9で動作確認済
index.html
<!DOCTYPE html> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Script-Type" content="text/javascript"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>ファイル選択後即時アップ</title> <meta name="description" content="****"> <meta name="keywords" content="****"> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes"> <link rel="apple-touch-icon" href="apple-touch-icon.png"> <link rel="stylesheet" href="style.css" type="text/css"> <script type="text/javascript" src="jquery-1.9.1.min.js"></script> <script type="text/javascript" src="jquery.upload-1.0.2.min.js"></script> <script type="text/javascript" src="script.js"></script> </head> <body> <form method="post" action="" target="f1" enctype="multipart/form-data"> <input id="filebox" type="file" name="image" size="0" accept="image/*"/> </form> <ul id="preview"></ul> </body> </html>
script.js
$(function(){ set_thumaction(); }); function remove_thum(){ $('#preview').empty(); } function set_thumaction(){ $('#filebox').change(function() { var preview = $('#preview'); $(this).upload('upload.php',$("form").serialize(),function(html){ preview.append(html); },'html'); }); } function form_tweetmode(){ $('#filebox').remove(); $('form').attr('enctype','application/x-www-form-urlencoded'); } function restore_form(){ $('#fileboxwrap').html('<input id="filebox" type="file" name="image" size="0">'); $('form').attr('enctype','multipart/form-data'); set_thumaction(); }
upload.php
<?php if(isset($_FILES["image"])){ deleteFilesOfDir('./tmp'); $html='<li>'; $v=$_FILES["image"]; $ext=end(explode('.', $v["name"])); $filename='./tmp/'.time().'.'.$ext; $result = @move_uploaded_file( $v["tmp_name"], $filename); if($result){ $html .= '<img src="'.$filename.'" width="300"/><br/>'; }else{ $html .= 'エラー<br/>'; } foreach($_FILES["image"] as $key => $v){ $html .= $key.' : '.$v.'<br/>'; } $html .= '</li>'; echo $html; } function deleteFilesOfDir($dirPath){ if (!isset($dirPath)) { return; } $res_dir = opendir($dirPath); while( $file_name = readdir( $res_dir ) ){ if (is_dir($dirPath.'/'.$file_name)) { continue; } unlink($dirPath.'/'.$file_name); } closedir($res_dir); } ?>
jQuery.upload
http://lagoscript.org/jquery/upload
inputで複数ファイルのアップロード。
IE9は未対応 omg!
Sample
index.html
<!DOCTYPE html> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Script-Type" content="text/javascript"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>html5によるファイル複数アップロード</title> <meta name="description" content="****"> <meta name="keywords" content="****"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <meta name="format-detection" content="telephone=no,address=no,email=no"> <link rel="apple-touch-icon" href="apple-touch-icon.png"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body> <form method="post" action="upload.php" enctype="multipart/form-data"> 画像複数選択<input type="file" name="image_file[]" multiple="multiple" accept="image/*"/> <input type="submit"/> </form> </body> </html>
upload.php
<!DOCTYPE html> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Script-Type" content="text/javascript"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>html5によるファイル複数アップロード</title> <meta name="description" content="****"> <meta name="keywords" content="****"> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes"> <meta name="format-detection" content="telephone=no,address=no,email=no"> <link rel="apple-touch-icon" href="apple-touch-icon.png"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body> <?php if(isset($_FILES["image_file"])){ $i=0; $data=getReformFilesData(); foreach ($data as $v) { $ext=end(explode('.', $v["name"])); $filename='./test'.($i++).$ext; $result = @move_uploaded_file( $v["tmp_name"], $filename); if($result){ echo '<img src="'.$filename.'" width="300"/><br/>'; }else{ echo 'エラー<br/>'; } foreach($v as $key => $v2){ echo $key.' : '.$v2.'<br/>'; } echo '<hr><br/>'; } } function getReformFilesData(){ if(isset($_FILES["image_file"])){ $t=array(); $i=0; foreach ($_FILES["image_file"] as $key=>$list) { foreach ($list as $no => $v) { $t[$no][$key]=$v; } } return $t; }else{ return array(); } } ?> </body> </html>
プライマリーキーとして使うカラム名を指定する。
<?php /* File: /app/Model/Hoge.php */ class Hoge extends AppModel { public $primaryKey='カラム名'; } ?>
使用するテーブル名を変える
<?php /* File: /app/Model/Hoge.php */ class Hoge extends AppModel { public $useTable='テーブル名'; } ?>
iOS6のSafariからformのinput type=”file”に対応しているので試しました。#2
Safariでinput type=”file” #1と違うところは写真だけ選ばせる点
Sample
index.html
<!DOCTYPE html> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Script-Type" content="text/javascript"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>sample00</title> <meta name="description" content="****"> <meta name="keywords" content="****"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <meta name="format-detection" content="telephone=no,address=no,email=no"> <link rel="apple-touch-icon" href="apple-touch-icon.png"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body> <form method="post" action="upload.php" enctype="multipart/form-data"> <label>写真</label><input type="file" name="selectedPhoto" accept="image/*"> <br/> <br/> <label>動画</label><input type="file" name="selectedMovie" accept="video/*"> <br/> <br/> <input type="submit"/> </form> </body> </html>
upload.php
<!DOCTYPE html> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Script-Type" content="text/javascript"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>sample00</title> <meta name="description" content="****"> <meta name="keywords" content="****"> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes"> <meta name="format-detection" content="telephone=no,address=no,email=no"> <link rel="apple-touch-icon" href="apple-touch-icon.png"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body> <?php if(isset($_FILES["selectedPhoto"])){ if($_FILES["selectedPhoto"]["error"]==0) { $ext=end(explode('.', $_FILES["selectedPhoto"]["name"])); $filename='./test.'.$ext; $result = @move_uploaded_file( $_FILES["selectedPhoto"]["tmp_name"], $filename); if($result){ echo '<img src="'.$filename.'" width="300"/><br/>'; }else{ echo 'エラー<br/>'; } }elseif ($_FILES["selectedPhoto"]["error"]==1) { echo 'ファイルサイズが大きすぎます。'; } foreach($_FILES["selectedPhoto"] as $key => $v){ echo $key.' : '.$v.'<br/>'; } } ?> <br/><hr><br/> <?php if(isset($_FILES["selectedMovie"])){ if ($_FILES["selectedMovie"]["error"]==0) { $ext=end(explode('.', $_FILES["selectedMovie"]["name"])); $filename='./test.'.$ext; $result = @move_uploaded_file( $_FILES["selectedMovie"]["tmp_name"], $filename); if($result){ echo '<video src="'.$filename.'"></video> '; }else{ echo 'エラー<br/>'; } }elseif ($_FILES["selectedMovie"]["error"]==1) { echo 'ファイルサイズが大きすぎます。'; } foreach($_FILES["selectedMovie"] as $key => $v){ echo $key.' : '.$v.'<br/>'; } } ?> </body> </html>