PHP+VBScript : WEB上のDBをローカルPCから更新する


  WEB側のコード : PHP




実際の処理に、画面は必要ありませんが、PHP 側のテストをする為に GET メソッドで呼び出された
時のみ画面を表示するようにしています。

※ 正しく処理された場合は、 ok とのみ返します

  

<?
header( "Content-Type: text/html; Charset=euc-jp" );
foreach( $_POST as $Key => $Value ) {
	$_POST[$Key] = str_replace("'", "''", $Value );
	$_POST[$Key] = str_replace("\\'", "'", $_POST[$Key] );
	$_POST[$Key] = str_replace("\\\"", "\"", $_POST[$Key] );
}

$Server = 'サーバー';
$DbName = 'データベース';
$User = 'ユーザー';
$Password = 'パスワード';

if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {

	// 接続
	$Connect = @mysql_connect( $Server, $User, $Password );
	if ( !$Connect ) {
		print "接続エラーです";
		exit();
	}

	// DB選択
	mysql_select_db( $DbName, $Connect );

	$Query = "insert into `社員マスタ` (`社員コード`,`氏名`)";
	$Query .= " values('{$_POST['code']}','{$_POST['name']}')";

	// 実行
	$ret = mysql_query($Query, $Connect);
	if ( !$ret ) {
		print "エラーが発生しました\n";
		print mysql_error() . "\n";
	}
	else {
		print "ok";
	}

	// 接続解除
	mysql_close($Connect);

}
else {
?>
<html>
<body>
<form method="post">
<input type="text" name="code">
<input type="text" name="name">
<input type="submit" name="send">
</form>
</body>
</html>
<?
}
?>
  

EUC-JP で渡す事を前提としているので、5c の変換処理はありませんが、
シングルクォートが含まれていた場合は二重のシングルクォートに変換し、
ダブルクォートは元へ戻しています










  PC( Windows 側 ) のコード : VBScript




サーバー側へは多くのデータの更新を想定しているので、POST メソッドを使用しています。

メモリ上で SHIFT_JIS のデータを EUC-JP に変換して、さらに URLエンコードされた文字列
に変換した文字列を使って、EUC-JP のクライアント画面から送信したのと同じ処理になるよう
にしています。

サーバー側に負荷をかけないように、Sleep を更新と更新の間にはさんでいますが、通信の
エラーの処理は実装していません


Basic 認証を行いたい場合は、以下のヘッダを追加します

※ dXNlcjpwYXNzd29yZA== は、user:password をBASE64 で変換した文字列です

  

' Basic 認証
Call objHTTP.setRequestHeader("Authorization", "Basic dXNlcjpwYXNzd29yZA==")
  

  

' ***********************************************************
' ( 連続実行を想定しているので、クライアント用オブジェクト )
' ***********************************************************
Set objHTTP = Wscript.CreateObject("MSXML2.XMLHTTP")
' ***********************************************************
' キャラクタセット変換用
' ***********************************************************
Set Stream = Wscript.CreateObject("ADODB.Stream")
Set Stream2 = Wscript.CreateObject("ADODB.Stream")
' ***********************************************************
' URLエンコード用
' ***********************************************************
Set StreamBin = Wscript.CreateObject("ADODB.Stream")

Call objHTTP.Open("POST","サーバー側のURL",False)
Call objHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
strData = "code=9002&name=" & EUC_URLEncode("日本語表示1")
Call objHTTP.SetRequestHeader("Content-Length",Len(strData))
Call objHTTP.Send(strData)

Wscript.Sleep(1)

Call objHTTP.Open("POST","サーバー側のURL",False)
Call objHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
strData = "code=9003&name=" & EUC_URLEncode("日本語表示2")
Call objHTTP.SetRequestHeader("Content-Length",Len(strData))
Call objHTTP.Send(strData)

Wscript.Echo objHTTP.responseText

' ***********************************************************
' SHIFT_JIS を EUC-JP に変換して URLエンコード
' ***********************************************************
Function EUC_URLEncode(str)

	Stream.Open
	Stream.Charset = "shift_jis"
	' shift_jis で入力文字を書き込む
	Stream.WriteText str
	' コピーの為にデータポインタを先頭にセット
	Stream.Position = 0
 
	Stream2.Open
	Stream2.Charset = "euc-jp"
	' shift_jis を euc-jp に変換
	Stream.CopyTo Stream2
	Stream.Close

	' コピーの為にデータポインタを先頭にセット
	Stream2.Position = 0

	' バイナリで開く
	StreamBin.Open
 	StreamBin.Type = 1

	' テキストをバイナリに変換
	Stream2.CopyTo StreamBin
	Stream2.Close

	' 読み込みの為にデータポインタを先頭にセット
	StreamBin.Position = 0

	Buffer = ""
	Do while not StreamBin.EOS
		LineBuffer = StreamBin.Read(16)
 
		For i = 1 to LenB( LineBuffer )
			CWork = MidB(LineBuffer,i,1)
			Cwork = AscB(Cwork)
			Cwork = Hex(Cwork)
			Cwork = Ucase(Cwork)
			if Len(Cwork) = 1 then
				Buffer = Buffer & "%0" & Cwork
			else
				Buffer = Buffer & "%" & Cwork
			end if
		Next
 
	Loop

	StreamBin.Close

	EUC_URLEncode = Buffer

End Function
  






yahoo  google  MSDN  MSDN(us)  WinFAQ  Win Howto  tohoho  ie_DHTML  vector  wdic  辞書  天気 


[realwebapp]
Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
24/04/20 20:26:42
InfoBoard Version 1.00 : Language=Perl

1 BatchHelper COMprog CommonSpec Cprog CprogBase CprogSAMPLE CprogSTD CprogSTD2 CprogWinsock Cygwin GameScript HTML HTMLcss InstallShield InstallShieldFunc JScript JScriptSAMPLE Jsfuncs LLINK OldProg OracleGold OracleSilver PRO PRObrowser PROc PROconePOINT PROcontrol PROftpclient PROjscript PROmailer PROperl PROperlCHAT PROphp PROphpLesson PROphpLesson2 PROphpLesson3 PROphpfunction PROphpfunctionArray PROphpfunctionMisc PROphpfunctionString PROsql PROvb PROvbFunction PROvbString PROvbdbmtn PROvbonepoint PROwebapp PROwin1POINT PROwinSYSTEM PROwinYOROZU PROwindows ProjectBoard RealPHP ScriptAPP ScriptMaster VBRealtime Vsfuncs a1root access accreq adsi ajax amazon argus asp aspSample aspVarious aspdotnet aw2kinst cappvariety centura ckeyword classStyle cmaterial cmbin cmdbapp cmenum cmlang cmlistbox cmstd cmstdseed cmtxt cs daz3d db dbCommon dbaccess dnettool dos download flex2 flex3 flex4 framemtn framereq freeWorld freesoft gimp ginpro giodownload google hdml home hta htmlDom ie9svg install java javaSwing javascript jetsql jquery jsp jspTest jspVarious lightbox listasp listmsapi listmsie listmsiis listmsnt listmspatch listmsscript listmsvb listmsvc memo ms msde mysql netbeans oraPlsql oracle oracleWiper oraclehelper orafunc other panoramio pear perl personal pgdojo pgdojo_cal pgdojo_holiday pgdojo_idx pgdojo_ref pgdojo_req php phpVarious phpguide plsql postgres ps r205 realC realwebapp regex rgaki ruby rule sboard sc scprint scquest sdb sdbquest seesaa setup sh_Imagick sh_canvas sh_dotnet sh_google sh_tool sh_web shadowbox shgm shjquery shvbs shweb sjscript skadai skywalker smalltech sperl sqlq src systemdoc tcpip tegaki three toolbox twitter typeface usb useXML vb vbdb vbsfunc vbsguide vbsrc vpc wcsignup webanymind webappgen webclass webparts webtool webwsh win8 winofsql wmi work wp youtube