セレクトはよく使うので、
専用のメソッドを作って
書き出しまでやってしまおう
ここの"c_id"は""の中なので、¥をつけて無効化する
本来echo "<SELECT name="c_id" id="c_id">";と書きたいが
これだと「echo "<SELECT name="」で一回終わってしまうので
無効化が必要
while($row = $rs->fetch(PDO::FETCH_ASSOC)){
echo "<option value=\"1\">";
}
こうしたいが、
valueの中身は1じゃなくて$row["c_id"]にしたい
まず1と書いてみて、
そのあとはめこんでいく
echo "<option value=\"{$row["c_id"]}\">";
この{}はなくてもいいらしいが一応つける
これが
こうなる
ここには{}が必要なのだが、
それ以前に、
ここの""は無効化してはいけない
なぜかというと、この部分はphpに解読して実行もらわないといけない
phpの文章なので
その前のoption value=\"
の部分の無効化は、
「htmlなので」「そうやって書き出してくれ」という意味で必要
phpの部分はパースしてもらいたいから""がそのまま要るし、
htmlの部分はパースされちゃ困るから無効化する
selectedやcheckedがちゃんとなるように工夫
呼び出し元を
<?php $obj->makeCatSelect($c_id); ?>
に変更
こうなった
public function makeCatSelect($c_id){
$sql = "SELECT * FROM cats";
$rs = $this->pdo->query($sql);//レコードセットの中に結果セットを入れる形
echo "<SELECT name=\"c_id\" id=\"c_id\">\n";
//ダミーのオプション
echo "<option value=\"\">以下から選択</option>\n";
while($row = $rs->fetch(PDO::FETCH_ASSOC)){
$selStr = $c_id==$row["c_id"] ? " selected" : "";//三項演算。selectedか何もないか。あるにせよないにせよechoする。一致すればselected、なければ""
//option value="1"うどん</option>みたいなのを出力したい
echo "<option value=\"{$row["c_id"]}\"{$selStr}>";
echo htmlspecialchars($row["cat"],ENT_QUOTES);
echo "</option>\n";
}
echo "</select>\n";
}
さてform.php
編集だけでなく削除ボタンもやりたい
submitボタンは複数あってもいい
ただどちらが押されたかは、name属性で判断させる
押されたほうだけの値が来ているのが分かる
→1個のフォームから異なる挙動をすることができる
なんならupdateやなんとかもメソッドで呼び出して使える
jsからアクセスできるようにidもつける
<p>
<input type="submit" name="sub1" id="sub1" value="編集">
<input type="submit" name="sub2" id="sub2" value="削除">
</p>
プリベントデフォルトをやるので
//編集ボタン
$('#sub1').on('click',function(e){
});
としておく
eが入るよ