-
Notifications
You must be signed in to change notification settings - Fork 0
/
book_log.php
152 lines (119 loc) · 3.95 KB
/
book_log.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
<?php
function validate($review)
{
$errors = [];
//書籍名が正しく入力されているかチェック
if (!strlen($review['title'])) {
$errors['title'] = '書籍名を入力してください';
}elseif (strlen($review['title']) > 255) {
$errors['title'] = '書籍名は255文字以内で入力してください';
}
//著者名が正しく入力されているかチェック
if (!strlen($review['author'])) {
$errors['author'] = '著者名を入力してください';
}elseif (strlen($review['author']) > 100) {
$errors['author'] = '著者名は100文字以内で入力してください';
}
//読書状況が正しく入力されているかチェック
if (!strlen($review['states'])) {
$errors['states'] = '読書状況を入力してください';
}elseif (strlen($review['states']) > 4) {
$errors['states'] = '読書状況は4文字以内で入力してください';
}
//評価が正しく入力されているかチェック
if ($review['score'] < 1 || $review['score'] > 5) {
$errors['score'] = '評価は1〜5の整数を入力してください';
}
// 感想が正しく入力されているかチェック
if (!strlen($review['summary'])) {
$errors['summary'] = '感想を入力してください';
}elseif (strlen($review['summary']) > 1000) {
$errors['summary'] = '感想は1000文字以内で入力してください';
}
return $errors;
}
function listReviews($link)
{
echo '登録されている読書ログを表示します' . PHP_EOL;
$sql = 'SELECT title, author, states, score, summary FROM reviews';
$results = mysqli_query($link, $sql);
while ($review = mysqli_fetch_assoc($results)) {
echo '書籍名:' . $review['title'] . PHP_EOL;
echo '著者名:' . $review['author'] . PHP_EOL;
echo '読書状況:' . $review['states'] . PHP_EOL;
echo '評価:' . $review['score'] . PHP_EOL;
echo '感想:' . $review['summary'] . PHP_EOL;
echo '--------------' . PHP_EOL;
}
mysqli_free_result($results);
}
function dbConnect()
{
$link = mysqli_connect('db', 'book_log', 'pass','book_log');
if (!$link) {
echo 'Error:DBに接続できません' . PHP_EOL;
echo 'Debugging error:' . mysqli_connect_error() . PHP_EOL;
exit;
}
return $link;
}
function createReview($link)
{
$review = [];
echo '読書ログを登録してください' . PHP_EOL;
echo '書籍名:';
$review['title'] = trim(fgets(STDIN));
echo '著者名:';
$review['author'] = trim(fgets(STDIN));
echo '読書状況(未読,読んでる,読了):';
$review['states'] = trim(fgets(STDIN));
echo '評価(5点満点の整数):';
$review['score'] = (int) trim(fgets(STDIN));
echo '感想:';
$review['summary'] = trim(fgets(STDIN));
$validated = validate($review);
if (count($validated) > 0) {
foreach ($validated as $error) {
echo $error . PHP_EOL;
}
return;
}
$sql = <<<EOT
INSERT INTO reviews (
title,
author,
states,
score,
summary
) VALUES (
"{$review['title']}",
"{$review['author']}",
"{$review['states']}",
"{$review['score']}",
"{$review['summary']}"
)
EOT;
$result = mysqli_query($link, $sql);
if ($result) {
echo '登録が完了しました' . PHP_EOL . PHP_EOL;
} else {
echo 'Error:データの追加に失敗しました' . PHP_EOL;
echo 'Debugging error;' . mysqli_error($link) . PHP_EOL . PHP_EOL;
}
}
$link = dbConnect();
while (true) {
echo '1.読書ログを登録' . PHP_EOL;
echo '2.読書ログを表示' . PHP_EOL;
echo '9.アプリケーションを終了' . PHP_EOL;
echo '番号を選択してください(1,2,9):';
$num = trim(fgets(STDIN));
if ($num == '1') {
createReview($link);
} elseif ($num === '2') {
listReviews($link);
} elseif ($num === '9') {
mysqli_close($link);
break;
}
}