csv経由で一括とかではなく、エクセルの内容をDBなどに入れたい場合、
エクセルの内容を入力フォームにペーストすると、
セルごとにtabで区切られたテキストが表示される。
これをそのままフォームへpostしたと仮定して、受け側のプログラム。
条件として、
○コピペする列の数は決まっている
○最後の列に改行記号が入っていない
とします。
$contents = $_POST["contents"];//これがフォームの内容
$celllength = 10;//一行あたりのセルの数を決めておく
$masterarray =[];//目標となる配列。ここに全て入れたい。
$count =0;
$array = explode("\t", $contents);//とりあえず全てtabで区切る
foreach ($array as $key => $value) {
if($count % ($celllength-1) ==0 &&$count>0)//最後の列は次の行の最初の列とくっついているので、改行記号で分ける。
{
$masterarray[]=explode("\n",$value)[0];
$masterarray[]=explode("\n",$value)[1];
}
else {
$masterarray[]=$value;
}
$count++;
}
if(count($masterarray) > $celllength)
{
array_pop($masterarray);//最後の行の最後の列を二つにしてしまったので、削除しておく
}
if(count($masterarray) % $celllength !=0 )//postされたセルの数が正しいか確認
{
echo "error:セルの数が不正です。エクセルの選択範囲を見直してください。";
die;
}
foreach ($masterarray as $key => $value) {
echo $key.":".$value."\r";//debug
}
後はお好きに。$masterarrayは連想配列にしてあげたほうが使いやすいですね。
Translate
2016年1月20日水曜日
2016年1月18日月曜日
【jquery】複雑な形のテーブル要素の取得
不幸にしてこんなテーブルに遭遇したとする
テーブル内の要素を順番に取得する方法は
$(function() {
$("table tr").each(function() {
$(this).children().each(function () {
alert( $(this).html());
});
});
});
こんなかんじ。では、どんな順番で取得するかというと
このような順番で取得してくれる。
例えば二行目だけ取得しようとすると
$('table tr:nth-child(2)').children().each(function () {
alert( $(this).html());
});
こんなコードになるが、結果は
7,8,9となる。
逆に7,4,8,9と取得したいときが面倒くさそう。
テーブル内の要素を順番に取得する方法は
$(function() {
$("table tr").each(function() {
$(this).children().each(function () {
alert( $(this).html());
});
});
});
こんなかんじ。では、どんな順番で取得するかというと
1 | 2 | 3 | 4 | 5 | 6 |
7 | 8 | 9 | |||
10 | 11 | 12 | 13 | 14 | |
15 | 16 | 17 | 18 | 19 |
このような順番で取得してくれる。
例えば二行目だけ取得しようとすると
$('table tr:nth-child(2)').children().each(function () {
alert( $(this).html());
});
こんなコードになるが、結果は
7,8,9となる。
逆に7,4,8,9と取得したいときが面倒くさそう。
2016年1月13日水曜日
【mysql】最新状況を検索したいの続き
よく考えたら前回の記事では最新状況の一覧は出せたが、検索はできていなかった。
(前回)
FLOW: start -- aaa--bbb--ccc--end
select * from ( select * from log where status = "aaa" OR status = "bbb" OR status = "ccc" order by date desc) as t group by product order by date desc
//all id's recent log
ここからさらに塗装中の個別IDを拾いたいときは、こんな感じ
select * from (select * from ( select * from log order by date desc) as t group by product order by date desc) as t2 where status ="aaa"
//search where recent status is "aaa"
(前回)
FLOW: start -- aaa--bbb--ccc--end
select * from ( select * from log where status = "aaa" OR status = "bbb" OR status = "ccc" order by date desc) as t group by product order by date desc
//all id's recent log
ここからさらに塗装中の個別IDを拾いたいときは、こんな感じ
select * from (select * from ( select * from log order by date desc) as t group by product order by date desc) as t2 where status ="aaa"
//search where recent status is "aaa"
2016年1月9日土曜日
【mysql】最新状況を検索したい
例えばある製品の製造工程をログにとっているとして、
テーブルは
id product status date
という項目、
開梱→組み立て→塗装→梱包→発送
というフローだとする。
このうち、組み立てから梱包までの作業上にある製品の、最新ステータスを検索したいとき
select * from ( select * from log where status = "組み立て" OR status = "塗装" OR status = "梱包" order by date desc) as t group by product order by date desc
group by で値を拾うときはテーブルの一番上の行を採用するらしいので、
ソートをかけて拾いたい最新のデータを、()内で一番上にもってきている。
テーブルは
id product status date
という項目、
開梱→組み立て→塗装→梱包→発送
というフローだとする。
このうち、組み立てから梱包までの作業上にある製品の、最新ステータスを検索したいとき
select * from ( select * from log where status = "組み立て" OR status = "塗装" OR status = "梱包" order by date desc) as t group by product order by date desc
group by で値を拾うときはテーブルの一番上の行を採用するらしいので、
ソートをかけて拾いたい最新のデータを、()内で一番上にもってきている。
2016年1月8日金曜日
【javascript】簡潔な配列の宣言
var array1 = ["contents1","contents2","contents3","contents4","contents5","contents6"];
var array2 ="contents1,contents2,contents3,contents4,contents5,contents6".split(",");
下のほうが書きやすく、要素が多くなるほど文字数を省ける
var array2 ="contents1,contents2,contents3,contents4,contents5,contents6".split(",");
下のほうが書きやすく、要素が多くなるほど文字数を省ける
2015年12月29日火曜日
PHPの連想配列を表にしたい
$curry['肉'] = ['牛肉','鶏肉','豚肉','ひき肉'];
$curry['野菜'] = ['人参','ジャガイモ','玉ねぎ','ほうれん草','トマト'];
$curry['炭水化物'] =['お米','ナン'];
こんな連想配列を
としたい
$curry['野菜'] = ['人参','ジャガイモ','玉ねぎ','ほうれん草','トマト'];
$curry['炭水化物'] =['お米','ナン'];
こんな連想配列を
具材 | 種類 |
---|---|
肉 | 牛肉 鶏肉 豚肉 ひき肉 |
野菜 | 人参 ジャガイモ 玉ねぎ ほうれん草 トマト |
炭水化物 | お米 ナン |
echo "<table>";
foreach($curry as $key => $value){
echo "<tr><td> $key </td><td>";//ここで得られる$valueは配列
foreach ($value as $key2 => $value2) {
echo $value2." " ;
}
echo "</td></tr>";
}
echo "</table>";
2015年12月14日月曜日
XAMPP環境でPHPからmysqlにmysqldumpコマンドを打つときにはまったこと
データベースの内容をバックアップするボタンを作ろうと、こんなスクリプトを書いた。
$id = "root";
$pwd = "password";
$db = "myDB";
passthru('mysqldump '.$db.' -u '.$id.' -p'.$pwd.' >./tmp/test.sql ');
・・・が、うまく行かない。空のsqlが書き出される。
色々調べた結果、stackoverflowで同じような質問があったので解決
xamppを使用の場合、
passthru('c:\xampp\mysql\bin\mysqldump '.$db.' -u '.$id.' -p'.$pwd.' >./tmp/test.sql ');
とすればよい。ローカルのインストールしたパスを参照させないといけない。
同様に、バックアップから復帰させるときは
passthru('c:\xampp\mysql\bin\mysql '.$db.' -u"'.$id.'" -p"'.$pwd.'" <./tmp/test.sql ');
とする。
$id = "root";
$pwd = "password";
$db = "myDB";
passthru('mysqldump '.$db.' -u '.$id.' -p'.$pwd.' >./tmp/test.sql ');
・・・が、うまく行かない。空のsqlが書き出される。
色々調べた結果、stackoverflowで同じような質問があったので解決
xamppを使用の場合、
passthru('c:\xampp\mysql\bin\mysqldump '.$db.' -u '.$id.' -p'.$pwd.' >./tmp/test.sql ');
とすればよい。ローカルのインストールしたパスを参照させないといけない。
同様に、バックアップから復帰させるときは
passthru('c:\xampp\mysql\bin\mysql '.$db.' -u"'.$id.'" -p"'.$pwd.'" <./tmp/test.sql ');
とする。
登録:
投稿 (Atom)