PHP

横青棒画
  

前提環境については、macOS環境でPHPのウェブ開発を支援するためのソフトのMAMPを起動して実感する

MAMP

MAMP(Macintosh、Apache、MySQL、PHP)は、macOS上でウェブ開発をサポートするソフトウェアパッケージです。これにより、ウェブサイトやウェブアプリケーションの開発に必要なPHP、MySQL、Apache環境を手軽に構築できます。

 

PHPでレストラン検索サイトを作るポイント

入力して検索求める部分

探したい「店名」を <input>:要素で既定の"text" とフォームを送信するボタン "submit" を用いて送信方法を「 method="POST" 」に設定して「action="〇〇.php"」〇〇ファイルに送り込む。

      <h3>レストラン店名検索</h3>
  
      <form action="search_receive.php" method="POST">
  
         <label for="name">??</label>
         <input type="text" id="name" name="name" placeholder="店名を入力">
         <input type="submit" value="検索する">
      </form>
    

求められたデータを受け取って検索して返す部分

$_SERVER[ ];サーバー変数は連想配列で['キー名']という形で呼び出す、PHPで送信データ判別し取得するHTTPリクエストメソッドREQUEST_METHOD。


  <?php
    if($_SERVER['REQUEST_METHOD'] === 'POST'){  
        $name = $_POST['name'];                  //フォームの入力値代入
    }
  

⌈データベースPDO接続と処理⌋

「プレースホルダ」という仕組みを使って、以下のように変動値を安全にSQL文に割り当てるわけですが、


$sql = "SELECT カラム名, price, name FROM テーブル名 WHERE name like :name";


この後「prepare( )」と「bindValue( )」と「execute( )」を使う。 
バインド変数は、 データベースの場合は、変数名(ここでは「name」)の頭にコロン(:)を付けて(:name)と表記する。



  $dsn = 'mysql:dbname=データベース名;host=localhost;charset=utf8';
  $user = 'root';
  $password = 'root';
  
  $data = [];                //配列として初期化arry()以外 短縮構文でも使える
  
  try{
      $dbh = new PDO($dsn, $user, $password);
      $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
                                                      //エラーが発生処理する
      $sql = "SELECT カラム名, price, name FROM テーブル名 WHERE name like :name";
                                                      //構文 likeは「~を含む」曖昧検索する   
      $stmt = $dbh->prepare($sql);
      $stmt->bindValue(':name', '%'.$name.'%', PDO::PARAM_STR);
                                                    //変数を当てる  %はワイルドカードと言う
      $stmt->execute();
      $count = $stmt->rowCount();                    //対象の行数分のカウントを取得
      while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ 
                                        //結果セットをオブジェクトとして取得してwhileする
      
          $data[] = $row;
      }
  
  }catch (PDOException $e){
      echo($e->getMessage());
      die();
  }
  ?>
  
   
行は連想配列で扱うな、クラスに定義する

⌈配列として項目(カラム名)を取り出し表示する処理 ⌋

⌈foreach($data as $row): ⌋ の部分について
Foreachは"一次元配列と、連想配列"の繰り返し処理できる

    
<h1>レストラン一覧 </h1> <p> <?php echo $count;?>件見つかりました。 </p> <table border=1> <tr> <th>地区 </th> <th>店名 </th> <th>価格帯 </th> </tr> <?php foreach($data as $row): /*二次元配列になっているのでforeachで配列キーはカラム名を指定する*/?> <tr> <td> <?php echo $row['address'];?>  </td> <td> <?php echo $row['name'];?>  </td> <td> <?php echo $row['price'];?>  </td> </tr> <?php endforeach; ?> </table>

MAMPのMySQLサーバー

MacのMAMPのMySQLサーバー起動して開く” phpMyAdmin ”