- 投稿日:2020-11-12T20:13:57+09:00
XAMPPで複数バージョンのPHPを切り替えてApache + MySQL を使う方法 on Windows
目標
XAMPPでPHP7.4.xとPHP5.6.xを切り替えてApacheとMySQL、phpMyAdminを使えるようにする
前提
PHPのバージョンが新しい方、もしくは古い方のどちらかでApacheとMySQLを稼働できていること作業
バージョンの異なるXAMPPファイルの入手
ここから欲しいバージョンのPHPが含まれている
XAMPPのzipファイルをダウンロードする。
PHP単体でなく、XAMPP全体をダウンロードするのはApacheやphpMyAdminがそれぞれのPHPバージョンに対応した設定になっているから。
今回の方法ではPHPのバージョンを切り替えた際、ApacheとphpMyAdminのファイルや設定もそれに対応したものにする。
特定のファイルを変更するわけじゃないため作業自体や変更自体は少ないが、少し容量に余裕が必要なことに注意。名前の変更
新しいバージョン、または古いバージョンが含まれた
XAMPPのzipファイルをダウンロードできたら、解凍し、以下の3つのフォルダをデスクトップなどにコピー。
- apache
- phpMyAdmin
- php
そして名前を
(ファイル名) (phpのメジャーバージョン).(phpのマイナーバージョン)に変更する。
もし、PHP5.6.xをダウンロードした場合、コピーしたフォルダは次の名前になる。
- apache5.6
- phpMyAdmin5.6
- php5.6
名前を変更したら、それらをコピーし、現在の
xamppフォルダに貼り付ける。その後、
xampp内のapache,phpMyAdmin,phpを貼り付けたのファイル達と同じ方法で名前を変更する。
既存のPHPバージョンが7.4.xだったら次のようになる。
- apache7.4
- phpMyAdmin7.4
- php7.4
config.inc.phpの移動
今まで使っていたバージョンの
phpMyAdminフォルダからconfig.inc.phpを新しく用意したバージョンのphpMyAdminにコピーして貼り付ける。
そうすることで、PHPのバージョンが違っても今までと同じようにphpMyAdminが使えるようになる。
新しく用意したバージョンのphpMyAdminのconfig.inc.phpはconfig.origin.inc.phpなどに名前を変えて残しておくと良いかもしれない。シンボリックリンクの作成
シンボリックリンクとはショートカットのようなもの。
php7.4からphpというシンボリックリンクを作成したら、システムや他のファイルはphpというシンボリックリンクを参照して、それに指定されたphp7.4がその中身となる。
正直、使うたびにphp7.4をphpに変更するような作業をすればいいが、手間なのでシンボリックリンクを作成する。今回は
PHPのバージョンが5.6のシンボリックリンクを作成する。
シンボリックリンクはコマンドプロントを開いて、それぞれ次のコマンドで実行できる。$ mklink /D c:\xampp\apache C:\xampp\apache5.6 $ mklink /D c:\xampp\phpMyAdmin C:\xampp\phpMyAdmin5.6 $ mklink /D c:\xampp\php C:\xampp\php5.6バッチファイル(スクリプト)の作成
「コマンドを毎回入力するよりも名前を毎回変えた方が楽じゃん」
それは否定しないが、コマンドの紹介をしたのは上記のコマンドを含めたバッチファイル(スクリプト)を作成すれば、もっと楽にできる。ということで、下記のようなバッチファイル(スクリプト)を作成し、
xampp下などの使いやすいところに置く。
使い方はエクスプローラーから直接実行するか、コマンドプロントからchange_php.batを置いたところまで移動し、change_php.batを実行する。change_php.bat@echo off echo. echo 使いたいPHPのバージョンを選択してください。 echo. echo 現在のPHPバージョン: echo. php -v echo. echo 1: PHP 5.6 echo 2: PHP 7.4 echo C: Cancel echo. choice /c 12C /M "使いたいPHPのバージョン." if %errorlevel% equ 1 goto PHP5_6 if %errorlevel% equ 2 goto PHP7_4 goto OnExit :PHP5_6 rmdir C:\xampp\apache mklink /D C:\xampp\apache C:\xampp\apache-5.6 rmdir C:\xampp\phpMyAdmin mklink /D C:\xampp\phpMyAdmin C:\xampp\phpMyAdmin-5.6 rmdir C:\xampp\php mklink /D C:\xampp\php C:\xampp\php-5.6 goto OnExit :PHP7_4 rmdir C:\xampp\apache mklink /D C:\xampp\apache C:\xampp\apache-7.4 rmdir C:\xampp\phpMyAdmin mklink /D C:\xampp\phpMyAdmin C:\xampp\phpMyAdmin-7.4 rmdir C:\xampp\php mklink /D C:\xampp\php C:\xampp\php-7.4 goto OnExit :OnExitコマンドプロントの文字コードが
ANSIなので、名前を付けて保存する際にANSIを指定しないと動作できなくなるので注意。
実際に動かすとこのようになる。動作確認
xamppフォルダのxampp-control.exeを開き、ApacheとMySQLのAdminボタンをクリックし、新しく用意したバージョンのPHPInfoで用意したバージョンのPHPになっているのとphpMyAdminに接続できればOK。参考資料
- 投稿日:2020-11-12T16:44:40+09:00
mysql 改行され続けて困った
vscodeでmysqlを操作していてひたすら改行され続けるので対処法
やったこと
mysqlからデータを選択しようとして、 ”一つの後にエンターを押した。すると、下記のようになった
mysql> コマンド "(ここで改行)
">
"> 何か打つ
"> 同じようになる上記の繰り返しになって焦った。
対処法
もう一度 " のみ入力
すると、
-> となった原因
"を入力すると閉じが必要
私は""のように閉じていなかったため、延々と入力待ち状態になっていた。
- 投稿日:2020-11-12T10:58:54+09:00
PHP+MySQL
PHP+MySQLを使用した基礎知識についてのまとめです。
PDO - MySQLに接続する
try catchを使って記述します。
フォルダの中に以下のファイルを用意。
index.php<!doctype html> <html lang="ja"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="css/style.css"> <title>PHP</title> </head> <body> <header> <h1 class="font-weight-normal">PHP</h1> </header> <main> <h2>Practice</h2> <pre> <?php //以下の記述でPHPからDBに接続できる。MAMPの場合、パスワードはrootになる。 try{ //new PDO(DBを扱う)でオブジェクトのインスタンスを作っている。 $db = new PDO ('mysql:dbname=mydb;host=127.0.0.1;port=8889;charset=utf8', 'root', 'root'); //接続できなければ$eという形で受け取り、それを画面に出力する。 }catch(PDOException $e){ echo 'DB接続エラー:' . $e->getMessage(); } ?> </pre> </main> </body> </html>exec - SQLを実行する
PHPからDBにSQLを発行する。
以下の記述でDBにデータを追加できる。index.php<!doctype html> <html lang="ja"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="css/style.css"> <title>PHP</title> </head> <body> <header> <h1 class="font-weight-normal">PHP</h1> </header> <main> <h2>Practice</h2> <pre> <?php try{ $db = new PDO ('mysql:dbname=mydb;host=127.0.0.1;port=8889;charset=utf8', 'root', 'root'); }catch(PDOException $e){ echo 'DB接続エラー:' . $e->getMessage(); } //以下の記述でmy_itemテーブルにデータを追加。 $count = $db->exec('INSERT INTO my_item SET maker_id=1,item_name="桃",price=210,keyword="缶詰,ピンク,甘い"'); //$countでデータの数を返す。 echo $count . '件のデータを挿入しました'; ?> </pre> </main> </body> </html>query - SELECT SQLを実行する
<!doctype html> <html lang="ja"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="css/style.css"> <title>PHP</title> </head> <body> <header> <h1 class="font-weight-normal">PHP</h1> </header> <main> <h2>Practice</h2> <pre> <?php //以下の記述でPHPからDBに接続できる。MAMPの場合、パスワードはrootになる。 try{ //new PDO(DBを扱う)でオブジェクトのインスタンスを作っている。 $db = new PDO ('mysql:dbname=mydb;host=127.0.0.1;port=8889;charset=utf8', 'root', 'root'); //接続できなければ$eという形で受け取り、それを画面に出力する。 }catch(PDOException $e){ echo 'DB接続エラー:' . $e->getMessage(); } //以下の記述でrecordsという変数の中にdbの内容が入っている。 $records=$db->query('SELECT * FROM my_item'); //while構文を使って取り出していく。1行ずつ取り出してそれを$recordに入れている。 while($record=$records->fetch()){ print($record['item_name']."\n"); } ?> </pre> </main> </body> </html>フォームからの情報を取得する
以下のように記載。
<!doctype html> <html lang="ja"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="css/style.css"> <title>PHP</title> </head> <body> <header> <h1 class="font-weight-normal">PHP</h1> </header> <main> <h2>Practice</h2> <pre> <?php try{ //PDOのはデータベースの種類や接続文字列などを入力する。 $db=new PDO('mysql:dbname=mydb;host=127.0.0.1;port=8889;charset=utf8', 'root', 'root'); $db->exec('INSERT INTO memos SET memo="'.$_POST['memo'].'",created_at=NOW()'); }catch(PDOException $e){ echo 'DB接続エラー:'.$e->getMessage(); } ?> </pre> </main> </body> </html>①input.htmlにアクセスしてメモに文字を入力。
②input_do.phpにアクセスして何も表示されなければデータは登録されている。
③文字接続エラーが出ればPDOの中身の記載が間違っている。しかし、上記のプログラムはまだ危険な状態なので安全に設定する必要がある。
//postの値がそのまま指定されているため、SQLが意図的に壊されてDBの中身を盗まれてします恐れがある。 $db->exec('INSERT INTO memos SET memo="'.$_POST['memo'].'",created_at=NOW()')それを解決するためにprepareメソッドを使う。
<!doctype html> <html lang="ja"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="css/style.css"> <title>PHP</title> </head> <body> <header> <h1 class="font-weight-normal">PHP</h1> </header> <main> <h2>Practice</h2> <pre> <?php try{ //PDOのはデータベースの種類や接続文字列などを入力する。 $db=new PDO('mysql:dbname=mydb;host=127.0.0.1;port=8889;charset=utf8', 'root', 'root'); //?をいれる。prepareでセキュリティ対策 $statement=$db->prepare('INSERT INTO memos SET memo=?,created_at=NOW()'); $statement->execute(array($_POST['memo'])); echo 'メッセージが登録されました'; }catch(PDOException $e){ echo 'DB接続エラー:'.$e->getMessage(); } ?> </pre> </main> </body> </html>データの一覧・詳細画面を作る
phpmyadiminを使わずに画面で見れるようにする。
ファイル名をmemo.phpとする。memo.php<!doctype html> <html lang="ja"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="../css/style.css"> <title>PHP</title> </head> <body> <header> <h1 class="font-weight-normal">PHP</h1> </header> <main> <h2>Practice</h2> <?php //以下の記述でPHPからDBに接続できる。MAMPの場合、パスワードはrootになる。 try{ //new PDO(DBを扱う)でオブジェクトのインスタンスを作っている。 $db = new PDO ('mysql:dbname=mydb;host=127.0.0.1;port=8889;charset=utf8', 'root', 'root'); //接続できなければ$eという形で受け取り、それを画面に出力する。 }catch(PDOException $e){ echo 'DB接続エラー:' . $e->getMessage(); } //以下の記述でmemosという変数の中idが1のdbの内容が入っている。 $memos = $db->query('SELECT * FROM memos WHERE id=1'); $memo = $memos->fetch(); ?> <article> <pre><?php print($memo['memo']);?></pre> <a href="index.php">戻る</a> </article> </main> </body> </html>一覧画面と詳細画面の連携
IDの部分を自由にしたい場合
<!doctype html> <html lang="ja"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="css/style.css"> <title>PHP</title> </head> <body> <header> <h1 class="font-weight-normal">PHP</h1> </header> <main> <h2>Practice</h2> <?php //以下の記述でPHPからDBに接続できる。MAMPの場合、パスワードはrootになる。 try{ //new PDO(DBを扱う)でオブジェクトのインスタンスを作っている。 $db = new PDO ('mysql:dbname=mydb;host=127.0.0.1;port=8889;charset=utf8', 'root', 'root'); //接続できなければ$eという形で受け取り、それを画面に出力する。 }catch(PDOException $e){ echo 'DB接続エラー:' . $e->getMessage(); } //以下の記述でrecordsという変数の中にdbの内容が入っている。 $memos = $db->query('SELECT * FROM memos ORDER BY id DESC'); ?> <article> <?php while ($memo = $memos->fetch()): ?> <!-- 以下の記載で表示する文字数を0~50字に設定。aタグに詳細ページのリンクを設定 --> <p><a href="memo.php?id=<?php print($memo['id']);?>"><?php print(mb_substr($memo['memo'],0,50)); ?></a></p> <time><?php print($memo['created_at']); ?></time> <hr> <?php endwhile; ?> </article> </main> </body> </html>しかし、今のままだとURLにID=何番 と表示されてしまうのでユーザーに自由に書き換えられてしまう。
以下の記述でマイナスなどの数字、数字以外の文字の場合はエラーが表示されるようにできる。
memo.php<!doctype html> <html lang="ja"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="css/style.css"> <title>PHP</title> </head> <body> <header> <h1 class="font-weight-normal">PHP</h1> </header> <main> <h2>Practice</h2> <?php //以下の記述でPHPからDBに接続できる。MAMPの場合、パスワードはrootになる。 try{ //new PDO(DBを扱う)でオブジェクトのインスタンスを作っている。 $db = new PDO ('mysql:dbname=mydb;host=127.0.0.1;port=8889;charset=utf8', 'root', 'root'); //接続できなければ$eという形で受け取り、それを画面に出力する。 }catch(PDOException $e){ echo 'DB接続エラー:' . $e->getMessage(); } //$idが数字以外が指定された時、if構文の内容が反映される。 $id=$_REQUEST['id']; if(!is_numeric($id) || $id<=0){ print('1以上の数字で指定してください'); exit(); } //prepareでセキュリティ対策 $memos = $db->prepare('SELECT * FROM memos WHERE id=?'); $memos->execute(array($_REQUEST['id'])); $memo = $memos->fetch(); ?> <article> <pre><?php print($memo['memo']);?></pre> <a href="index.php">戻る</a> </article> </main> </body> </html>接続プログラムを共通プログラムに
今のままなどデータが変わった後全部のファイルを書き換える必要性が出てくるのでそれをなくす。
requireを使って他のファイルを取り込む。
index.php<!doctype html> <html lang="ja"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="css/style.css"> <title>PHP</title> </head> <body> <header> <h1 class="font-weight-normal">PHP</h1> </header> <main> <h2>Practice</h2> <?php //以下の記述でdbconnect.phpファイルを読み込む。 require('dbconnect.php'); //以下の記述でrecordsという変数の中にdbの内容が入っている。 $memos = $db->query('SELECT * FROM memos ORDER BY id DESC'); ?> <article> <?php while ($memo = $memos->fetch()): ?> <!-- 以下の記載で表示する文字数を0~50字に設定。aタグに詳細ページのリンクを設定 --> <p><a href="memo.php?id=<?php print($memo['id']);?>"><?php print(mb_substr($memo['memo'],0,50)); ?></a></p> <time><?php print($memo['created_at']); ?></time> <hr> <?php endwhile; ?> </article> </main> </body> </html>input_do.php<!doctype html> <html lang="ja"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="css/style.css"> <title>PHP</title> </head> <body> <header> <h1 class="font-weight-normal">PHP</h1> </header> <main> <h2>Practice</h2> <pre> <?php require('dbconnect.php'); //?をいれる。prepareでセキュリティ対策 $statement=$db->prepare('INSERT INTO memos SET memo=?,created_at=NOW()'); $statement->execute(array($_POST['memo'])); echo 'メッセージが登録されました'; ?> </pre> </main> </body> </html>memo.php<!doctype html> <html lang="ja"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="css/style.css"> <title>PHP</title> </head> <body> <header> <h1 class="font-weight-normal">PHP</h1> </header> <main> <h2>Practice</h2> <?php require('dbconnect.php'); //$idが数字以外が指定された時、if構文の内容が反映される。 $id=$_REQUEST['id']; if(!is_numeric($id) || $id<=0){ print('1以上の数字で指定してください'); exit(); } //prepareでセキュリティ対策 $memos = $db->prepare('SELECT * FROM memos WHERE id=?'); $memos->execute(array($_REQUEST['id'])); $memo = $memos->fetch(); ?> <article> <pre><?php print($memo['memo']);?></pre> <a href="index.php">戻る</a> </article> </main> </body> </html>ページネーション
以下の記述でページが指定されなかった場合も1ページ目が自動で表示される。
memo.php<!doctype html> <html lang="ja"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="css/style.css"> <title>PHP</title> </head> <body> <header> <h1 class="font-weight-normal">PHP</h1> </header> <main> <h2>Practice</h2> <?php //以下の記述でdbconnect.phpファイルを読み込む。 require('dbconnect.php'); if(isset($_REQUEST['page']) && is_numeric($_REQUEST['page'])){ $page=$_REQUEST['page']; }else{ $page=1; } $start=5*($page-1); //LIMIT区を使って件数を表示できる。 $memos = $db->prepare('SELECT * FROM memos ORDER BY id DESC LIMIT ?,5'); //数字でパラメータを渡すことができるようになる。 $memos->bindParam(1,$start,PDO::PARAM_INT); $memos->execute(); ?> <article> <?php while ($memo = $memos->fetch()): ?> <!-- 以下の記載で表示する文字数を0~50字に設定。aタグに詳細ページのリンクを設定 --> <p><a href="memo.php?id=<?php print($memo['id']);?>"><?php print(mb_substr($memo['memo'],0,50)); ?></a></p> <time><?php print($memo['created_at']); ?></time> <hr> <?php endwhile; ?> </article> </main> </body> </html>リンクで前のページや次のページに行けるようにする
<!doctype html> <html lang="ja"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="css/style.css"> <title>PHP</title> </head> <body> <header> <h1 class="font-weight-normal">PHP</h1> </header> <main> <h2>Practice</h2> <?php //以下の記述でdbconnect.phpファイルを読み込む。 require('dbconnect.php'); if(isset($_REQUEST['page']) && is_numeric($_REQUEST['page'])){ $page=$_REQUEST['page']; }else{ $page=1; } $start=5*($page-1); //LIMIT区を使って件数を表示できる。 $memos = $db->prepare('SELECT * FROM memos ORDER BY id DESC LIMIT ?,5'); //数字でパラメータを渡すことができるようになる。 $memos->bindParam(1,$start,PDO::PARAM_INT); $memos->execute(); ?> <article> <?php while ($memo = $memos->fetch()): ?> <!-- 以下の記載で表示する文字数を0~50字に設定。aタグに詳細ページのリンクを設定 --> <p><a href="memo.php?id=<?php print($memo['id']);?>"><?php print(mb_substr($memo['memo'],0,50)); ?></a></p> <time><?php print($memo['created_at']); ?></time> <hr> <?php endwhile; ?> <!-- 2ページ以上の時表示 --> <?php if($page>=2):?> <a href="index.php?page=<?php print($page-1);?>"><?php print($page-1);?>ページ目へ</a> <?php endif; ?> | <a href="index.php?page=<?php print($page+1);?>"><?php print($page+1);?>ページ目へ</a> </article> </main> </body> </html>件数の多いレコードをページを分ける
余分なページを表示しなくて済む
index.php<!doctype html> <html lang="ja"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="css/style.css"> <title>PHP</title> </head> <body> <header> <h1 class="font-weight-normal">PHP</h1> </header> <main> <h2>Practice</h2> <?php //以下の記述でdbconnect.phpファイルを読み込む。 require('dbconnect.php'); if(isset($_REQUEST['page']) && is_numeric($_REQUEST['page'])){ $page=$_REQUEST['page']; }else{ $page=1; } $start=5*($page-1); //LIMIT区を使って件数を表示できる。 $memos = $db->prepare('SELECT * FROM memos ORDER BY id DESC LIMIT ?,5'); //数字でパラメータを渡すことができるようになる。 $memos->bindParam(1,$start,PDO::PARAM_INT); $memos->execute(); ?> <article> <?php while ($memo = $memos->fetch()): ?> <!-- 以下の記載で表示する文字数を0~50字に設定。aタグに詳細ページのリンクを設定 --> <p><a href="memo.php?id=<?php print($memo['id']);?>"><?php print(mb_substr($memo['memo'],0,50)); ?></a></p> <time><?php print($memo['created_at']); ?></time> <hr> <?php endwhile; ?> <!-- 2ページ以上の時表示 --> <?php if($page>=2):?> <a href="index.php?page=<?php print($page-1);?>"><?php print($page-1);?>ページ目へ</a> <?php endif; ?> <?php $counts=$db->query('SELECT count(*) as cnt FROM memos'); $count=$counts->fetch(); $max_page=ceil($count['cnt']/5); if($page < $max_page): ?> | <a href="index.php?page=<?php print($page+1);?>"> <?php print($page+1);?>ページ目へ</a> <?php endif; ?> </article> </main> </body> </html>メモを編集、変更する
update.php<?php require('dbconnect.php');?> <!doctype html> <html lang="ja"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="css/style.css"> <title>PHP</title> </head> <body> <header> <h1 class="font-weight-normal">PHP</h1> </header> <main> <h2>Practice</h2> <?php if(isset($_REQUEST['id'])&& is_numeric($_REQUEST['id'])){ $id=$_REQUEST['id']; $memos=$db->prepare('SELECT * FROM memos WHERE id=?'); $memos->execute(array($id)); $memo=$memos->fetch(); } ?> <form action="update_do.php" method="post"> <!-- 以下の記述でデータを編集画面に渡す。 --> <input type="hidden" name="id" value="<?php print($id);?>"> <textarea name="memo" cols="50" rows="10"><?php print($memo['memo']);?></textarea><br> <button type="submit">登録する</button> </form> </main> </body> </html>update_do.php<!doctype html> <html lang="ja"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="css/style.css"> <title>PHP</title> </head> <body> <header> <h1 class="font-weight-normal">PHP</h1> </header> <main> <h2>Practice</h2> <pre> <?php require('dbconnect.php'); $statement=$db->prepare('UPDATE memos SET memo=? WHERE id=?'); $statement->execute(array($_POST['memo'],$_POST['id'])); ?> </pre> <p>メモの内容を変更しました</p> <p><a href="index.php">戻る</a></p> </main> </body> </html>memo.php<!doctype html> <html lang="ja"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="css/style.css"> <title>PHP</title> </head> <body> <header> <h1 class="font-weight-normal">PHP</h1> </header> <main> <h2>Practice</h2> <?php require('dbconnect.php'); //$idが数字以外が指定された時、if構文の内容が反映される。 $id=$_REQUEST['id']; if(!is_numeric($id) || $id<=0){ print('1以上の数字で指定してください'); exit(); } //prepareでセキュリティ対策 $memos = $db->prepare('SELECT * FROM memos WHERE id=?'); $memos->execute(array($_REQUEST['id'])); $memo = $memos->fetch(); ?> <article> <pre><?php print($memo['memo']);?></pre> <a href="update.php?id=<?php print($memo['id']);?>">編集する</a> | <a href="index.php">戻る</a> </article> </main> </body> </html>削除機能
delete.phpを作成
delete.php<!doctype html> <html lang="ja"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="css/style.css"> <title>PHP</title> </head> <body> <header> <h1 class="font-weight-normal">PHP</h1> </header> <main> <h2>Practice</h2> <pre> <?php require('dbconnect.php'); if(isset($_REQUEST['id']) && is_numeric($_REQUEST['id'])){ $id=$_REQUEST['id']; $statement=$db->prepare('DELETE FROM memos WHERE id=?'); $statement->execute(array($id)); } ?> </pre> <p>メモを削除しました。</p> <p><a href="index.php">戻る</a></p> </main> </body> </html>memo.php<!doctype html> <html lang="ja"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="css/style.css"> <title>PHP</title> </head> <body> <header> <h1 class="font-weight-normal">PHP</h1> </header> <main> <h2>Practice</h2> <?php require('dbconnect.php'); //$idが数字以外が指定された時、if構文の内容が反映される。 $id=$_REQUEST['id']; if(!is_numeric($id) || $id<=0){ print('1以上の数字で指定してください'); exit(); } //prepareでセキュリティ対策 $memos = $db->prepare('SELECT * FROM memos WHERE id=?'); $memos->execute(array($_REQUEST['id'])); $memo = $memos->fetch(); ?> <article> <pre><?php print($memo['memo']);?></pre> <a href="update.php?id=<?php print($memo['id']);?>">編集する</a> | <a href="delete.php?id=<?php print($memo['id']);?>">削除する</a> | <a href="index.php">戻る</a> </article> </main> </body> </html>





