顧客情報の新規登録とデータ更新の処理を作成してみましょう。
まずは上記のような入力画面を作っていきましょう。
customer-input.php
<?php session_start(); ?> <?php require ‘header.php’; ?> | ログイン時にセッションデータへ格納する顧客情報を利用するので冒頭で session_start関数を呼び出します。 |
<?php $name = $address = $login = $password=’ ‘; | 顧客名、住所、ログイン名、パスワードを保存する変数を用意して、空の文字列を代入しておきます。複数の変数に同じ値を代入する場合には、短く書けて便利です。 |
if (isset($_SESSION[‘customer’])){ | セッションデータに顧客情報が登録されているかどうか調べます。変数が定義されているかどうかをisset関数を使い調べます。 |
$name = $_SESSION[‘customer’][‘name’]; | 顧客情報が登録されていたら、セッションデータから顧客情報を読みだして、各変数に登録します。左記は顧客名の例です。 |
$address = $_SESSION[‘customer’][‘address’]; $login = $_SESSION[‘customer’][‘login’]; $password = $_SESSION[‘customer’][‘password’]; } | 各情報が登録されていたら各情報を読み出し、各変数に登録します。 |
echo ‘<form action=”customer-output.php” method=”post”>’; echo ‘<p>お名前</p>’; echo ‘<input type=”text” name=”name” value=”‘,$name,'”>’; echo ‘<p>住所</p>’; echo ‘<input type=”text” name=”address” value=”‘,$address,'”>’; echo ‘<p>ログイン名</p>’; echo ‘<input type=”text” name=”login” value=”‘,$login,'”>’; echo ‘<p>パスワード</p>’; echo ‘<input type=”password” name=”password” value=”‘,$password,'”>’; echo ‘<p><input type=”submit” value=”確定”></p>’; ‘</form>’; |
次に入力した顧客情報を、登録または更新する処理を行うプログラムを書きましょう
customer-output.php
<?php session_start(); ?> <?php require ‘header.php’; ?> <?php $pdo=new PDO(‘mysql:host=localhost;dbname=shop; charset=utf8′,’staff’,’password’); | 最初に、セッション開始とデータベースへの接続を行います。 |
if(isset($_SESSION[‘customer’])){ $id=$_SESSION[‘customer’][‘id’]; $sql=$pdo->prepare(‘select * from customer where id!=? and login=?’); | 指定されたログイン名が、すでに使われているかどうかを調べます。 この処理は、ログインしている場合と、ログインしていない場合で処理が違ってきます。 ログインしている場合には、同じログイン名を使っているユーザーを、赤文字のようなスクリプトで検索します。 !=は等しくないことを示す演算子です。 |
$sql->execute([$id, $_REQUEST[‘login’]]); }else { $sql=$pdo->prepare(‘select * from customer where login=?’); $sql->execute([$_REQUEST[‘login’]]); } | else文でログインしていない場合には、同じログイン名を使っているユーザーを調べます。 |
if(empty($sql->fetchALL())){ if(isset($_SESSION[‘customer’])){ | 検索結果が空ならば、ログイン名が重複している他のユーザーはいないということになります。 検索結果が空かどうかを調べるためここではempty関数を使っています。 引数に指定した変数や配列が空の時、empty関数はTRUEを返します。 |
$sql=$pdo->prepare(‘update customer set name=?, address=?, login=?, password=? where id=?’); | ?の部分に、顧客名、住所、ログイン名、パスワード、顧客番号を指定して実行します。 |
$sql->execute([ $_REQUEST[‘name’],$_REQUEST[‘address’], $_REQUEST[‘login’],$_REQUEST[‘password’],$id ]); | executeメソッドの引数には「?」部分に設定する値を、配列にして渡します。 |
$_SESSION[‘customer’]=[ ‘id’=>$id, ‘name’=>$_REQUEST[‘name’], ‘address’=>$_REQUEST[‘address’], ‘login’=>$_REQUEST[‘login’], ‘password’=>$_REQUEST[‘password’] ]; echo ‘情報を更新しました’; | データベースの更新を終えたら、セッションデータも最新情報に更新します。 各情報の列名をキーにして、配列を作成し、$_SESSION[‘customer’]に代入します。 |
}else { $sql=$pdo->prepare(‘insert into customer values(null,?,?,?,?)’); | ログインしていない場合には、このようなinsert文を使って、データベースに顧客情報を登録します。 |
$sql->execute([ $_REQUEST[‘name’], $_REQUEST[‘address’], $_REQUEST[‘login’], $_REQUEST[‘password’] ]); echo ‘情報を登録しました’; } }else{ echo ‘ログイン名がすでに登録されています。変更してください’; } ?> <?php require ‘footer.php’; ?> | execute文を使って?の部分に顧客名、住所、ログイン名、パスワードを指定して実行させます。 |
新規登録をしてみよう
確定を押すと次の画面が表示されます。
PHPMyadminから確認してみます。
shopデータベースのcustomoerテーブルに新規登録されたことが確認できました。
情報の更新
パスワードをaiueoから12345へと変更、更新してみます。
変更できていることが確認できました。