idを指定して取り出す
基本的に「ひとつ取り出す」というのは主キーだし主キーであるべき
重なってると面倒なことになるからね
ここ全体がpdoなのでさらに->でプリペアー
public function getMenubyId($id=1){ //指定したid番号を取得、引き取るid番号が仮引数の$id
$sql="SELECT * FROM foods WHERE id=:id";
$stmt = $this->pdo->prepare($sql);
$stmt->bindvalue(":id",$id,PDO::PARAM_INT);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
return $row;
}
$row = $obj->getMenuById(2);
中略
<p>
<?php print_r( $row); ?>
</p>
idの2番を呼び出すのだが、メソッドの中のぱらめたに値を代入(public function getMenubyId($id=1))すると「デフォルト値」としてphpでは扱われる
仮に呼び出し元で何の指定もなければこれ(id=1)が採用されるし、
なにか指定があればちゃんとid=2をとってくる
insert
update
deleteも追加
<?php foreach($arr as $val): ?>
<li><a href="form.php?id=3"><?php echo $val["menu"]; ?></a></li>
<?php endforeach; ?>
こんな風にしたい
これだと全部id=3になってしまうので、
→
<a href="form.php?id=<?php echo $val["id"]; ?>">
hoverするとここにちゃんとidがきている
ここまで
list.php
<?php
require_once("class/lunch.class.php");
$obj = new Lunch();
$arr = $obj->getAllMenu();
//print_r($arr);
//$row = $obj->getMenuById(2);
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>メニューリスト</title>
<link rel="stylesheet" href="css/style.css">
<script src="../jquery-3.4.1.min.js"></script>
</head>
<body>
<div id="container">
<h1>メニューリスト</h1>
<ul id="m_list">
<!--方法1一番外側の階層([0~20])をぐるぐる回すよ、その中身をvalとするよ-->
<?php foreach($arr as $val): ?>
<li>
<a href="form.php?id=<?php echo $val["id"]; ?>">
<?php echo $val["menu"]; ?></a>
</li>
<?php endforeach; ?>
<!--方法2 count関数を使うよ
<?php for($i=0; $i<count($arr); $i++): ?>
<li><?php echo($arr[$i]["menu"]); ?></li>
<?php endfor ?>
-->
</ul>
<!--
<p>
<?php print_r( $row["menu"]); ?>
</p>
-->
</div>
<script src="js/lunch.js"></script>
</body>
</html>
lunch.class.php
<?php
class Lunch{
private $pdo;//外から直接アクセスはできないように
public function __construct(){//コンストラクタ。初期化されたときに動く
// -----------------
//環境によって変更
// -----------------
$host="localhost";
$dbuser="root";
$dbpass="";
$dbname="lunch";
// -----------------
$dsn = "mysql:host={$host}; dbname={$dbname}; charset=utf8";
$this->pdo=new PDO($dsn,$dbuser,$dbpass); //$pdoとは書かない
}//constructの終わり
public function getAllMenu(){//publicでないと外から呼び出せない
$sql = "SELECT * FROM foods";
$rs = $this->pdo->query($sql);
$rows = $rs->fetchAll(PDO::FETCH_ASSOC);
return $rows;//戻り値
}
public function getMenubyId($id=1){//指定したid番号を取得、引き取るid番号が仮引数の$id
$sql="SELECT * FROM foods WHERE id=:id";
$stmt = $this->pdo->prepare($sql);
$stmt->bindvalue(":id",$id,PDO::PARAM_INT);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
return $row;
}
public function setMenu($menu,$price,$c_id){//idはオートインクリメントなので必要ない
$sql = "INSERT INTO foods(menu,price,c_id) VALUES (:menu,:price,:c_id)";//メニューと値段とカテゴリidを追加
$stmt = $this->pdo->prepare($sql);//クラス内の変数なのでstmtやsqlのスコープはここだけ
$stmt->bindvalue(":menu",$menu,PDO::PARAM_STR);
$stmt->bindvalue(":price",$price,PDO::PARAM_INT);
$stmt->bindvalue(":c_id",$c_id,PDO::PARAM_INT);
$stmt->execute();
//戻り値は要らない
}
public function updateMenu($menu,$price,$c_id,$id){//どれがupdateされるか分からないので3つとも仮引数を用意
//主キーである$idがないと全部書き換わってしまうのでどこのレコードか指定するため今回4つプロパティが要る
$sql = "UPDATE foods SET menu=:menu, price=:price, c_id=:c_id WHERE id=:id";
$stmt = $this->pdo->prepare($sql);
$stmt->bindvalue(":menu",$menu,PDO::PARAM_STR);
$stmt->bindvalue(":price",$price,PDO::PARAM_INT);
$stmt->bindvalue(":c_id",$c_id,PDO::PARAM_INT);
$stmt->bindvalue(":id",$id,PDO::PARAM_INT);//idも必要ですよ
$stmt->execute();
}
public function deleteMenu($id){//パラメータは主キーであるidだけでいい
$sql = "DELETE FROM foods WHERE id=:id";
$stmt = $this->pdo->prepare($sql);
$stmt->bindvalue(":id",$id,PDO::PARAM_INT);
$stmt->execute();
}
}
?>