Edited at

家計簿


web家計簿

使途不明金が多すぎて家計簿をつけることにしましたがアプリをDLするのもめんどくさいし、web上から家計簿をつける事ができればいいなと思い雑に作りました。

スクリーンショット 2019-01-14 14.23.34.png

php,html,css全然わからないので適当にコピペしました。

2019/1/14 作り直しました


index.php


<?php
require("readcsv.php");
require("transecsv.php");
require("deletecsv.php");
if(isset($_GET["file1"])){
$str = $_GET["file1"];
$int = 1;
deletecsv($int,$str);
}elseif(isset($_GET["file0"])){
$str = $_GET["file0"];
$int = 0;
deletecsv($int,$str);
}
if(isset($_POST["data"]) && isset($_POST["source"])){
$data = $_POST["data"];
$source = $_POST["source"];
if($source === "a"){
$file = fopen("cost.csv", "a");
} elseif($source === "b"){
$file = fopen("income.csv", "a");
}
fwrite($file, $data. PHP_EOL);
}
$i = 0;
$count = 0;
$income = readcsv("income.csv")[1];
$cost = readcsv("cost.csv")[1];
$csv = transecsv(array(readcsv("cost.csv")[0],readcsv("income.csv")[0]));

?>

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div class="boxA">
<div class="box1">
<div class="item">

</div>
<div class="item no-label">

<form action="/index.php" method="post">
<input type="text" name="data">
<div class="radio-group">
<label><input type="radio" name="source" value="a" checked="checked">支出</label>
<label><input type="radio" name="source" value="b">収入</label><br>
</div>

<input type="submit" value="送信">
</form>

</div>
</form>

</div>
<input type="button" onclick="location.href='./index.php'"value="再読み込み">
<div class="box2">

<table border="1" rules="all">
<tr><td>支出</td><td>収入</td></tr>

<?php foreach($csv as $row){ ?>
<tr>
<?php foreach($row as $cel){ ?>
<td>
<a href="./index.php?<?= "file" .$count; $count++;?>=<?= $i ?>"><?= $cel[0];?></a>
</td>
<?php } ?>
</tr>
<?php $i++; $count = 0; } ?>
<tr><td><?= $cost ?></td><td><?= $income ?></td></tr>
</table>
残高 : <?php echo ($income - $cost), "円"; ?>
</div>
</div>

</body>
</html>

<style>
div {

box-sizing: border-box;

text-align: center;
line-height: 40px;
font-weight: bold;

}
.box1, .box2 {
float: left;
border-color: yellow;
width: 50%;
}

</style>



readcsv.php


<?php
function readcsv($csvfile){
$sum = 0;
$csv = [];
setlocale(LC_ALL, 'ja_JP.UTF-8');

$data = file_get_contents("$csvfile");
$data = mb_convert_encoding($data, 'UTF-8', 'sjis-win');
$temp = tmpfile();
$meta = stream_get_meta_data($temp);

fwrite($temp, $data);
rewind($temp);

$file = new SplFileObject($meta['uri']);
$file->setFlags(SplFileObject::READ_CSV);

$csv1 = array();

foreach($file as $line) {
$csv[] = $line;
$sum += $line[0];
}

fclose($temp);
$file = null;

return array($csv,$sum);
}

?>



transecsv.php


<?php
function transecsv($inputcsv){
$csv = array_map(null, $inputcsv[0], $inputcsv[1]);
foreach ($csv as $row) {
$row[0];
$row[1];

}

return $csv;
}
?>



deletecsv.php


<?php
function deletecsv ($int,$str){
if ($int == 1){
$csv = "income.csv";
}elseif ($int == 0){
$csv = "cost.csv";
}
$file = file($csv);
unset($file[$str]);
file_put_contents($csv, $file);
return 0;
}
?>


aタグでpostするやり方が分からないので仕方がないのでgetで誤入力した際に消すように変更。

結局けっこう長くなってしまった。

部分部分を切り貼りして作ったので最初はpostで送信された金額がテーブルに追加されてなかったのですが受け取りを先にすればちゃんと反映されました。

"時間があれば"関数化してコードを簡略化したいなあ

"もっと勉強してこい"や"ここはこの方がいいよ"等はどしどし受け付けてます