薬剤師のプログラミング備忘録

変人薬剤師の独り言

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随時募集中です。

連絡はこちらまで /  @

 

f:id:MC753:20170914025520g:plain

f:id:MC753:20170914025526g:plain

f:id:MC753:20170914025538g:plainf:id:MC753:20170914025532g:plain

今日の進捗 メールフォーム作りました

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:@

 

f:id:MC753:20170911222633g:plain

進捗 9/9

煮詰まってました。

というのも、どうにもINSERT(入力データをdatabaseに書き込む)構文でSQLエラーが出て進まない。

どこをどうSQL構文を修正しても直らない。

いや、なるほど。と。閲覧の可否をid=showで登録してたのが悪かったみたいです。

そりゃそうだ。SQL構文そのものにSHOW構文があるんだもの。そりゃエラーが出る。

いや、ここで煮詰まって早数週間。他のところを修正したり開発していましたが、これは本当に盲点だった。初心者がハマりやすい罠かもしれない。

また一つ賢くなった(と思う)。

 

というわけで、パラメータに閲覧の可否を付与しました。

閲覧可能なデータ(処方)は表示されますが、閲覧不可になっているデータは表示されません。また、検索からも除外されます。

一次保存や、自分用のデータとして使用できるかなと思います。

 

----------

webからの新規登録は募集していませんが、βtester募集中です。

連絡はこちら /  @

web版

今まではXAMPPでサーバー立ててやっていたのですが、今はwebで公開(URLは公開してません)しているので、こんな感じになっています。

 

----------

webからの新規登録は募集していませんが、βtester募集中です。

連絡はこちら /  @

 

f:id:MC753:20170903200323g:plain

更新が滞っていてすいません

いろいろと修正している部分はあるものの、現在は既にwebにupしているため、なかなか公開できません。

webデザインというのは非常に重要ですね。

βtestから始めようと思いますので、現段階で興味のある方はTwitterでリプライかDMでご連絡いただければと思います。

紹介用のスライドなんかも作っておけば、わかりやすいのかなーとも思いますが、なかなか手を付けられず。頑張ります。

 

@

 

暫く更新していませんでした。

今回はパスワードの再設定についてです。

元々、パスワードはハッシュ化(暗号化)されてdatabaseに保存されますので、管理者側からもその内容はわからないようになっています。

つまり、パスワードは管理者がdatabase経由で直接書き換えても意味が無いということです。

例えば、

id:test_san

PASS:test_pass

だった場合には、databaseへの登録内容は、

 

id:test_san

PASS:$5y$50$gagfglN4VHmuUDify/q/PjOoeUJBsNS2bKpAPOkeiuaIOkoi(適当)

 

として登録されます。AさんとBさんが同一のパスワードだったとしても、この暗号化された内容は異なるようになっています。

一部のハッシュアルゴリズムは解析可能(と言っても、高性能パソコンで長い時間をかけて)です。

 

パスワードに使える文字種 = 26 + 26 + 10 = 62
すべてのパスワードの総数 628 = 約218兆
試行に掛かる秒数 = 218兆÷20億 = 約11万秒 = 約30時間

 

上記の時間ぐらいで解析できるようですね。

実際には、ハッシュに加えてソルトやストレッチングなども考慮するようですが、php7.0からは非推奨なようです。cryptやMD5のようなものもありますが、一般的に現在ではphpからはpassword_hashが多く用いられているようです。cryptは互換性があるようですけれども。

と、このようにハッシュ化によるパスワード保護は比較的安全ではありますが、パスワードリマインダが使用できないというデメリットもあります。管理者側(もしくは自動)でパスワードを確認する作業ですね。なので、新パッケージは利用者側から上書きするしかありません。

結局は総当りで攻撃されると突破される可能性もありますので、あまりに回数の多い入力はIPblockなどの方法が必要となると思います。

 

f:id:MC753:20170807170240g:plain

f:id:MC753:20170807170243g:plain

f:id:MC753:20170807170247g:plain

f:id:MC753:20170807170251g:plain

今日の進捗 処方登録フォーム:anamnese欄の追加

少し飲んでしまったので、あまり進んではいませんが、処方登録フォームにanamneseの欄を追加しました。少しだけ、それっぽくなってきました。

それと今日初めて知ったのですが、htmlのtextareaにはvalueは使えないんですね。

そのまま<textarea>ここ</textarea>にphpを入れておけば、修正で下のページに戻っても記入したものが残っているようにできるようですね。

f:id:MC753:20170728031635g:plain