phpとSQLを連動させたページビューカウンターを作りました
これでよくある「人気のあるページ順に表示」ができるようになります。
今回使用したのは$_COOKIEという関数です。種類としてはスーパーグローバル関数なので、表記に注意する必要があります。
まず、ページURLからdatabaseのIDを検索し、該当のdataを呼び出します。
もしCOOKIEがsetされていない場合は、
if(!isset($_COOKIE['name'])){
setcookie("name","value",time()+x); ...
とし、加えて
$呼び出したdata['pageview'] = $呼び出したdata['pageview+1'];
として閲覧数に1を追加します。
SQL構文でUPDATEを用いて、新しい閲覧数を挿入します。
これでページの閲覧数をカウントできるようになりました。
cookieで確認しているため、該当のcookieを削除しない限りは、指定したx秒以内にページを更新しても閲覧数は増加しません。
停電でデータが飛んだ後ですが、解決してよかったです。
-----
それはそうと、今月のPVが100を越えたそうです。
毎日数人程度に見ていただけているようですが、先日は30人近い方々に閲覧していただけたようです。
ほそぼそと開発していますが、何卒よろしくお願いします。
----------
webからの新規登録は募集していませんが、αtester随時募集中です。
少しでも気になる方は是非ご連絡ください / @pharmacist753
今日の進捗 登録済処方の修正
10時間以上戦っていました。
原因は"="が1文字足りないだけだったり、phpでできることをjavascriptでやっていたり…。
まずはrpupdate.phpの接続権限です。
これはlogin時のidを保持したまま、処方データの作成者と照らし合わせます。
処方閲覧時は閲覧の可否をdatabaseから照合しましたが、それだと他人のデータまでいじることが可能になってしまいます。
mypage.phpが表示したrpupdate用の?id=xxxを読み込み、閲覧時とどうようにid番号から処方dataを取得します。
表示は処方入力時と同様のUIとして、空欄には登録時のdataを表示させます。
value="<?php echo htmlspecialchars(元データ,~~)?>"という感じですが、このままだと、処方入力をして確認時にrewriteから修正したい場合に表示がされません。ここは後ほど修正する予定です。
処方入力phpが設定できたところで、次は入力内容の確認用phpを用意する必要があります。ひとつはblankチェックと、もう一つは入力内容の配列への格納です。
これはrequireからphpを呼び出し、headerで$errorが存在しない時のみ転送するようになっています。
その後はチェック用php画面に飛び、処方修正画面で取得した処方idを$_POSTから$_SESSIONに格納してSQL構文で検索します。
UPDATE xxx SET any="%s" WHERE id="%d',mysqli_real_escape_string(~~、~~)とかそんな感じです。
たった1つの機能。3つのphpファイルで10時間近く費やしましたが、これで機能性はグンと上がりました。
あとは様々な方にテスターとして使用感などを報告していただければ嬉しいのですが…。まだまだ知名度の問題がありそうです。
個別に声をかけて少しずつ…ですかね。
----------
webからの新規登録は募集していませんが、αtester随時募集中です。
少しでも気になる方は是非ご連絡ください / @pharmacist753
進捗 処方入力を10項目に増やしました
完全に忘れていましたが、処方入力欄を10項目に増やしました。
5項目で満足して忘れていました…。
Rpにつき、10品目というのはなかなかありませんが、6,7品目というのはたまにありますよね。
特に1日1回の薬、朝食後なんかだとまとめて飲むようにRp.1に8種類くらい書いてあることもたまにあります。
入力は一部をいじるだけで全て連携して対応するように設定しておいていたので非常に楽でした。昔の自分よくやったと言いたいです。表示の方も同様にjavascriptをいじって修正。
それと今までは空欄で入力されていた部分は改行扱いになってしまい、非常に見にくい状態でした。
-----
Rp.1
アスベリン錠 3錠
ムコダイン錠 3錠
(ここが無駄な空白改行①)
(ここが無駄な空白改行②)
(ここが無駄な空白改行③)
-----
と表示されてしまっていたので、if構文を使って非表示に設定しました。
if (薬[0] == 0) { document.write(""); } else { document.write(薬[0]," ",用量[0],"<br>"); }
という感じです。javascriptのif構文はtrueとfaultを1と0で返すので、このような表記になるそうです(勉強不足)。
こうすることによって、入力されていない空欄部分は非表示になりますので、
-----
Rp.1
アスベリン錠 3錠
ムコダイン錠 3錠
-----
と表示されるようになります。
ついでに入力画面で自由コメント欄がスクロールに追従するようにしました。これはcssでpositionをいじっただけですが、なかなか面倒でした…。
----------
webからの新規登録は募集していませんが、αtester随時募集中です。
少しでも気になる方は是非ご連絡ください / @pharmacist753
web版αテスト開始です。
ようやくweb版の形が出来てきました。
まだまだ完成には遠いですが、頑張っていきたいです。
今回はjavascriptも兼ねた、データベースから呼び出した文字列の表記についてです。
SQLでは立て列をフィールド(列)、横列をレコード(行)と呼びます。
databaseに医薬品名を複数登録する際は、それぞれのカラムに医薬品を登録する方法は、
例)
|医薬品1 |医薬品2 |医薬品3 |
という方法がありますが、これでは登録医薬品数が膨大になった場合に、フィールドが非常に多くなってしまいます。
新たに入力をする場合にも、修正をする場合にも膨大な量となってしまいます。
ですので、
|医薬品 |
と、特定の文字で区切ってしまう方法があります。
PHPでは連想配列を結合して、特定の文字を入れ替えることができます。
inputの際に薬を配列[]と設定することによって薬[0]~薬[x]までを配列に保管できます。
連想配列を用いて、
$_SESSION['入力した内容全て']['薬'] = implode(":",$_SESSION['入力した内容全て']['薬'])
としてしまえば、入力した薬は配列で区切られ末尾に":"が付与されます。
結果として
薬1:薬2:薬3:
の状態でdatabaseに保存されます。
入力時には":”を付与し、表示時には":"を検索し、その部分で再度切り取ってしまえばいいわけです。
表示の際はjavascriptのsplitという関数で可能です。
var 薬 = "<php echo htmlspecialchars($呼び出した配列[医薬品]);".split(":");
とすることによって、":"の部分で切り取られて配列に組み込まれます。
document.write(薬[0])
document.write(薬[1])...
とすることによって、医薬品名がそれぞれ切り離された状態で表示されます。
今回はそんな難しい話でした。
----------
webからの新規登録は募集していませんが、αtester随時募集中です。
連絡はこちらまで / @pharmacist753
今日の進捗 メールフォーム作りました
PHPでメールフォームを作りました。
なかなかにややこしかったですが、自分で作った処方例登録フォームを参考に作りました。
3つのphpファイルを作成しました。
mailform.php
check.php
mailcheck.php
とします。
mailform.phpでinputタグに登録してpost。
受け取った内容をcheck.phpで判別し、sessionを開始。
blankでなければmailcheck.phpに飛ばし、
確認画面を表示。input submitで、phpからmb_send_mailでメールを送信します。
現状、下の画像のような状態です。デザイン性は今のところ皆無です。
裏で色々と動かしているので、デザインに関してはは最後になりそうです…。
webからの新規登録は募集していませんが、βtester募集中です。
連絡はこちら / twitter:@pharmacist753
進捗 9/9
煮詰まってました。
というのも、どうにもINSERT(入力データをdatabaseに書き込む)構文でSQLエラーが出て進まない。
どこをどうSQL構文を修正しても直らない。
いや、なるほど。と。閲覧の可否をid=showで登録してたのが悪かったみたいです。
そりゃそうだ。SQL構文そのものにSHOW構文があるんだもの。そりゃエラーが出る。
いや、ここで煮詰まって早数週間。他のところを修正したり開発していましたが、これは本当に盲点だった。初心者がハマりやすい罠かもしれない。
また一つ賢くなった(と思う)。
というわけで、パラメータに閲覧の可否を付与しました。
閲覧可能なデータ(処方)は表示されますが、閲覧不可になっているデータは表示されません。また、検索からも除外されます。
一次保存や、自分用のデータとして使用できるかなと思います。
----------
webからの新規登録は募集していませんが、βtester募集中です。
連絡はこちら / @pharmacist753
web版
今まではXAMPPでサーバー立ててやっていたのですが、今はwebで公開(URLは公開してません)しているので、こんな感じになっています。
----------
webからの新規登録は募集していませんが、βtester募集中です。
連絡はこちら / @pharmacist753