###はじめに
たぶん、何やってんだろう?という質問内容かと思いますが、アドバイスをいただければと思います。
###やりたいこと
漠然としてはいますが、たぶんclassを作るのに、すごい遠回りをし始めているんだと思います。
そして、MVCなどの考え的なのはなんとなくわかるのですが、イマイチclassとかの部分がまだ理解できておりません。
とりあえず、例えばですが、、、
<select> <option></option> <?php $dbh = connectDb(); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $sql = "SELECT id, name FROM users ORDER BY id ASC"; $stmt = prepare($sql); $stmt->execute(); while ($row = $stmt->fetch()) : $id = $row['id']; $name = $row['name']; ?> <option value="<?= $id; ?>"><?= $name; ?></option> <?php endwhile; ?> </select>
上記のように、SelectのoptionをDBから引っ張ってきて作成するというものがあるとします。
これだけで、普通にできているのですが、あえて、、、処理をわけてわざわざ複雑な感じにしてみたいと思います。
※なんでするの?というのは、とりあえず聞かないでください、、、、
###とりあえず考えてみたこと
classとかの部分が勉強不足なので、とりあえず処理を分けるということだけを考えてみました。
[index.php] <!-- select_box --> <?php select_box(); ?>
[db.php] function select_db() { $dbh = connectDb(); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $sql = "SELECT id, name FROM users ORDER BY id ASC"; $stmt = prepare($sql); $stmt->execute(); $rows = $stmt->fetchAll(); $_SESSION['rows'] = $rows; }
[processing.php] function select_box() { select_db(); $cnt = count($_SESSION['rows']); echo "<select name='select_box'><option></option>"; for ($i = 0; $i <= $cnt; $i++) { $select['id'] = $_SESSION['rows'][$i]['staff_id']; $select['name'] = $_SESSION['rows'][$i]['name']; echo "<option value=" . $select['id'] . ">" . $select['name'] . "</option>"; } echo "</select>";
###とりあえずの結果
表示することはとりあえずできました。
###問題等
処理を分けるという考え方だけなら、indexは表示だけ、dbがDBからのデータを抽出しただけ、processingでデータを加工?したという感じ?になったような気はしますが、、、
とりあえず、よくわかってない部分で、、、
1.これでデータを取得したら、なぜかデータの最後に空白ができてた。
当然最初に<option></option>があるので、最初は空白ですが、その後データの最後にまた空白ができてしまっていました。
2.上記はとりあえず独学と、いろいろ質問させてもらったりサイトを見たのを使いながらゴリゴリ書いていきましたが、これをもう少しこうすれば?というアドバイスやヒントなどいただければと思って質問いたしました。
ここは、こうしたほうがわかりやすい。
ここは、無駄でなくてもいいはず。
さらにここは省略するべきなど、、、ご意見いただけますでしょうか?
なんじゃこの書き方は?と思われるでしょうが、参考のために、、、
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/05/19 23:41