住所検索システムを作ろう!その2

Javascriptから呼び出す、PHPのプログラム。
まぁ〜危険といえば危険。PHPにはうといから、文字コードは、すべてUTF-8
変換の必要もないし、今のレベルじゃ〜こんなもの。
文字の区切りもこんなのでいいのか?

ファイル名は sql.php

<?php
define( '_RS', chr(30));
define( '_US', chr(31));
define( '_HOST', 'localhost' );
define( '_USER', 'root' );
define( '_PASS', '' );
define( '_REFERER','http://');

$pos = strpos( $_SERVER[ HTTP_REFERER ], _REFERER);

if( false === $pos || 0 < $pos )
 exit( "Error!!"._RS."Intercepted access.");//呼び出し本
 
if( !$d = mysql_connect( _HOST, _USER, _PASS ) ) 
  exit( "Error!!"._RS." No connect." );

$cmnd = $_POST[ 'cmnd' ];
if( !$cmnd ) exit( 'Connected MySQL' );
$sqls = split( _US, $cmnd );

for( $c = 0 ; $sql = $sqls[ $c++ ]; )
  if(! $r = mysql_query( $sql, $d ) )
    exit( "Error!! SQLが実行できません。"._RS.$sql._RS.mysql_error( $d ) );

while( $row = mysql_fetch_array( $r, MYSQL_NUM ) )
  $b[ ] = join( _US, $row );

echo $b ? join( _RS, $b ): '';

以下、利用する画像。
ajax.gif
bar.gif

japan.gif

で、こんなにして、絵に描いた餅になるんじゃねぇ〜?


ここまでしか、書けなかった。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html lang="ja">

<head>

<meta http-equiv="Content-type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta http-equiv="Content-Style-Type" content="text/css">

<title>住所検索システム</title>

<style type="text/css">
  
body {
  background      : #fff url(./japan.gif) repeat-y top left;
  margin          : 0;
}

#header {
  color           : #448;
  font            : normal 14px/100% 'Arial';
  background      : #eee url(./bar.gif);
  height          : 28px;
  padding         : 4px 0 0 8px;
  border-bottom   : 2px #999 solid;
}

#list {
  list-style-type : none;
  margin          : 10px;
  padding         : 0;
}

#list li {
  color           : #004;
  line-height     : 2;
  border-bottom   : 1px #888 dotted;
}

#list li:hover {
  background-color: #ddf;
}

#key {
  ime-mode        : disabled;
  background      : #fff url(./search.gif) no-repeat left center;
  margin          : 0;
}

.TargetColor {
  background-color: #ccf !important;
}

</style>
</head>

<body>
  <div id="header">
    住所検索:
    <input type="text" size="50" id="key" title="郵便番号や地名の一部を空白で区切って入力します"> /
    表示
    <select id="SearchMax" name="SearchMax" title="一度に表示する行数を指定します">
      <option value="5">  5</option>
      <option value="10"> 10</option>
      <option value="15"> 15</option>
      <option value="20" selected="selected"> 20</option>
      <option value="30"> 30</option>
      <option value="50"> 50</option>
      <option value="100">100</option>
      <option value="500">500</option>
    </select>件 /
    [
    <input type="radio" name="ziportel" value="PostCode" checked="checked" id="rd0"><label for="rd0">〒</label>
    <input type="radio" name="ziportel" value="Telphone" id="rd1"><label for="rd1">TEL</label>
     を優先]
  </div>
  <ul id="list">
    <li>検索された住所が表示されます</li>
  </ul>

<script type="text/javascript">

//@cc_on
(function ( ) {

if(! /^http:/.test( location.href ) ) {
  alert( 'ローカルファイルからの利用はできません' );
  return;
}

//_基本定数____________________________________________________________
//
var _SAVE_SPAN = 100; //day
var _WAIT_TIME = 350; //mille second
var _SQL_CALL  = 'sql.php';

//_汎用関数

var ClassList = {
 
 'contains' : (function ( ) {
    return function ( node, css ) {
      var str = ' ' + node.className + ' ';
      if ( -1 < str.indexOf( ' ' + css + ' ' ) ) return true;

      var i = 0, k, keys = css.split( / +/ );
      while( k = keys[ i++ ] ) if( -1 == str.indexOf( ' ' + k + ' ' ) ) return false;
      return true;
    };
  })(),
  
  'add' : (function ( ) {
    return function ( node, css ) {
      var i = 0, k, keys = css.split( / +/ ), buf = [ ], str = ' ' + node.className + ' ';
      while( k = keys[ i++ ] ) if( 0 > str.indexOf( ' ' + k + ' ' ) ) buf.push( k );
      node.className += ' ' + buf.join( ' ' );
      return buf;
    };
  })(),

  'item' : (function ( ) {
    return function ( node, n ) { return node.className.split( / +/ )[n]; };
  })(),
  
  'remove' : (function ( ) {
    return function ( node, css ) {
      var i = 0, k, keys = node.className.split( / +/ ), buf = [ ], str = ' ' + css + ' ';

      while( k = keys[ i++ ] ) if( 0 > str.indexOf( ' ' + k + ' ' ) ) buf.push( k );
      node.className = buf.join( ' ' );
      return buf;
    };
  })(),
  
  'toggle' : (function ( ) {
    return function ( node, css ) {
      var i = 0, k, keys = css.split( / +/ ), buf = [ ], str = ' ' + node.className + ' ';

      while( k = keys[ i++ ] ) 0 > str.indexOf(' '+ k +' ') ? str += k + ' ': buf.push( k );
      node.className = str;
      if( buf.length ) this.remove( node, buf.join( ' ' ) );
      return node.className;
    };
  })()
};

  

})();


//_Ajax___________

var sendRequest = (function( create, setEncHeader, uriEncode ) {
  return function (callback, data, method, url, async, sload, user, password) {
    var oj = create( );
    if(! oj) return null;
    if( sload ) url += ((url.indexOf('?') == -1) ? '?': '&') + 't=' + (new Date).getTime();

    var f = 'object' === typeof callback;
    var callback_onload = f ? callback.onload: callback;
    var callback_onbeforsetheader = f ? callback.onbeforsetheader: null;

    /*@if( @_jscript )
      oj.onreadystatechange = function () { if( 4 == oj.readyState ) callback_onload( oj ), oj.abort()}
    @else@*/
      oj.onload = function () { callback_onload(oj); oj.abort() } /*@end@*/;

    data = uriEncode( data, url );
    if( 'GET' == method.toUpperCase() ) url += (url.indexOf('?')==-1 ? '?': data=='' ? '': '&') + data;
    oj.open ( method, url, async, user, password );
    if( callback_onbeforsetheader ) callback_onbeforsetheader( oj );

    setEncHeader( oj );
    oj.send( data );
    return oj;
  };
})(
    function ( ) {
      try { return new XMLHttpRequest } catch(e1) {
        try { return new ActiveXObject( 'Msxml2.XMLHTTP.6.0' ) } catch(e2) { /*
          try { return new ActiveXObject( 'Msxml2.XMLHTTP.3.0' ) } catch(e3) { */
            return null; } } // }
    },
    
   function ( o ) {
     if( !window.opera || 'function' === typeof o.setRequestHeader )
       o.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8' );
     return o;
   },
    
   function ( data, url ) {
     var d = [ ], i, enc = encodeURIComponent;

     switch( typeof data ) {
       case 'object': for( i in data ) d.push( enc(i) + '=' + enc(data[i]) ); break;
       case 'string':
         if( '' == data ) return '';
         if( data.charAt(0) == '&' ) data = data.substring( 1, data.length );
         var datas = data.split( '&' );
         for( i = 0; i < datas.length; i++ ) {
           var dataq = datas[i].split( '=' );
           d.push( enc( dataq[0] ) + '=' + enc( dataq[1] ) );
         }
       default:
     }
     return d.join( '&' );
   }
);

var Zip = {
  'search': (function ( ) {
    return function ( ) {
      ;
    };
  })(),

  'list': (function ( ) {
    return function ( ) {
      ;
    };
  })()
  
};

var FormKeeper = (function ( getCookie, setValue ) {
  return function ( ) {
    var cnt = 0, o, es, e, v;

    while( o = arguments[ cnt++ ] ) {
      if( v = getCookie( o ) ) setValue( o, v );
      es = document.getElementsByName( o ) || [ document.getElementById( o ) ];
      for( var i = 0; e = es[ i ]; i++ ) {
        e./*@if( @_jscript ) attachEvent( 'on' + @else@*/ addEventListener( /*@end@*/
          'change', (function ( setCookie ) {
            return function ( evt ) {
              var e  = evt./*@if (@_jscript) srcElement @else@*/ target /*@end@*/;
              var nm = e.name || e.id;
              if( nm ) setCookie( nm, e.value, 100);
            };
          })(
            function ( name, value, day, path, domain ) {
              return document.cookie = encodeURIComponent( name ) + '=' + encodeURIComponent( value ) +
                '; ' + 'expires=' + new Date( ( new Date ) - 86400000 * -day ).toUTCString( ) +
                '; ' + ( path ? 'path=' + encodeURI( path ) + '; ': '' ) +
                (domain ? 'domain=' + encodeURI ( domain ) + '; ': '' );
            }
          ), false );
      }
    }
  };
})(
  function ( name ) {
    name = encodeURIComponent( name ).replace( /([.*()]) /g, '\\$1' );
    var value = document.cookie.match( RegExp( name + '\\s*=\\s*(.*?)(?:[\\s;,]|$)' ) );
    return value ? decodeURIComponent( value[1] ): '';
  },

  function ( n, v ) {
    var objs = document.getElementsByName( n );
    var i, j, o, p;
    
    if( 0 === objs.length ) objs = [ document.getElementById( n ) ];
    for (i = 0; p = objs[ i++ ];) {
      switch( p.type ) {
        case 'text' : case 'textarea': case 'button':
        case 'reset' : case 'submit': case 'hidden': p.value = v; break;
        case 'checkbox': p.checked = v; break;
        case 'radio' : p.checked = p.value == v; break;
        case 'select-one': case 'select-multiple':
          for( j = 0; o = p.options[ j++ ]; ) o.selected = o.value == v; break;
      }
    }
  }
);

FormKeeper( 'SearchMax', 'ziportel' );

var AutoFocus = (function (createListener) {
  return function (target, css_on, css_out) {
    var listener = createListener(css_on, css_out);
  
  target./*@if (@_jscript) attachEvent('on' + @else@*/ addEventListener(/*@end@*/
    /*@if (@_jscript) 'focusin' @else@*/ 'focus' /*@end@*/, listener, true);
    
  target./*@if (@_jscript) attachEvent('on' + @else@*/ addEventListener(/*@end@*/
    /*@if (@_jscript) 'focusout' @else@*/ 'blur' /*@end@*/, listener, true);
  };
})(
  function (css_on, css_out) {
    return function (evt) {
      var e  = evt./*@if (@_jscript) srcElement @else@*/ target /*@end@*/;
      if ( /INPUT|TEXTAREA/.test(e.nodeName) && ! /checkbox|radio/.test(e.type) ) {
        e.style.cssText = 'focusin' === evt.type ? css_on: css_out;
      }
    };
  });

AutoFocus( document, 'background-color: #fdd', '' );

//_汎用関数____________________________________________________________
//
}

function setClipboard ( str ) {
    /*@ clipboardData.setData('Text' , str); return str; @*/ return null;
}

function getParent ( node, type, val ) {
  return node ? ( val == node[type] ) ? node: arguments.callee( node.parentNode, type, val): null;
}


function getLocation () {
  var par = location.search.substring(1).split( '&' );
  var cnt = 0, pac, nv, ret = [ ];

  while( pac = par[ cnt++ ] ) {
    nv = pac.split( '=' );
    ret[ decodeURIComponent( nv[0] ) ] = decodeURIComponent( nv[1] );
  }
  return ret;
}

</script>

</body>
</html>