Ajaxでphpからのデータを取得する方法

答えはわかれば簡単。でも意外とphp側にデータを渡す事だけ書いていて、受け取り方が書いてない。

まず、bunki.phpに、burl、jidという2つのデータを渡すときは

	$.ajax({
		type: 'post',
		url: 'bunki.php',
		data: {
			'burl': aURL,'jid': j_id
		}
	});

ですよね。この場合、jsでの[aURL]→burl、[j_id]→jidとしてデータを渡す。

次に、bunki.php側で処理したデータはどうやって戻すかというと、、echoで吐き出すだけ。
ん?それだと一つのデータしか戻せないじゃんと。jsonとか色々あるかもだけど、一番簡単
なのは「,」区切りでデータ返せばよい。

例えば・・・

	echo $honbu.",".$tokatsubu;

こんな感じで。するとデータとしては「A本部,B統括部」というデータになるわけです。
php側でechoで吐き出されたデータはそのまま"data"に戻り値としてはいるわけです。

なので、正常処理をした場合の処理"success:・・"を付け加えて

	$.ajax({
		type: 'post',
		url: '/psw/db/event/2012/if/bunki.php',

		data: {
			'burl': aURL,'jid': j_id
		}
		,success: function(data){

			//dataをカンマで区切って配列dtに入れる。dt[0]→A本部、dt[1]→B統括部
			var dt = data.split(",");

			//
			if(dt[0] == "A本部"){

				if(dt[1]==""){

みたいな。

「jQuery Alert Dialogs」がIEでうまく表示されない

jQuery Alert Dialogsについてはこちらが詳しいですが・・
http://h2ham.seesaa.net/article/117267913.html

実際にコーディングを進めていき、chromeFirefoxで問題ない!という事で
公開した後に、、IEで正常表示できていない事に気づく。。
画面の上部や下に張り付くように変なポップアップになるんです。

結論は簡単。html側のheaderの宣言が曖昧だと表示がバグる。
まー例えばこんなやつね。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

jsやcss側を散々探した後に・・上記結論にたどりつきました。。疲れた。。

countifの複数条件バージョンで結果を集計したい

超基本編になってしまいますが、、備忘録。
色々やり方はありますが、、sumproductが一番はやい。

例えば

A列 B列

              • -

1  ○
0  ×
0  ○
1  ×

でA列が1かつB列が○を出したいなら

 = sumproduct( (A2:A5=1)×(B2:B5="○") )

でさくっとでます。

同様に0の○、1の×、0の×も。
なるほど、それで配列ね。

変数の結合(get引数を渡すときに詰まった)

いまさら、、ですがメモ。超基本でもメモっておかないと。。

とあるテーブルのIDを関数に渡して削除確認メッセージ→引数渡し(get)で別ページへの処理の場合、、

ボタン側

 input button="..." onclick="kakunin(id_sv)"

スクリプト
function kakunin(id_cl){

ret = confirm("削除します。宜しいですか?");
if (ret == true){
location.href = "list.php?delid="+ id_cl;
}

}

PHPを使い、LDAPヘSSLでBIND認証が繋がらないとき(ldap_bind)

この中身で丸一日デバッグしまくり気力が限界に来てましたが。。何とかなった。

環境はPHPで、LDAPサーバへSSL(ポート636)形式でbind認証したい。
ldap rdn」と「pass」はもらっているので、、

<?php
	$ldaprdn  = 'cn=****,o=++++,c=--'; // ldap rdn あるいは dn
	$ldappass = 'password';  // パスワード

	$link_id = ldap_connect("ldaps://ldap.hogehoge.jp",636)
	    or die("Could not connect to LDAP server");

	    $ldapbind = ldap_bind($link_id,$ldaprdn,$ldappass);

	    // バインド結果を検証する
	    if ($ldapbind) {
	        echo "LDAP bind successful...";
	    } else {
	        echo "LDAP bind failed...";
	    }

?>

で接続できるはずが・・・できない。
正確に言えばldap connectは出来るが、bind認証でエラー。

ん?そもそもrdnってユーザ名?あれ、階層みたいに書けばいいんじゃ。。
と混乱し、anonymous(匿名)にしたり色々したり。。で丸一日。。

ググりまくりたどりついたのが以下。
http://www.mail-archive.com/php-windows@lists.php.net/msg22439.html

下流

The client is configured in the following manner:
1) Windows 2003 Server Running IIS
2) PHP 5.0.4 installed
3) LDAP support enabled
   - Uncommented the php_ldap.dll extension
   - Copied the php_ldap.dll file into the appropriate directory
   - Restarted IIS

Using the LDP tool, I was able to connect and bind via ports 389, 636,
and 3269.

Here is the code I am using to attempt the bind:


<?php

$host = "ldaps://server.addomain.domain.com";
$un = "jdoe";
$pw = "password";

$lc = ldap_connect($host);

ldap_set_option($lc, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($lc, LDAP_OPT_REFERRALS, 0);

$lb = ldap_bind($lc, $un, $pw);

ldap_close($lc);
?>

結局、PHPのiniファイルでphp_ldap.dllをコメントアウトしてる?ってところで
ひえー!そういえば。と確認したら案の定。。。。

まさか、、と思い実行したらbind認証できた!
ちなみに文中にある set optionは必須です。つまりプログラムとして正解は

<?php
	$ldaprdn  = 'cn=****,o=++++,c=--'; // ldap rdn あるいは dn
	$ldappass = 'password';  // パスワード

	$link_id = ldap_connect("ldaps://ldap.hogehoge.jp",636)
	    or die("Could not connect to LDAP server");

	ldap_set_option($link_id, LDAP_OPT_PROTOCOL_VERSION, 3) or die("couldn't set protocol version...");
	ldap_set_option($link_id, LDAP_OPT_REFERRALS, 0) or die("couldn't set referrals...");
	
	$ldapbind = ldap_bind($link_id,$ldaprdn,$ldappass);

	    // バインド結果を検証する
	    if ($ldapbind) {
	        echo "LDAP bind successful...";
	    } else {
	        echo "LDAP bind failed...";
	    }

?>

という事に。おおおおお!英語サイト、やはり毛嫌いせずみねば。
OSSのヒントは日本語だけでは限界ありますね。。

dbugを使ってみる

メモ程度に残しておく。
phpデバッグでdbugが使える。構造をそのままデバッグしてくれる。

//デバッグ環境読込
require("dBug.php");

デバッグ
new dBug($a);

これで$aの変数がグラフィカルに表示される