FC2ブログ

編集結果をデータベースに格納する処理を実装

編集結果をデータベースに格納する処理を実装

#20 データの編集をしてみよう (3)
http://dotinstall.com/lessons/contacts_php_v2/9820
を元に
編集結果をデータベースに格納する処理を実装

admin/edit.php で
名前が表示されていないので
HTMLのソースの部分で
お名前の input 要素の value の値に

を追加して
入力した名前を表示できるようにする

これで、動作確認

http://192.168.10.155/contacts_php/admin/edit.php?id=
の後ろに数値以外を入力したり
ありえない数値で
ちゃんとエラーがでれば成功

次にDBの更新処理

これは
if(empty($error)){
の中に追記する

まずSQLを変数へ格納
$sql ="update entries set
name = :name,
email = :email,
memo = :memo,
moodified = :now(),
where id = :id";

$stmt = dbh->prepare($sql);
$params = array(
":name"=>$name,
":email"=>$email,
";memo"=>$memo,
);

$stmt->execute($params);

とする

動作確認は
#21 データの編集をしてみよう (4)
http://dotinstall.com/lessons/contacts_php_v2/9821
を元に行う

ここではデバッグ方法も紹介されている

このままだと動かない
理由は
:name
:email
:memo
:id
だったけど
:id の処理がなかったのが原因

これでも、エラーが特定できない場合
一度中身を
var_dump() で確認する
エラー情報は errorInfo() で取得できる
 
errorInfo() に関しては
http://php.net/manual/ja/pdo.errorinfo.php
を参照

ということで
$stmt->execute($params);
の下に
var_dump($stmt->errorInfo());
exit;
を追記し
エラー内容を取得して表示し
終了するようにする

これで、習性場所を把握し
修正することで編集ができるようになる
スポンサーサイト



テーマ : プログラミング
ジャンル : コンピュータ

GETで渡されたIDのチェックtと表示するデータ取得

GETで渡されたIDのチェックtと表示するデータ取得

#19 データの編集をしてみよう (2)
http://dotinstall.com/lessons/contacts_php_v2/9819
を参考に
GETで渡されたIDのチェックを行い、表示するデータを取得

まずGETで渡された値がただしいか
正規表現を使ってチェック
これは
preg_match() という関数でできる
解説は
http://phpspot.net/php/man/php/function.preg-match.html
を参考

今回は、GETで渡された id をパターンで調べるので
if(preg_match('/^[1-9][0-9]*$/' $_GET['id'])){

}
となる

パターンの正規表現の意味は

1から始まる数字の連番
^[1-9][0-9]*$
これで1桁目が1~9、そして、そのあとは
0~9の繰り返しとなる
^は1行め
$は行末
*は、0回以上の繰り返し
という意味

正規表現については
PHP正規表現チェッカー ver1.0.3
http://www.rider-n.sakura.ne.jp/regexp/regexp.php
を参考に


preg_match() で指定したパターンにあっているなら
$id にGETで渡されたIDを格納するので
$id =(int)$_GET['id'];
とする

もし、条件を満たしていないのなら
echo "不正な」IDです";
exit;
として終了するようにする

これで、GETの判定はできたので
DB接続関連

setToken();
の下あたりに追記

$stmt = $dbh->prepare("select * from entries where id= :id limit 1");

$stmt->execute(array(":id"=>$id));

$entry = $stmt->fetch() or die("no one found ");

or die("no one found ");は失敗したときの処理

次に、DBの中身を格納する変数を用意

$name = $entry['name'];
$email =$entry['email'];
$memo = $entry['memo'];

テーマ : プログラミング
ジャンル : コンピュータ

データ削除フラグによる削除の実装

データ削除フラグによる削除の実装

#17 データを削除してみよう (3)
http://dotinstall.com/lessons/contacts_php_v2/9817
を元に

削除をおした時に、件数が反映されていないので
これを修正する

これを実装するには
span 要素に id="num" というように id を振ってコントロールできるようにする

<p><span><?php echo count($entries); ?></span>件あります。</p>

<p><span id="num"><?php echo count($entries); ?></span>件あります。</p>
と変更する

次に、jQuery 部分のソース変更
confirm() の if のところで
var num = $('#num').text();

.text() は、中身の取得をする関数

そして、
num--;
とすれば、件数を引くことができる

計算はできているけど、これだけでは
表示している件数は変わらない
変更するには
$('#num').text(num);
というように
.text() に num をセットすれば変更が反映される

とりあえず、ここまでできたら、動作確認

Google Chrome で

developer console を起動して、エラーなしを確認

これで、実際に行ってみると、削除すると件数が変わるのを体験できる

テーマ : プログラミング
ジャンル : コンピュータ

jQueryとAjaxを使ってデータの削除処理を実装

jQueryとAjaxを使ってデータの削除処理を実装

#15 データを削除してみよう (1)
http://dotinstall.com/lessons/contacts_php_v2/9815
を元に
jQueryとAjaxを使ってデータの削除処理を実装

編集するファイルは
admin/index.php

まず、jQuery を使うので、ライブラリの読み込み

HTMLの head 要素の中に
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
を追記

deletelink に対してクリックされたときの処理を
jQuery で実装する

書き込み場所は
お問い合わせフォームへのリンクの下あたり

$(function(){
$('.deletelink').click('function(){
if(confirm("削除してもよろしいですか?")){
$.post('./delete.php',


.deletelink は
class="deletelink" という意味
. は jQuery ではクラスを意味する

confirm() は java script で 確認ウインドウを開く
""の中に書いた
削除してもよろしいですか?は
そのときにでるメッセージ

これは
Step.17 - 確認ウィンドウで問い合わせる
http://www.red.oit-net.jp/tatsuya/java/confirm.htm
がわかりやすい

$.post() は
ajax jQuery を使ったPOST送信
これを使うと、複雑な$.ajax() を使わずに
サーバーと通信できる
http://semooh.jp/jquery/api/ajax/jQuery.post/+url,+data,+callback,+type+/
を参考にするとわかりやすい

書式としては
$.post(url, data, callback, type)
となる

$.post(
'./delete.php',
{ id: $(this).data('id')},
function(rs){
$('#entry_' +rs).fadeOut(800);
});
}
});


コールバック関数で消したいのは li 要素なので
li要素に id をつける

<li id="entry_<?php echo h($entry['id']); ?>">
とする
PHPで 呼び出しているので
ループしている間、自動的に id を付与してくれる

また、コールバック関数内で
rsに id が入るようになるので
entry_ + rs だと
id=1 なら entry_1 となる

テーマ : プログラミング
ジャンル : コンピュータ

削除フラグ設定

削除フラグ設定

#14 削除フラグを設定しよう
http://dotinstall.com/lessons/contacts_php_v2/9814
を参考に、削除フラグで管理できるようにDB設定を変更

今までは、DBのレコードから直接削除だったけど
今回は削除フラグを立てて、
そこから削除するようにしていく

初期のDB設計のときに設定が抜けているため
DBの設定を変更する

DBの変更には alter コマンドを使う

alter table entries add status enum('active','deleted') default 'active' after memo;

このSQLを実行することで
テーブルに追加される

after memo となっているので
memo の後ろに追加される
default 'active' となっているので普通に挿入したら
active 扱いになる

mysql -u root -p でログインすると
DB移動が面倒なので

mysql -u dbuser -p dotinstall_contacts_php
として
dbuser のパスワードを入れれば
一回で今使っているDBにログインできる

まずは、この状態を確認するため、
desc entries;
で現状を確認

そして
今回の alter コマンドを実行

desc entries;
で確認すると
新しい項目ができているのが確認できる

DB設計の変更ができたら、管理画面である
admin/index.php も変更する

$sql のところのSQL文を
select * from entries where status = 'active' order by created desc
として、active 状態のものだけ表示するようにする

こうすることで
削除をえらんだ時に
レコードを抹消するのではなく、
status を active から deleted に変更するというようになる

おそらく、このフラグをつくるというのは
ゲーム作成などでも使えると思うので、今後の参考にしようと思う

テーマ : プログラミング
ジャンル : コンピュータ

最新記事
検索フォーム
GREEハコニワ攻略サイト
リンク
カテゴリ
月別アーカイブ
フリーエリア
最新記事
FXプライムレート
最新コメント
最新トラックバック