忍者ブログ
[608] [607] [606] [605] [604] [603] [602] [601] [600] [599] [598
カレンダー
09 2024/10 11
S M T W T F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
カテゴリー
最新コメント
最新トラックバック
バーコード
ブログ内検索
アクセス解析
今まではプログラムを修正する仕事でしたが、今度はプログラムを新しく作る仕事です。
勤務表にサインをされる方が新しく作るプログラムのデータベースを作成され、どんなプログラムにして欲しいかを説明されました。
私は、新しく作るプログラムの画面を作成しました。
まず、Excelで新しく作るプログラムの画面を作成し、勤務表にサインをされる方に見せ、それをもとに画面を作成しました。
新しく作るプログラムの画面のデザインは修正したプログラムに合わせました。
勤務表にサインをされる方がデータベースにいくつかデータを作成されたので、トップページには作成されたデータを表示させるようにしましたが、右側に詳細と編集、削除というボタンを付けましたが表示が上手く行かなかったのでインターネットで調べ、FORMタグにstyle = \"margin-bottom:0px\"を追加したら上手く行きました。
トップページでデータベースからデータを取り出して、データがある場合はwhileを使い、echoでhtmlのテーブルを表示させました。
データを追加する画面は修正したプログラムを参考にしました。
ここではデータベースから取り出した値を引数にして、更に別のプログラムのデータを取り出す関数を使いました。
データを追加する画面では最初の画面で選択した値をセッションに入れて次の画面にジャンプし、データを入力する時に検索ボタンをクリックしてデータベースからデータを検索する画面にジャンプするのですが、そのボタンが2つあり、ボタンの表示がまた上手く行かなかったので、またstyle = \"margin-bottom:0px\"を追加しましたが、上手く行かなかったので、1つのFORMタグにサブミットボタンを入力したデータを確認する画面にジャンプするサブミットボタンのほかに2つ入れようと思い、インターネットで調べてみたら上手く行きました。

(例)JavaScriptの箇所
function sampleAdd(){
document.getElementById('form').action = './sampleadd.php';
}

htmlの箇所
<td><?php echo $_SESSION["sample"]; ?><input type=submit value="検索" onclick="sampleAdd();"></td>


また、データベースからデータを検索してデータを選択した後でデータを追加する画面に戻るのですが、検索ボタンをクリックする前に入力したデータを保持しなければならないのでデータベースからデータを検索する画面で$_POST["入力画面のフォームの部品のname属性"]に値がセットされていればセッションに値を設定したら入力画面で入力した値が保持されるようになりました。
セレクトボックスではセッションの値と条件の値が一致すればOPTOIN要素にselectedを付けたタグをechoで表示させました。

(例)<td>
<select name="sample">
<option value=""></option>
<?php
for ($i = 1; $i <= 5; $i++){
if($i == $_SESSION["sample"]){
echo "<option value=\"" .$i. "\" selected>サンプル".$i. "</option>";
}else{
echo "<option value=\"" .$i. "\">サンプル".$i. "</option>";
}
}
?>
</select>
</td>

また、CSVも使えるようにしたプログラムと同様にデータベースからデータを取り出して、セレクトボックスにデータを追加して、セッションの値と条件の値が一致すればOPTOIN要素にselectedを付けたタグをechoで表示させた項目もありました。
(例)<td>
<select name="member">
<option value="-">-</option>
<?php
$res = $mysqli->query("SELECT `id`,`display_name` FROM `members` WHERE `section_id` = 6") or die(mysql_error());
while($row = mysqli_fetch_array($res, MYSQL_NUM))
{
if($row[0] == $_SESSION["member"]){
echo "<option value=\"".$row[0]."\" selected>".$row[1]."</option>";
}else{
echo "<option value=\"".$row[0]."\">".$row[1]."</option>";
}
}
?>
</select>
</td>

データを入力する時に、年月日を使うのですが、勤務表にサインをされる方からセレクトボックスを使うように言われました。
データを入力する項目は必須項目のものは無いので、空白の項目のデータを入力した時にエラーが発生したので、エラーが発生した項目の値(セレクトボックスで、何も選択されていない場合は"-")のセッションが"-"ならば、SQL文の項目にNULLを使い、そうでなければセッションを使いましたが、NULLとセッションの違いでSQL文を最初から最後まで分けて書かなければなりませんでした。(データベースからデータを取り出して、セレクトボックスにデータを追加して、セッションの値と条件の値が一致すればOPTOIN要素にselectedを付けたタグをechoで表示させた項目と同じ項目です)
トップページから詳細のページにジャンプする際のリンク先は
(例)echo "<td><form action=\"./stest2.php\" method=\"GET\" style = \"margin-bottom:0px\"><input type=\"submit\" value=\"詳細\" /><input type=\"hidden\" name=\"id\" value=\"" .$row[0]](トップページでデータベースから取り出したデータの値). "\"/></form></td>";
です。
詳細のページで$_GET["id"]の値を条件にデータベースからデータを取り出します。

トップページから編集のページにジャンプする際のリンク先は
(例)echo "<td><form action=\"./sedit.php\" method=\"GET\" style = \"margin-bottom:0px\"><input type=\"submit\" value=\"編集\" /><input type=\"hidden\" name=\"id\" value=\"" .$row[0]](トップページでデータベースから取り出したデータの値). "\"/></form></td>";
です。
編集のページで$_GET["id"]の値を条件にデータベースからデータを取り出します。
編集する時にもセッションを使うのですが、データを追加する時とは別の名前のセッションを使い、編集ボタンを押した直後(データを編集する時に検索ボタンをクリックしてデータベースからデータを検索する画面(データを追加する時とは別の画面)にジャンプしたかどうかを判断、データベースからデータを検索する画面でもデータを追加する時とは別の名前のセッションを使います)
編集ボタンを押した直後かどうかの判断は$_GET["id"]に値がセットされているかどうか判断
(前のトップページのhtmlの編集の箇所は
echo "<td><form action=\"./sedit.php\" method=\"GET\" style = \"margin-bottom:0px\"><input type=\"submit\" value=\"編集\" /><input type=\"hidden\" name=\"id\" value=\"" .$row[0](トップページでデータベースから取り出したデータの値). "\"/></form></td>";
)して、$_GET["id"]に値がセットされていれば、データベースの値をデータを表示させる変数にセットして、データを表示させる変数をセッションにセットして(年月日のデータの場合はデータベースのデータの方はDATEなのでsubstr関数で分ける。
(例)$syear = substr($row[7]](トップページでデータベースから取り出したデータの値), 0, 4);
$sm = substr($row[7]](トップページでデータベースから取り出したデータの値), 5, 2);
$sday = substr($row[7]](トップページでデータベースから取り出したデータの値), 8, 2);
$shour = substr($row[7]](トップページでデータベースから取り出したデータの値), 11, 2);
$smin = substr($row[7]](トップページでデータベースから取り出したデータの値), 14, 2);
データを入力した時に改行したデータ(textarea要素)を取り出す時にはstr_replace関数を使い、データベースのデータに空白があれば、</br>に置換して、データを表示させた時に改行されるようにします。
(例)$sample = str_replace("
", "", $row[17]トップページでデータベースから取り出したデータの値));

$_GET["id"]に値がセットされていなければ、セッションの値をデータを表示させる変数にセットします。(年月日のセッションの値はデータベースからデータを検索する画面でセットされます)
削除の処理はCSVも使えるようにしたプログラムと同様に$_GET["delete"]に値がセットされているかどうか判断して、データベースからデータを削除します。
詳細の画面ではトップページでデータベースから取り出したデータの詳細の画面にジャンプし、そのデータに更に複数のデータを追加したり、編集したり削除出来るようにして、データの詳細のページに追加した複数のデータを表示させるようにするのですが、年月日のデータを取り出す時は、YYYY-MM-DD形式で保存されているので、YYYY/MM/DD形式で表示させるためにstr_replace関数を使いました。
(例)$sample = str_replace("/", "-", $row[5]トップページでデータベースから取り出したデータの値))
データベースにデータを追加または編集する時もstr_replace関数を使います。
(例)str_replace("/", "-", $_SESSION["sample_date"])

勤務表にサインをされる方がまたデータを複数作成され、私がデータの詳細のほかに追加した複数のデータを表示させるようにしている途中で家に帰り、月曜日になって勤務表にサインをされる方がデータの詳細のほかに追加した複数のデータを表示の仕事を完成されました。
勤務表にサインをされる方は年月日の入力の時にJavaScriptでカレンダーで日付を入力出来るようにして欲しい、方法はインターネットで調べれば分かる、カレンダー以外の入力は受け付けないようにと言われたので私はインターネットで調べてJavaScriptでカレンダーで日付を入力出来るようにしようとしましたが、色が少しおかしかったので、ダウンロードしたプログラムを少し書き変えたら上手く行きました。
また、年月日を入力するinput要素にreadonly付け加えたらカレンダー以外の入力は受け付けないように出来ました。
詳細のページから追加のページにジャンプする際のリンク先は
(例)<a href=\"./sadd2.php?id=" .$_GET["id"]. "&model=".$machine_model](データベースから取り出したデータの値)."\">追加</a>です。
勤務表にサインをされる方がまた、データを複数入力するページでデータベースからデータを取り出して($_GET["model"]の値を条件にデータベースからデータを取り出します。)セレクトボックスにデータを追加をされていました。(セレクトボックスでは$_GET["model"]の値と$_GET["model"]の値を条件にデータベースからデータを取り出した値が一致すればOPTOIN要素にselectedを付けたタグをechoで表示させました。
)
データを追加するページで$_GET["id"]の値をセッションにセットし、
(例)$_SESSION["id"] = $_GET["id"];
$_GET["id"]の値はデータベースにデータを追加する時にも使い、データを追加したら詳細のページに戻ります。
その時に
(例)header("Location:stest2.php?id=" .$id);
$_SESSION["id"]の値が入っている変数は詳細のページでデータを取り出す時の条件で使います。

また、データの編集と削除は、削除はトップページのデータと同様に$_GET["delete"]に値がセットされているかどうか判断して、データベースからデータを削除します。
詳細のページから編集と削除のページにジャンプする際のリンク先は
(例)<td align = "center"><a href="sedit2.php?id=<?php echo $row[0](データベースから取り出したデータの値); ?>&model=<?php echo $machine_model; ?>&id2=<?php echo $_GET["id"]; ?>">編集</a> <a href="stest2.php?delete=<?php echo $row[0](データベースから取り出したデータの値); ?>&model=<?php echo $machine_model; ?>&id=<?php echo $_GET["id"]; ?>">削除</a></td>
です。
編集のページで$_GET["id"]の値を条件にデータベースからデータを取り出し、$_GET["id2"]の値をセッションにセットし、
(例)$_SESSION["id2"] = $_GET["id2"];
$_GET["model"]の値を条件にデータベースからデータを取り出し、セレクトボックスにデータを追加をし、(セレクトボックスでは$_GET["id"]の値を条件にデータベースからデータを取り出した値と$_GET["model"]の値を条件にデータベースからデータを取り出した値が一致すればOPTOIN要素にselectedを付けたタグをechoで表示させました。
編集するデータを変更したら、$_SESSION["id2"]の値を変数に入れ、詳細のページに戻ります。
(例)header("Location:stest2.php?id=" .$id2);
$_SESSION["id2"]の値が入っている変数は詳細のページでデータを取り出す時の条件で使います。
勤務表にサインをされる方は詳細のページでファイルを添付したいのでファイルを保管している場所のリンクを貼れるようにしました。
(例)<a href="<?php echo "file:". str_replace("\\", "/", $row[19]); ?>"><?php echo $row[19]]](トップページでデータベースから取り出したデータの値), ; ?></a>
また、データベースからデータを追加または編集するときにはファイルのパスの"\\"を"\\\\"に置き換えました。
(例)`path` = '".str_replace("\\", "\\\\", $_SESSION["path"])."'

勤務表にサインをされる方はトップページの下に、トップページにで表示されているデータをセレクトボックスで検索が出来ないかと言われ、CSVも使えるようにしたプログラム勤務表にサインをされる方がデータベースからデータを取り出して、セレクトボックスにデータを追加して、JavaScriptでセレクトボックスで選択された値だけが表示されるようにしていましたが
、ソースコードを見ると難しそうでしたが、ソースコードをじっくりと読むとセレクトボックスの値を変更するとJavaScriptの関数の動作が行われ、JavaScriptの関数の引数はTABLEタグのid属性とセレクトボックスで選択された値で、JavaScriptの箇所でセレクトボックスを変更した時に発生した関数を受け取り、最初に行の数を数え、それを配列の変数として、配列の数だけ処理を繰り返します。
繰り返す処理はセレクトボックスの値とTRタグのtitle属性の値(配列の値を引数にしてデータベースからデータを表示させる関数)が一致していたら行を表示させます。
しかし、この方法だと行の値なので表の1つの値でしか検索出来ないのです…。
私は、列の値とデータベースの値が一致してればデータを表示させるようにすればいいと思い、インターネットでJavaScriptで表の列の値を調べる方法を調べ、セレクトボックスで検索が出来るようにしました。
(例)JavaScriptの箇所
function tblfilter(nm,key){
if(!document.getElementsByTagName) return;
var trs = document.getElementById(nm).rows;
//タイトルは検索しない
for(var i=1; i var tr = trs[i];
var found=0;
//空白なら検索しない
if(key == '') found=1;
else {
var keys = tr.cells[0].innerText.split(',');
for(var j=0; j if(keys[j] == key){ found=1; break; }
}
}
tr.style.display = found?'':'none';
}
}

htmlの箇所
<select onchange="tblfilter('ex1',this.options[this.selectedIndex].value);">

セレクトボックスで何も選択されていない場合の値がallの場合は少し異なります。
(例)JavaScriptの箇所
function tblfilter2(nm,col,key){
if(!document.getElementsByTagName) return;
var trs = document.getElementById(nm).rows;
//タイトルは検索しない
for(var i=1; i var tr = trs[i];
var found=0;
//allなら検索しない
if(key == 'all') found=1;
else {
var keys = tr.cells[col].innerText.split(',');
for(var j=0; j if(keys[j] == key){ found=1; break; }
}
}
tr.style.display = found?'':'none';
}
}

htmlの箇所
<select onchange="tblfilter2('ex1',2,this.options[this.selectedIndex].value);">

年月日の箇所は年と月で検索出来るようにし、データベースからデータを取り出すSQL文でもSUBSTRを使いました。
(例)$res = $mysqli->query("SELECT DISTINCT SUBSTR(`occur_time`, 1, 7) FROM `sample` ORDER BY `occur_time`") or die(mysql_error());

(例)JavaScriptの箇所
function tblfilter3(nm,col,key){
if(!document.getElementsByTagName) return;
var trs = document.getElementById(nm).rows;
//タイトルは検索しない
for(var i=1; i var tr = trs[i];
var found=0;
//allなら検索しない
if(key == 'all') found=1;
else {
var keys = tr.cells[col].innerText.split(',');
for(var j=0; j if(keys[j].substr(0, 7) == key){ found=1; break; }
}
}
tr.style.display = found?'':'none';
}
}

htmlの箇所
<select onchange="tblfilter3('ex1',5,this.options[this.selectedIndex].value);">

この仕事は9/30迄でしたが、4/1に顔合わせをされた偉い方が余裕を持ちたいので9/20の周で終わらせるようにおっしゃり、勤務表にサインをされる方がExcelのレポートを作成する箇所を作られ、何とかこの仕事を終わらせる事が出来ました。

テーブル内の空白指定方法
http://soudan1.biglobe.ne.jp/qa479301.html

1つのForm内で複数のSubmitボタンを配置して遷移先を指定したい。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1425816159

[JavaScript] JKL.Calendar/ポップアップするカレンダー表示クラス
http://www.kawa.net/works/js/jkl/calender.html

JavaScriptでtableタグをスクレイピングして値を取り出す方法
http://d.hatena.ne.jp/replication/20100209/1265734486
PR
この記事にコメントする
name
title
color
mail
URL
comment
pass   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
secret (チェックを入れると管理人だけに表示できます)
この記事へのトラックバック
この記事にトラックバックする:
Powered by Ninja Blog    template by Temp* factory    icon by MiniaureType

忍者ブログ [PR]