2025年12月18日

11.オートコンプリートとは?


オートコンプリートとは入力データをブラウザが記憶し、データ入力時にこの記憶データを使うブラウザ機能になります。

ブラウザ機能のため、ブラウザの種類(Crome、Edige、Firefox)や、オートコンプリート対象が「テキスト」か「ID&パスワード」かによって挙動が異なります。

1.テキストのオートコンプリート機能

2.IDとパスワードのオートコンプリート機能

1.テキストのオートコンプリート機能

1.オートコンプリートが働くケース

下記の入力BOXをクリックして文字列を入力し「送信」を繰り返してください。

そのたびにブラウザに記憶される値が増えます。

また記憶データから選択入力するとBOXの背景色が水色(Chome又はEdigeの場合)になります。

FireFoxの場合は2回目のクリックで保存されたデータが表示されます。

Warning: include_once(/sample/autocomplete/php_text01): Failed to open stream: No such file or directory in /volume1/web/school/wp-content/themes/my_template/functions.php on line 44 Warning: include_once(): Failed opening '/sample/autocomplete/php_text01' for inclusion (include_path='.:/usr/share/pear') in /volume1/web/school/wp-content/themes/my_template/functions.php on line 44
この事例は autocomplete 属性を指定していません。よってデフォルトでautocompleteONです。

上記のプログラムは下記のプログラムで構成されています。

HTML部分

<form action='' method='post'>
	<p>データを入力してください</p>
	<p><input type='text' name='text_data'  value='' size=40 ></p>
  <button type='submit' name='action'	value='input_text01'>送信</button>
</form>
<p class='msg01' style='color:red;'><?php esc_html_e($input_submit_msg); ?></p>

■3行目:<input>タグの指定でtype'text' で、valueは 空白 です。

ここにautocomplete=を指定しなくてもオートコンプリートはデフォルトで機能します。

■form全体の説明はPHPのフォーム操作を参照して下さい。

PHP部分

<?php
    $input_submit_msg = "";
	if(isset($_POST['action']) && $_POST['action'] == 'input_text01'){
		$text	= isset($_POST['text_data']) ? $_POST['text_data']:'';
		 if(!preg_match('/[^\s ]/',$text)){
            $input_submit_msg = '入力データは空です。再入力してください。';
        }else{
            $input_submit_msg = '入力データは【'.$text.'】です。';
        }
	}
?>

■上記は、送信ボタンが挿入された時だけ処理され入力されたデータを表示します。

   メモ:背景色を白にする方法

オートコンプリート機能でデータを入力すると、背景が水色になります。

これはブラウザがchome又はEdigeの場合で、firefoxは背景色は付きません。

これが嫌な場合はCSSで下記を指定すると、背景が白になります。

<style>
	.text{box-shadow: 0 0 0 20px white inset;}
</style>

下記は上記のCSSを設定した例です。

Warning: include_once(/sample/autocomplete/php_text01A): Failed to open stream: No such file or directory in /volume1/web/school/wp-content/themes/my_template/functions.php on line 44 Warning: include_once(): Failed opening '/sample/autocomplete/php_text01A' for inclusion (include_path='.:/usr/share/pear') in /volume1/web/school/wp-content/themes/my_template/functions.php on line 44

 

2.オートコンプリートをOFFにする方法

下記入力BOXに文字列を入力し「送信」を繰り返してください。

入力データはブラウザに記憶されません。

Warning: include_once(/sample/autocomplete/php_text02): Failed to open stream: No such file or directory in /volume1/web/school/wp-content/themes/my_template/functions.php on line 44 Warning: include_once(): Failed opening '/sample/autocomplete/php_text02' for inclusion (include_path='.:/usr/share/pear') in /volume1/web/school/wp-content/themes/my_template/functions.php on line 44
この事例はinputのtextに autocomplete='off' 属性を指定した事例です。

上記のプログラムは下記のプログラムで構成されます。

HTML部分

<form action='' method='post' >
	<p>データを入力してください</p>
	<p><input type='text' name='text_data'   size=40  value=''  autocomplete='off'></p>
  <button type='submit' name='action'	value='input_text02'>送信</button>
</form>
<p class='msg01' style='color:red;'><?php esc_html_e($input_submit_msg); ?></p>

■3行目:<input>タグ

ここに autocomplete='off' を指定する事によりコンプリート機能をOFFにします。

PHP部分

<?php
    $input_submit_msg = "";
	if(isset($_POST['action']) && $_POST['action'] == 'input_text02'){
        $text = isset($_POST['text_data']) ? $_POST['text_data']:'';
        if(!preg_match('/[^\s ]/',$text)){ 
           $input_submit_msg = '入力データは空です。再入力してください。'; 
        }else{ 
           $input_submit_msg = '入力データは【'.$text.'】です。'; 
        }
   }
?>

■上記は、送信ボタンが挿入された時だけ処理され入力されたデータを表示します。

 

3.記憶されたオートコンプリートデータを削除する方法

Windowsでブラウザが記憶したデータを消す方法はブラウザによって異なります。

Chome :記憶されたデータの後ろの×印をクリックすることにより削除できます。

Edge   :保存された情報の後ろの×印をクリックすることにより削除できます。

FireFox:「メニュ→設定→プライバシーとセキュリティ→履歴→履歴を消去」で削除できます。

 

2.IDとパスワードのオートコンプリート機能

一般的にアカウントとパスワードを保存する処理は、サーバ側で許可したユーザをブラウザ側のクッキ情報として書き込む処理で行われます。

この時に使われる関数がsetcookie()$_COOKIE[]になりますが、このサイトではこの解説は行っていません。

ここではブラウザ機能だけでアカウントとパスワードを保存させるか否かを行う機能を解説します。

 

1.IDとパスワードの新規登録

IDとパスワードを新規登録させる場合にはIDに autocomplete='username'パスワードに autocomplete='new-password' を指定します。

下記画面で、複数個のIDを記憶させてください。新規IDの場合はブラウザがIDを保存するか否かを聞いてきます。

Warning: include_once(/sample/autocomplete/php_id-pass01): Failed to open stream: No such file or directory in /volume1/web/school/wp-content/themes/my_template/functions.php on line 44 Warning: include_once(): Failed opening '/sample/autocomplete/php_id-pass01' for inclusion (include_path='.:/usr/share/pear') in /volume1/web/school/wp-content/themes/my_template/functions.php on line 44

上記のプログラムは下記のプログラムで構成されます。

HTML部分

<form action='' method='post'>
	<p> アカウント: <input type='text'     name='user01' value=''	size='20' autocomplete='username'     required></p>
	<p> パスワード: <input type='password' name='pass01' value=''	size='20' autocomplete='new-password' required></p>
	<button type='submit' name='action'	value='input_pass01'>新規登録</button>
</form>

■2行目:<input type='text'>

アカウントを autocomplete='username'で指定しています。

■3行目:<input type='password'>

パスワードを autocomplete='new-password' を指定しています。

PHP部分

<?php
	$input_submit_msg = "";
	if(isset($_POST['action']) && $_POST['action'] == 'input_pass01'){
		$account01	= isset($_POST['user01']) ? $_POST['user01']:'';
		$pass01			= isset($_POST['pass01']) ? $_POST['pass01']:'';
		if(!preg_match('/[^\s ]/u',$account01)){
			$input_submit_msg = 'アカウントが空白になっています。正しく入力してください。';
		}elseif(!preg_match('/[^\s ]/u',$pass01)){
			$input_submit_msg = 'パスワードが空白です。アカウントから正しく入力してください。';
		}else{
			$input_submit_msg = '【'.$account01.'】と【'.$pass01.'】が入力または選択されました。';
		}
	}
?>

■上記は、送信ボタンが挿入された時だけ処理されます。

ブラウザに記憶したIDとパスワードを選択する場合は「Chrome、Edge」は[パスワード]欄、「Firefox」は[アカウント]欄から選択します。

この場合、選択したIDは新規でないのでブラウザはIDの保存を聞きませんが、カレントIDの切替は行われます。

 

2.IDとパスワードによるログイン

下記のケースは、カレントIDがID欄とパスワード欄に自動入力されます。

これはIDに autocomplete='username'パスワードに autocomplete='current-password' を指定する事により実現します。

しかし、これでログインIDを切り替えても、カレントIDは切り替わりません。

Warning: include_once(/sample/autocomplete/php_id-pass02): Failed to open stream: No such file or directory in /volume1/web/school/wp-content/themes/my_template/functions.php on line 44 Warning: include_once(): Failed opening '/sample/autocomplete/php_id-pass02' for inclusion (include_path='.:/usr/share/pear') in /volume1/web/school/wp-content/themes/my_template/functions.php on line 44

上記のプログラムは下記のプログラムで構成されます。

HTML部分

<form action='' method='post'>
	<p> アカウント: <input type='text'     name='user01' value=''	size='20' autocomplete='username'     required></p>
	<p> パスワード: <input type='password' name='pass01' value=''	size='20' autocomplete='current-password' required></p>
	<button type='submit' name='action'	value='input_pass02'>LOGIN</button>
</form>
<p class='msg01' style='color:red;'><?php echo esc_html($input_submit_msg); ?></p><!-- submit後の表示エリア -->
<script>

■2行目:<input type='text'>

アカウントを autocomplete='username'で指定しています。

■3行目:<input type='password'>

パスワードを autocomplete='current-password' を指定しています。

 

PHP部分

<?php
	$input_submit_msg = "";
	if(isset($_POST['action']) && $_POST['action'] == 'input_pass02'){
		$account01	= isset($_POST['user01']) ? $_POST['user01']:'';
		$pass01			= isset($_POST['pass01']) ? $_POST['pass01']:'';
		if(!preg_match('/[^\s ]/u',$account01)){
			$input_submit_msg = 'アカウントが空白になっています。正しく入力してください。';
		}elseif(!preg_match('/[^\s ]/u',$pass01)){
			$input_submit_msg = 'パスワードが空白です。アカウントから正しく入力してください。';
		}else{
			$input_submit_msg = '【'.$account01.'】と【'.$pass01.'】でログインされました。';
		}
	}
?>

■上記は、送信ボタンが挿入された時だけ処理されます。

 

3.新規登録とログインの併用

上記の1や2の問題点を解決し、カレントIDの切替や、新規登録ができる様にしたプログラムです。

これを実現するためにPHPやHTML以外にJavaScriptやJqueryの機能を利用しています。

Warning: include_once(/sample/autocomplete/java_id-pass): Failed to open stream: No such file or directory in /volume1/web/school/wp-content/themes/my_template/functions.php on line 44 Warning: include_once(): Failed opening '/sample/autocomplete/java_id-pass' for inclusion (include_path='.:/usr/share/pear') in /volume1/web/school/wp-content/themes/my_template/functions.php on line 44

上記のプログラムは下記のプログラムで構成されます。

HTML部分

<form action='' method='post'  class='form01' >
	<p> アカウント: <input type='text'			name='username'	 	size='20'	value='' autocomplete='off' required></p>
	<p> パスワード: <input type='password'	name='password' 	size='20'	value='' autocomplete='current-password' required ></p>
	<button type='button' class='login' >LOGIN</button>
	<p class='err_msg' style='color:red;'><?php echo esc_html($input_submit_msg); ?></p> 
</form>

■2行目:<input type='text'>

アカウント単独で保存したくないので autocomplete='off'を指定しています。

■3行目:<input type='password'>

カレントIDを表示したいので autocomplete='current-password' は指定しています。

script部分

<script>	
	$(function(){
		/******** マウスダウンの処理  *****************/
		$('[name="password"]').mousedown(function(){
			var input_uid = $('[name="username"]').val();
			if(input_uid == ''){
				$('.err_msg').html('アカウントが未入力です。<br>アカウントから入力してください。');
			}else{$('.err_msg').html('')}
		});
		$('[name="username"]').mousedown(function(){
			$('.err_msg').html('');
		});	
		/******** 入力文字のチェック  *****************/	
		$('[name="username"]').change(function(){
			var input_uid = $('[name="username"]').val();
			var id_check = input_uid.match(/[\s ]/u);
			if(id_check != null){
				$('.err_msg').html('アカウントが空白か、アカウントに空白文字が入っています。<br>リセットしますので、再入力してください。');
				$('[name="username"]').val('');
				$('[name="username"]').focus();
			}else{$('.err_msg').html('')}
		});
		$('[name="password"]').change(function(){
			var input_pass = $('[name="password"]').val();
			var pass_check = input_pass.match(/[\s ]/u);
			if(pass_check != null){
				$('.err_msg').html('パスワードが空白か、パスワードに空白文字が入っています。<br>リセットしますので、再入力してください。');
				$('[name="password"]').val('');
				$('[name="password"]').focus();
			}else{$('.err_msg').html('')}
		});
		/******** サブミット処理  *****************/	
		$('.login').click(function(){
			var input_uid = $('[name="username"]').val();
			var input_pass = $('[name="password"]').val();
			if(input_uid != '' && input_pass != ''){
				$('[name="password"]').attr('autocomplete','new-password');
				$('.form01').submit();
			}
		});
	});
</script>

■3から12行目:マウスダウンの処理

新規登録の時に発生するエラー処理を行っています。

例えばIDが確定していないのにパスワードを入力するような行為はエラーにしています。

■13から31行目:マウスが入力エリアから出た時の処理

IDやパスワードの中に空白文字が入っていた場合はエラーを表示しています。

■32から40行目:サブミット処理

登録する場合は'current-password''new-password'に切り替えてからプログラムでサブミットしています。

 

PHP部分

<?php
	$input_submit_msg = "";
	$name	= isset($_POST['username']) ? $_POST['username']:'';
	$pass	= isset($_POST['password']) ? $_POST['password']:'';
	if($name != '' && $pass != ''){
		$input_submit_msg = '【'.$name.'】と【'.$pass.'】で登録されました。';
	}
?>

■上記は、送信ボタンが挿入された時だけ処理され入力されたデータを表示します。

 

4.保存されたオートコンプリートデータを削除する方法

パスワードは、URLとアカウント、パスワードのセットでブラウザに保存されます。

削除はアカウント欄をクリックすると表示される「パスワードを管理」から行えます。

 


関数一覧
  • 01.PHPとWordPressプログラム
  • 02.PHPの出力コマンド
  • 03.PHPの変数規則と文字連結
  • 04.PHPのif文
  • 05.PHPの配列とループ処理
  • 06.PHPのオブジェクト
  • 07.PHPの関数
  • 08.PHPの正規表現
  • 09.PHPファイルや関数の読み込み
  • 10.PHPのフォーム操作
  • 11.オートコンプリートとは?
  • array_keys()
  • array_reverse()
  • checkdate()
  • count()
  • date()
  • echo
  • empty()
  • explode()
  • implode()
  • in_array()
  • intval()
  • isset()
  • preg_match_all()
  • preg_match()
  • preg_replace()
  • preg_split()
  • print_r()
  • session_id()
  • session_start()
  • sprintf()
  • str_replace()
  • strpos()
  • trim()
  • var_dump()