//tips
//php理解
商品管理の作成を行うため新たなテーブルを作るところから始める。
phpmyadminでmst_productテーブルを作成したらhtdocsファイルにproductフォルダを追加。
商品追加画面から作成していく。
まずは下記の入力画面を作成し。基本的にはstaffのものをベースに変更するだけで良い。
<body>
商品追加<br/>
<br/>
<form method="post" action="pro_add_check.php">
商品名を入力してください<br/>
<input type="text" name="name" style="width:200px"><br/>
価格を入力してください<br/>
<input type="password" name="pass" style="width:100px"><br/>
<br/>
<input type ="button" onclick="history.back()" value="戻る">
<input type ="submit" value="OK">
</form>
</body>
そこからpro_add_checkの内容を下記に記載する。
<body>
<?php
$pro_name=$_POST['name'];
$pro_price=$_POST['price'];
$pro_name=htmlspecialchars($pro_name,ENT_QUOTES,'UTF-8');
$pro_price=htmlspecialchars($pro_price,ENT_QUOTES,'UTF-8');
if($pro_name=='')
{
print'商品名が入力されていません。<br/>';
}
else
{
print'商品名:';
print$pro_name;
print'<br/>';
}
if(preg_match('/¥A[0-9]+¥z/',$pro_price)==0)
{
print'価格をきちんと入力してください。<br/>';
}else{
print'価格:';
print $pro_price;
print'円<br/>';
}
if($pro_name==''||preg_match('/¥A[0-9]+¥z/',$pro_price)==0)
{
print'<form>';
print'<input type="button" onclick="history.back()" value="戻る">';
print'</form>';
}
else
{
print'上記の商品を追加します。<br/>';
print'<form method ="post" action="pro_add_done.php" >';
print'<input type ="hidden" name="name" value="'.$pro_name.'" >';
print'<input type ="hidden" name="pass" value="'.$pro_price.'" >';
print'<br/>';
print'<input type ="button" onclick="history.back()" value="戻る" >';
print'<input type ="submit" value="OK" >';
print'</form>';
}
?>
</body>
先にも確認した正規表現がここでも価格の確認のため用いられている。
preg_match('/¥A[0-9]+¥z/',$pro_price)はA[0-9]+¥zが半角数字を表し、$pro_priceがチェックしたいデータを格納している。
データベースの追加実行画面は下記。
<body>
<?php
try
{
$pro_name=$_POST['name'];
$pro_price=$_POST['price'];
$pro_name=htmlspecialchars($pro_name,ENT_QUOTES,'UTF-8');
$pro_price=htmlspecialchars($pro_price,ENT_QUOTES,'UTF-8');
$dsn='mysql:dbname=shop;host=localhost;charset=utf8';
$user='root';
$priceword='';
$dbh=new PDO($dsn,$user,$priceword);
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$sql = 'INSERT INTO mst_product(name,price) VALUES (?,?)';
$stmt=$dbh->prepare($sql);
$data[]=$pro_name;
$data[]=$pro_price;
$stmt->execute($data);
$dbh=null;
print $pro_name;
print'を追加しました。<br/>';
}
catch(Exception $e)
{
print'ただいま障害によろ大変迷惑をおかけしております。';
exit();
}
?>
<a href="pro_list.php">戻る</a>
</body>
http://localhost/product/pro_add.phpをブラウザに入力して追加の流れまでを実行できる。
<input type="text" name="price" style="width:50px"><br/>がパスワードになっていたのでテキストに変更。
また、正規チェックで数字が引っかかるので’/\A[0-9]+\z/‘,に変更することでエラーを解消。
下記が発動してしまったので、echo $e->getMessage();を追加して問題内容を出力させる。
catch(Exception $e)
{
print'ただいま障害によろ大変迷惑をおかけしております。';
echo $e->getMessage();
exit();
}
SQLSTATE[HY000]: General error: 1364 Field 'gazou' doesn't have a default valueとのことだったのでまだ設定していないgazouの部分が問題となっているよう。
このエラーはmysqlのバージョンアップによって起こるものだとのこと。デフォルト未設定のフィールドにエータを入れなくてもエラーにならないように調整する。
https://qiita.com/21century_girl_/items/5be2606b3bfa98514952
Etcフォルダにあるmy.cnfを開き下記を追加。
sql_mode=NO_ENGINE_SUBSTITUTION
一旦manager-osxを閉じてmyphpも終了。
再度開いて状況を確認する。
これでも治らなかったのでmyphpのgazouのデフォルト値をnullに設定したら問題なく追加完了画面が表示された。