2025年12月18日
11.オートコンプリートとは?
オートコンプリートとは入力データをブラウザが記憶し、データ入力時にこの記憶データを使うブラウザ機能になります。
ブラウザ機能のため、ブラウザの種類(Crome、Edige、Firefox)や、オートコンプリート対象が「テキスト」か「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 |
上記のプログラムは下記のプログラムで構成されています。
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 |
上記のプログラムは下記のプログラムで構成されます。
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とアカウント、パスワードのセットでブラウザに保存されます。
削除はアカウント欄をクリックすると表示される「パスワードを管理」から行えます。