HELP! おしえて下さい。
以下のPHPは、前任者作成のページで改修が必要となったもので、
MS SQLデータベースを使用したデータ編集のPHPとなります。
SQLとのアクセス、また、データ編集などの基本的な機能は想定
通りに動作するのですが、以下の点で足踏みしています。
ソースのデータ取得部《 $stmt = $db->query("SELECT ... WHERE ... 》
で、WHERE を使用したいのですが、意図した動作となりません。
それは、《 if (isset($_GET["func"]) && $_GET["func"] == ... 》
以降で、変数渡しが不能のようで、別ページのsubmitボタンで値を
送信し、それをTOP部の《 $_GET['InPass'] 》などで受け、条件指定で
テーブル参照し、表示、編集させたいのですが、...
ところが、《 WHERE pass_master.Pass='$InPass' 》 には変数が
渡らず、固定値(例えば、'HK1640')などでは、WHERE の条件が機能し、
意図した結果が得られるのですが、...
また、別ページからの値は、《 if (isset($_GET["func"]) && ...》
直前の《 print $InPass; 》では意図した通りの結果が得られます。
なぜでしょうか? よろしくお願いします。
以下、ソースコード(page1.php) --------------------------------------------------------------
<?php if(isset($_GET['InPass'])) { $InPass = $_GET['InPass']; } else { $InPass = $_REQUEST['InPass']; } ?> <?php $dsn = 'sqlsrv:server=XXXXXXXX;database=XXXXX'; $user = 'XXX'; $password = 'XXXXXXXXXX'; $db = new PDO($dsn, $user, $password); $columns = "Jcode varchar(20) PRIMARY KEY, Scode varchar(13) PRIMARY KEY, Name varchar(20), SaCode tinyint, SaName varchar(12), KJkyu money, JWarimasi money, SWarimasi money, HWarimasi money, YWarimasi money, DWarimasi money, Koutsu money, Sdatetime datetime" ; $db->exec("CREATE TABLE IF NOT EXISTS TM_webJikyu ($columns)"); /**************/ /* データ取得部 */ /**************/ //print $InPass; if (isset($_GET["func"]) && $_GET["func"] == "get_data") { //$InPass = 'HK1640'; $stmt = $db->query("SELECT pass_master.Pass, TM_webJikyu.SaCode, TM_webJikyu.Scode, TM_webJikyu.* FROM pass_master INNER JOIN TM_webJikyu ON pass_master.id = TM_webJikyu.Jcode WHERE pass_master.Pass='$InPass' ORDER BY TM_webJikyu.SaCode, TM_webJikyu.Scode;"); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); $json = json_encode($rows); echo $json; exit(); /*********************************/ /* データ更新部(削除、変更)*/ /*********************************/ } else if (isset($_POST["func"]) && $_POST["func"] == "upd_data") { // データ受取 $delid = $_POST["delid"]; $delid = json_decode($delid, true); $upddata = $_POST["upddata"]; $upddata = json_decode($upddata, true); // トランザクション開始 $db->beginTransaction(); // データ削除 if ($delid) { for ($i=0; $i<count($delid); $i++) { $sql = "DELETE FROM TM_webJikyu WHERE (((Jcode)=?) AND ((Scode)=?)) "; $stmt = $db->prepare($sql); $stmt->execute(array(1,$delid[$i]["Jcode"], $delid[$i]["Scode"])); } } // データ変更 if ($upddata) { for ($i=0; $i<count($upddata); $i++) { $sql = "UPDATE TM_webJikyu SET KJkyu=? WHERE (((Jcode)=?) AND ((Scode)=?))"; $stmt = $db->prepare($sql); $stmt->execute(array( $upddata[$i]["KJkyu"], $upddata[$i]["Jcode"], $upddata[$i]["Scode"])); } } // トランザクション終了 $db->commit(); exit(); } $db = null; ?> <!doctype html> <html> <head> <!-- スクリプト部分 --> <script type="text/javascript"> var Ajax = new XMLHttpRequest(); // 削除対象IDを格納する配列 var delid = []; // 変更データを格納する配列 var upddata = []; // 新規登録データを格納する配列 var insdata = []; window.onload = getSample; /************/ /* 一覧表示部 */ /************/ function getSample() { var rows, row, i, out; //コメント追加 out=""; var url = "http://1.1.1.1/page1.php" + "?dummy=" + new Date().getTime() + "&func=" + "get_data"; Ajax.open("GET", url, true); Ajax.send(null); Ajax.onreadystatechange = function() { if (Ajax.readyState == 4 && Ajax.status == 200) { out += '<p>'; out += '<th><font size="6">時給マスタ登録</font></th>'; out += '</p>'; out += '<p>'; out += '<table style="text-align: left;" border="0" cellpadding="2" cellspacing="2">'; out += '<td><button type="button" onClick="Upd();" style="width:120px;font-size:18;">'+"更 新"+'</button></td>'; out += '<td style="width: 200px; text-align: right;"><button type="button" onClick="Upd();" style="width:120px;font-size:18;color:red;">'+"削 除"+'</button></td>'; out += '</table>'; out += '</p>'; out += '<table border="1" id="sampletb">'; out += '<tr>'; out += '<th bgcolor=silver ><font Color="black">削除</th>'; out += '<th bgcolor=silver width="130">事業所名</th>'; out += '<th bgcolor=silver width="70">社員コード</th>'; out += '<th bgcolor=silver width="150">社員名</th>'; out += '<th bgcolor=silver width="110"><font size="2">基本時間給</th>'; out += '</tr>'; res = Ajax.responseText; if (res) { var rows = JSON.parse(res); for (i in rows) { out += '<tr>'; //削除flg out += '<td><input type="checkbox" id="'+i+':0" onClick="delCheck(this)";></td>'; //事業所名 out += '<td><input type="text" readonly style="width:130px; background-color:#d3d3d3;" id="'+i+':1" value="'+rows[i]["Jcode"]+'" ></td>'; //社員コード out += '<td><input type="text" readonly style="width:70px; background-color:#d3d3d3;" id="'+i+':2" value="'+rows[i]["Scode"]+'"></td>'; //社員名 out += '<td><input type="text" readonly style="width:150px; background-color:#d3d3d3;" id="'+i+':3" value="'+rows[i]["Name"]+'"></td>'; //基本時間給 if (rows[i]["KJkyu"] == null || rows[i]["KJkyu"] == '') { out += '<td><input type="number" style="width:110px; text-align:right; background-color:#ffffe0;" id="'+i+':6" value='+Math.round(rows[i]["KJkyu"])+' onChange="updCheck(this)";></td>'; } else { out += '<td><input type="number" style="width:110px; text-align:right; background-color:#ffffff;" id="'+i+':6" value='+Math.round(rows[i]["KJkyu"])+' onChange="updCheck(this)";></td>'; } out += '</tr>'; } } document.getElementById("result").innerHTML = out; } } } /**********/ /* 変更部 */ /**********/ function updCheck(e) { e.parentNode.style.backgroundColor = 'darkgreen'; var row = e.id.substr(0, e.id.indexOf(":")); var tid = document.getElementById(row+':1').value; var Scode = document.getElementById(row+':2').value; var Name = document.getElementById(row+':3').value; var SaCode = document.getElementById(row+':4').value; var SaName = document.getElementById(row+':5').value; var KJkyu = document.getElementById(row+':6').value; // 最初の変更処理 if (upddata.length == 0) { upddata.push({"Jcode":tid, "Scode":Scode, "Name":Name, "SaCode":SaCode, "SaName":SaName, "KJkyu":KJkyu, "JWarimasi":JWarimasi, "SWarimasi":SWarimasi, "HWarimasi":HWarimasi, "YWarimasi":YWarimasi, "DWarimasi":DWarimasi, "Koutsu":Koutsu, "Sdatetime":Td_date}); return; } // 2件目以降の変更処理 // 重複がある場合の変更処理 for (var i=0; i<upddata.length; i++) { if ((upddata[i]["Jcode"] == tid) || (upddata[i]["Scode"] == Scode)) { // 配列に追加 upddata.push({"Jcode":tid, "Scode":Scode, "Name":Name, "SaCode":SaCode, "SaName":SaName, "KJkyu":KJkyu, "JWarimasi":JWarimasi, "SWarimasi":SWarimasi, "HWarimasi":HWarimasi, "YWarimasi":YWarimasi, "DWarimasi":DWarimasi, "Koutsu":Koutsu, "Sdatetime":Td_date}); return; } } // 重複がない場合の変更処理 upddata.push({"Jcode":tid, "Scode":Scode, "Name":Name, "SaCode":SaCode, "SaName":SaName, "KJkyu":KJkyu, "JWarimasi":JWarimasi, "SWarimasi":SWarimasi, "HWarimasi":HWarimasi, "YWarimasi":YWarimasi, "DWarimasi":DWarimasi, "Koutsu":Koutsu, "Sdatetime":Td_date}); } /**********/ /* 削除部 */ /**********/ function delCheck(e) { var tid = document.getElementById(e.id.replace(':0',':1')).value; var Scode = document.getElementById(e.id.replace(':0',':2')).value; // チェック入れたとき if (e.checked == true) { e.parentNode.parentNode.style.backgroundColor = 'crimson'; delid.push({"Jcode":tid, "Scode":Scode}); // チェック外したとき } else if (e.checked == false) { e.parentNode.parentNode.style.backgroundColor = ''; for (var i=0; i<delid.length; i++) { if ((delid[i]["Jcode"] == tid) || (delid[i]["Scode"] == Scode)) { delid.splice(i, 1); delid.splice(i, 2); } } } } /**************/ /* 更新処理部 */ /**************/ function Upd() { delid2 = JSON.stringify(delid); upddata2 = JSON.stringify(upddata); insdata2 = JSON.stringify(insdata); url = "http://1.1.1.1/page1.php"; Ajax.open("POST", url, true); Ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); Ajax.send("func=" + "upd_data" + "&delid=" + delid2 + "&upddata=" + upddata2 + "&insdata=" + insdata2); Ajax.onreadystatechange = function() { if (Ajax.readyState == 4 && Ajax.status == 200) { getSample(); // 配列初期化 delid.length=0; upddata.length=0; insdata.length=0; } } } </script> </head> <body> <div id="result"></div> </body> </html> <?php //クエリー結果の開放 sqlsrv_free_stmt($stmt); sqlsrv_free_stmt($stmt2); //コネクションのクローズ sqlsrv_close($conn); ?>