PHP에서 데이터베이스를 사용해 보는 비망록

18875 단어 HTMLMySQLPHP비망록

소개



LAMP 환경을 정돈해 PHP 사용해 두면서 PHP내에서의 데이타베이스의 사용법을 모르기 때문에, 잊지 않게 정리해 둡니다.

간단한 스태프의 추가 페이지 같은 무언가와 스탭 일람 페이지 같은 것을 만들면서 간단하게 정리해 둡니다.

준비



phpMyAdmin을 사용하여 데이터베이스에 간단한 직원 관리를 가정하는 테이블을 만듭니다.
컬럼은 3개로 「code,name.password」의 컬럼을 만듭니다. 이 중 코드를 기본 키로 만듭니다.
데이터 등은 아래 이미지를 참조하십시오.


만들어 보자



직원 추가 페이지



우선 직원 추가 페이지를 만듭니다.
스탭명과 패스워드·확인용 패스워드를 입력하는 란을 HTML로 준비합니다.

staff_add.html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    スタッフ追加<br/>
    <br/>
    <form method="post" action="add_confirm.php">
        スタッフ名を入力してください<br/>
        <input type="text" name="name" style="width:200px"><br/>
        パスワードを入力してください<br/>
        <input type="password" name="pass" style="width:100px"><br/>
        パスワードをもう一度入力してください<br/>
        <input type="password" name="pass2" style="width:100px"><br/>
        <br/>
        <input type="submit" value="登録">
    </form>
</body>.
</html>



여기까지는 괜찮아…
문제의 데이터베이스는 다음부터…

데이터베이스에 연결



여러 번 데이터베이스 연결 코드를 작성하는 것이 번거롭기 때문에 사용을 위해 함수를 포함하는 php 파일을 만듭니다.

connect.php
<?php
// データベースに接続
function connectDB() {
    $dsn = 'mysql:dbname=データベース名;host=localhost;charset=utf8'; //データベース名とホスト名
    $user='root';   //データベースのユーザー名
    $password='****';    //データベースのパスワード
    try {
        $dbh = new PDO($dsn, $user,$password);
        $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
        return $dbh;

    } catch (PDOException $e) {         //  データベースに接続出来なかった場合の処理
        print'エラー';      //  エラーメッセージを表示して終了
        exit();
    }
}
?>


PDO 개체를 사용하여 데이터베이스에 연결합니다.
사용법은 여기 (PDO를 사용한 PHP에서의 데이터베이스 기본 조작)를 참고로 했습니다.

입력 데이터 확인



직원 추가 페이지의 staff_add.html에서 입력한 직원 이름과 비밀번호 확인 페이지를 만듭니다.
스탭명의 미입력이나 패스워드와 확인용 패스워드가 일치하지 않는 경우의 처리도 만들어 갑니다.

add_confirm.php
<?php


    //staff_add.htmlからデータ受取
    $staff_name=$_POST['name'];
    $staff_password=$_POST['pass'];
    $staff_password2=$_POST['pass2'];

    //エスケープ処理
    $staff_name=htmlspecialchars($staff_name,ENT_QUOTES,'UTF-8');
    $staff_password=htmlspecialchars($staff_password,ENT_QUOTES,'UTF-8');
    $staff_password2=htmlspecialchars($staff_password2,ENT_QUOTES,'UTF-8');

    //以下、入力内容確認処理

    if($staff_name==''){
        print'スタッフ名が入力されていません。<br/>';
    }else{
        print'スタッフ名:';
        print $staff_name;
        print'<br/>';
    }

    if($staff_password!=$staff_password2){
        print'パスワードが一致しません。<br/>';

    }

    if($staff_name==''||$staff_password==''||$staff_password!=$staff_password2){
        //入力内容に問題があれば戻るボタンのみ表示
        ?>
        <form>
          <input type="button" onclick="history.back()" value="戻る">
        </form>
        <?php
    }else{
        //MD5方式でパスワードをハッシュ化
        $staff_password=md5($staff_password);
        ?>
        <form method="post" action="add_done.php">
          <input type="hidden" name="name" value="<?php print $staff_name;?>">
          <input type="hidden" name="pass" value="<?php print $staff_password;?>"><br/>
          <input type="button" onclick="history.back()" value="戻る">
          <input type="submit" value="登録">
        <form>
        <?php

    }
?>


이스케이프 처리에 대해서는 이하를 참고로 했습니다.
· PHP에서 이스케이프가 필요한 시간과 방법을 최단 이해!
· "왜 HTMLspecialchars를 통과하는가?"를 한마디로 부디

데이터베이스에 레코드 추가



다음은 이전 화면에서 확인한 스태프 이름과 해시화된 비밀번호를 받아 데이터베이스에 추가하는 처리를 만듭니다.

add_done.php
<?php

require_once 'connect.php';
$dbh = connectDB();

try {

    $staff_name=$_POST['name'];
    $staff_password=$_POST['pass'];
    //エスケープ処理
    $staff_name=htmlspecialchars($staff_name,ENT_QUOTES,'UTF-8');
    $staff_password=htmlspecialchars($staff_password,ENT_QUOTES,'UTF-8');

    $sql='INSERT INTO テーブル名(name,password) VALUES (?,?)';   //SQL命令文 入れたいデータは「?」
    $stmt=$dbh->prepare($sql);    //準備する命令
    $data[]=$staff_name;          //「?」にセットしたいデータを順番に書き出し
    $data[]=$staff_password;
    $stmt->execute($data);        //クエリの実行

    $dbh=null;      //データベース切断

    print $staff_name;
    print 'さんを追加しました。<br/>';

}catch(Exception $e){
    print'エラー';
    exit();
}

?>
<a href="staff_list.php">戻る</a>


이제 어딘가 실수하지 않으면 데이터베이스에 사용자 이름과 암호 레코드가 추가되었을 것입니다.
(password에는 「test」를 해시화한 것이 들어 있습니다)


직원 목록



모처럼이므로 데이터베이스에 추가한 스탭의 일람을 표시시키는 페이지도 만듭니다.

staff_list.php
<?php
require_once 'connect.php';
$dbh = connectDB();

try{
    $sql='SELECT name FROM テーブル名 WHERE 1'; 
    $stmt=$dbh->prepare($sql);
    $stmt->execute();

    $dbh=null;

    print'スタッフ一覧<br/>';
    while(true){
        $rec=$stmt->fetch(PDO::FETCH_ASSOC);
        if($rec==false){
            break;
        }
        print $rec['name'];
        print '<br/>';
    }

}catch(Exception $e){
    print 'エラー';
    exit();
}

?>
<br/>
<input type="button" onclick="location.href='./staff_add.html'" value="スタッフ追加">

마지막으로, 처음 만든 스태프 추가 페이지로 날아가는 스태프 추가 버튼도 붙여 둡니다.


할 수 있었다. 추가라고 표시 밖에 하지 않았지만 우선 할 수 있었다.

좋은 웹페이지 즐겨찾기