【PHP+SQLite3】恐竜登録ツール2

[前回](https://qiita.com/knowledge87sun/items/67632f27f6a56e301047)の記事の内容を実装してみた。

###共通処理のプログラム

```php:commom_dino.php
<?php 
//
function Checkdino($db0,$qry0,$val1,$type1)
{
    $flg=0;
    $result3=$db0->prepare($qry0);
    //パラメータをセット
    $result3->bindparam(1,$val1);
    $result3->bindparam(2,$type1);
    $result3->execute();
    //検索結果を配列に格納する
    $select_data=$result3->fetch();
    return $select_data;
}
//クエリ実行して得られる全データ
function get_AllData($db0,$query0)
{
    $result_a=$db0->prepare($query0);
    $result_a->execute();
    return $result_a;
}
//$str1:検索対象文字列,$str_mark:探したい文字: 戻り値、探したい文字より前にある文字列
function get_BeforeMarkString($str1,$str_mark)
{
    $idx0=strpos($str1, $str_mark);
    $retstr=substr($str1,0,$idx0);
    return $retstr;
}

//$str1:検索対象文字列,$str_mark:探したい文字、探したい文字より後にある文字列
function get_AfterMarkString($str1,$str_mark)
{
    $idx0=strpos($str1, $str_mark);
    $retstr=substr($str1,$idx0+1);
    return $retstr;
}
 ?> 
```
###開始画面のコード
```php:start_dino.php

<!DOCTYPE html>
<html lang="ja">
<meta charset="utf-8">
<title>恐竜登録にようこそ</title>
<h1>開始</h1>
<form action="select_dinotype1.php" method="post">

<?php 
require 'common_dino.php';
$select_all = "select count(*) from tbl_dino";
$db_name='dino_collect.db';
$ext=file_exists($db_name);
//恐竜情報テーブル作成
$query_c="CREATE TABLE tbl_dino(id integer primary key autoincrement,dname0 text,type0 text,n_src1 integer,type1 text,n_src2 integer,type2 text)";
$ret0 = 0;
//dbが存在しない時は
if(!$ext){
    $ret0 = 0;
    $db1 = new PDO('sqlite:'.$db_name);
    $result_a=$db1->prepare($query_c);
    $result_a->execute();

}else{
    //データベースを開く
    $db1 = new PDO('sqlite:'.$db_name);
    $result_a=get_AllData($db1,$select_all);
    //$count
    $count = $result_a->fetchColumn();
    $ret0=$count;

}

 ?>
<!—- 開始ボタンと一緒に、登録件数を送る —->
<input type="hidden" name="btn1" value="<?=$ret0?>">
<input type="submit" value="開始">
</form>
</html>

```

###恐竜のタイプ(ハイブリッドか非ハイブリッド)を選択する画面

- 登録件数が3体未満だと、非ハイブリッドの登録画面になる。
- 3体以上の場合、非ハイブリッドかハイブリッドを選べる。


```php:select_dinotype1.php

<!DOCTYPE html>
<html lang="ja">
<meta charset="utf-8">
<title>恐竜タイプ選択1</title>
<body>
<?php 
if(isset($_POST["btn1"])){
    $ret0=$_POST["btn1"];
    echo "<h1>恐竜タイプ選択1</h1>";
}
 ?>

<?php if($ret0<3){ ?>
<form action="single_dino1.php" method="post">
<input type="text" name="dname0">
カテゴリー:
<select name="dtype0">
<option>normal</option>
<option>rare</option>
<option>epic</option>
</select>
<input type="submit" value="確定" name="btn2">
</form>

<?php }else{ 

require "common_dino.php";
$db_name='dino_collect.db';
$db1 = new PDO('sqlite:'.$db_name);
$query_type0 = "SELECT DISTINCT type0 from tbl_dino";

?>
<form action="select_dinotype2.php" method="post">
カテゴリー:
<select name="l_category">
<option>ハイブリッド</option>
<option>非ハイブリッド</option>
</select><br>
生成元タイプ1:(ハイブリッド型は必須)
<?php $result_a=get_AllData($db1,$query_type0); ?>	
<select name="s_type1">
<?php while($select_data=$result_a->fetch(PDO::FETCH_ASSOC)){ ?>
<option><?php echo $select_data['type0']; ?></option>
<?php } ?>
</select><br>

生成元タイプ2:(ハイブリッド型は必須)
<?php $result_a=get_AllData($db1,$query_type0); ?>	
<select name="s_type2">
<?php while($select_data2=$result_a->fetch(PDO::FETCH_ASSOC)){ ?>
<option><?php echo $select_data2['type0']; ?></option>
<?php } ?>
</select><br>

<input type="submit" value="確定" name="btn2">
</form>

<?php	} ?>

<form action="start_dino.php" method="post">
<input type="submit" value="戻る" name="btn3">
</form>

</body>
</html>

```

###恐竜の名前とタイプの決定画面(3体以上登録時)

ハイブリッド選択時と非ハイブリッド選択時で画面項目の数は
異なるが、最終的に生成する恐竜名とタイプを決定する部分は同じ。

```php:select_dinotype2.php

<!DOCTYPE html>
<html lang="ja">
<meta charset="utf-8">
<title>恐竜タイプ選択2</title>
<h1>恐竜タイプ選択2</h1>

<?php 
$db_name='dino_collect.db';
$db1 = new PDO('sqlite:'.$db_name);

$type0=isset($_POST['l_category'])?htmlspecialchars($_POST['l_category']):null;;
$type1=isset($_POST['s_type1'])?htmlspecialchars($_POST['s_type1']):null;;
$type2=isset($_POST['s_type2'])?htmlspecialchars($_POST['s_type2']):null;;
if(strcmp($type0,"非ハイブリッド")==0){ ?>
<form action="single_dino1.php" method="post">
<input type="text" name="dname0">
カテゴリー:
<select name="dtype0">
<option>normal</option>
<option>rare</option>
<option>epic</option>
</select>

<input type="submit" value="確定" name="btn2">
</form>

<?php 
}else{

    $query_all="SELECT dname0,type0 FROM tbl_dino WHERE  type0 = ?";

function get_typedata($db0,$query0,$val1)
{
    $result_a=$db0->prepare($query0);
    $result_a->bindparam(1,$val1);
    $result_a->execute();
    return $result_a;
}	
 ?>
<form action="hibrid_dino1.php" method="post">
<input type="text" name="hdname0">

カテゴリー:
<select name="dtype0">
<option>rare</option>
<option>epic</option>
<option>regend</option>
<option>unique</option>
</select><br>
<?php $result_a=get_typedata($db1,$query_all,$type1); ?>
生成元1:
<select name="src1">
<?php while($select_data=$result_a->fetch(PDO::FETCH_ASSOC)){ ?>
<option><?php echo $select_data['dname0']; ?>:<?php echo $select_data['type0']; ?></option>
<?php } ?>
</select><br>

<?php $result_a=get_typedata($db1,$query_all,$type2); ?>
生成元2:
<select name="src2">
<?php while($select_data2=$result_a->fetch(PDO::FETCH_ASSOC)){ ?>
<option><?php echo $select_data2['dname0']; ?>:<?php echo $select_data2['type0']; ?></option>
<?php } ?>
</select>

<input type="submit" value="確定" name="btn2">
</form>

<?php }
    require 'common_dino.php';
    $select_all = "select count(*) from tbl_dino";
    $result_a=get_AllData($db1,$select_all);
    //$count
    $count = $result_a->fetchColumn();
    $ret0=$count;

 ?>
<form action="select_dinotype1.php" method="post">
<input type="hidden" name="btn1" value="<?=$ret0?>">
<input type="submit" value="戻る">
</form>

</html>

```
###非ハイブリッド登録結果

```php:single_dino1.php

<!DOCTYPE html>
<html lang="ja">
<meta charset="utf-8">
<title>恐竜シングル</title>
<h1>恐竜シングル結果</h1>

<?php 
require 'common_dino.php';
$db_name='dino_collect.db';
$db1 = new PDO('sqlite:'.$db_name);

$dtype1=isset($_POST['dtype0'])?htmlspecialchars($_POST['dtype0']):null;
$dname1=isset($_POST['dname0'])?htmlspecialchars($_POST['dname0']):null;
$query_ins1="INSERT INTO tbl_dino(dname0,type0,n_src1,n_src2) VALUES(?,?,?,?)";
$select_all = "select count(*) from tbl_dino";
$result_a=get_AllData($db1,$select_all);

//登録件数
$count = $result_a->fetchColumn();
$total_dino=$count;

//echo $dname1.":".$dtype1;
$query_select1="SELECT * FROM tbl_dino WHERE dname0 = ? AND type0 = ?";
//検索文字列、置換文字列,検索対象文字列の順番
$dname2=trim(str_replace("　"," ",$dname1));
if(isset($dname1) && empty($dname2) == false){
    //すでに登録済みの恐竜か否かチェックする
    $select_data=Checkdino($db1,$query_select1,trim($dname2),$dtype1);
    if($select_data){
        echo "登録済みです";

    }else{
        $result1=$db1->prepare($query_ins1);
        //パラメータをセット
        $result1->bindparam(1,$dname2);
        $result1->bindparam(2,$dtype1);
        //合成なしの場合、合成元恐竜がいないため
        $num0=0;
        $result1->bindparam(3,$num0);
        $result1->bindparam(4,$num0);
        $result1->execute();
        echo trim($dname2).":".$dtype1."の登録が完了しました";
    }
}else{
    echo "値が不正です";
}
 ?>
<form action="select_dinotype1.php" method="post">
<input type="hidden" name="btn1" value="<?=$total_dino?>">
<input type="submit" value="戻る">
</form>
</html>

```
###ハイブリッド恐竜の登録結果

```php:hibrid_dino1.php

<!DOCTYPE html>
<html lang="ja">
<meta charset="utf-8">
<title>ハイブリッド恐竜登録結果</title>
<h1>ハイブリッド恐竜登録結果</h1>

<?php 
require 'common_dino.php';
$db_name='dino_collect.db';
$db1 = new PDO('sqlite:'.$db_name);
$hdname1=isset($_POST['hdname0'])?htmlspecialchars($_POST['hdname0']):null;
$dtype1=isset($_POST['dtype0'])?htmlspecialchars($_POST['dtype0']):null;
$srctype1=isset($_POST['src1'])?htmlspecialchars($_POST['src1']):null;
$srctype2=isset($_POST['src2'])?htmlspecialchars($_POST['src2']):null;
$query_ins2="INSERT INTO tbl_dino(dname0,type0,n_src1,type1,n_src2,type2) VALUES(?,?,?,?,?,?)";

//登録件数
$select_all = "select count(*) from tbl_dino";
$result_a=get_AllData($db1,$select_all);
    //登録件数
$count = $result_a->fetchColumn();
$total_dino=$count;

$query_select1="SELECT * FROM tbl_dino WHERE dname0 = ? and type0 = ?";
//全角の空白を半角スペースに変換　
$hdname2=trim(str_replace("　"," ",$hdname1));

if(isset($hdname1) && empty($hdname2) == false){
    if(strcmp($srctype1,$srctype2)==0){
        echo "生成元1と生成元2は違う種類を選んでください。";
    }else{
    //すでに登録済みの恐竜か否かチェックする
        $select_data0=Checkdino($db1,$query_select1,trim($hdname2),$dtype1);

        if($select_data0){
            echo "登録済みです";
        }else{
            //生成元タイプ１と生成元恐竜１に分ける。
            $src1=get_BeforeMarkString($srctype1,":");
            $stype1=get_AfterMarkString($srctype1,":");
            //生成元タイプ２と生成元恐竜２に分ける。
            $src2=get_BeforeMarkString($srctype2,":");
            $stype2=get_AfterMarkString($srctype2,":");  
            $select_data1=Checkdino($db1,$query_select1,$src1,$stype1);
            //生成元１の恐竜番号を取得
            $num_src1=$select_data1['id'];
            $select_data2=Checkdino($db1,$query_select1,$src2,$stype2);
            //生成元２の恐竜番号を取得
            $num_src2=$select_data2['id'];
            //登録クエリ	
            $result1=$db1->prepare($query_ins2);

            //パラメータをセット
            $result1->bindparam(1,$hdname2);
            $result1->bindparam(2,$dtype1);
            $result1->bindparam(3,$num_src1);
            $result1->bindparam(4,$stype1);
            $result1->bindparam(5,$num_src2);
            $result1->bindparam(6,$stype2);
            $result1->execute();
            echo $hdname2.":".$dtype1."を登録しました";
        }
    }
}else{
    echo "名前が不正です";
}

 ?>
<form action="select_dinotype1.php" method="post">
<input type="hidden" name="btn1" value="<?=$total_dino?>">
<input type="submit" value="戻る">
</form>
</html>

```