JavaScriptとPHPを組み合わせてボタンを押してもリロードせずに実行させる「パスワード作成に使えるランダム文字列作成ツール」の作成方法の解説です。
ランダムな文字列を作るPHPファイルを用意
まずはphpファイルを別に用意します。
・test_java2.php
<?php
error_reporting(0);
mb_language("ja");
mb_internal_encoding('UTF-8');
$url=$_POST["data"];
$Lis=explode(",",$url);
$GetData=array();
$GetData["max"]=$Lis[0];
$GetData["len"]=$Lis[1];
$GetData["state01"]=$Lis[2];
$GetData["state02"]=$Lis[3];
$GetData["state04"]=$Lis[4];
$sml=array("a","b","c","d","e","f","g","h","i","j","e","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");
$big=array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
$suj=array("0","1","2","3","4","5","6","7","8","9");
$datas="";
$lists=array();
$k=rand()%4;
$suu=rand();
//アルファベットの大文字
if($GetData["state01"]!=0)
{
$lists=array_merge($lists,$big);
}
//アルファベットの小文字
if($GetData["state02"]!=0)
{
$lists=array_merge($lists,$sml);
}
//数字
if($GetData["state04"]!=0)
{
$lists=array_merge($lists,$suj);
}
$m=count($lists);
for($n=0;$n<$GetData["len"];$n++)
{
$datas="";
for($i=0;$i<$GetData["max"];$i++)
{
$m=count($lists);
if($m!=0)
{
$suu=rand()%$m;
$datas.=$lists[$suu];
}
}
$datas.="\r\n";
echo htmlspecialchars($datas, ENT_QUOTES, 'UTF-8');
}
?>
このPHPファイルは$_POSTのパラメータによって組み合わせる文字の種類を切り替えます。
パラメータは”,”で区切られているのでexplode()関数を用いて分割します。
必要文字数、作成個数、アルファベットの大文字・小文字と数字のON/OFF順のパラメーターです。
このパラメータに合わせてランダム文字列は出力されます。
作成したらサーバーへアップロードしておきます。
JavaScriptとフォームを設定する
function sendRequest()
{
var xmlhttp=createXmlHttpRequest();
if(xmlhttp!=null)
{
var moji;
var sel=0;
moji = document.getElementById( "urlinput1" ).value;
moji+=","+document.getElementById( "urlinput2" ).value;
if(document.getElementById( "urlinput3" ).checked!=0) { moji+=",1"; }else{ moji+=",0"; }
if(document.getElementById( "urlinput4" ).checked!=0) { moji+=",1"; }else{ moji+=",0"; }
if(document.getElementById( "urlinput6" ).checked!=0) { moji+=",1"; }else{ moji+=",0"; }
xmlhttp.open("POST", "../test_java2.php", false);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
var data="data="+moji;
xmlhttp.send(data);
var res=xmlhttp.responseText;
document.getElementById( "urloutput2" ).value = res;
}
}
送受信するデータはフォームから取得し、それをパラメータとして”,”で区切ってtest_java2.phpに送信します。
帰ってきた値はテキストエリアのurloutput2へ送ります。
<form name="FORMs" method="post">
ランダムで英数字の文字列を作成するツールです。
パスワード作成などにお役立て下さい。
<strong>①何文字の文字列を作成しますか?</strong>
<input type="text" name="max" id="urlinput1" maxlength="4" <?php echo 'value="'.$_POST["max"].'"';?>>
<strong>②何個作成しますか?</strong>
<input type="text" name="len" id="urlinput2" maxlength="4" <?php echo 'value="'.$_POST["len"].'"';?>>
<strong>③使用する文字列を決めて下さい</strong>
<input type="checkbox" name="state01" id="urlinput3" value="1" <?php if(isset($_POST["state01"])){ echo 'checked="checked"';}?>> アルファベットの大文字(ABCD...)
<input type="checkbox" name="state02" id="urlinput4" value="1" <?php if(isset($_POST["state02"])){ echo 'checked="checked"';}?>> アルファベットの小文字(abcd...)
<input type="checkbox" name="state04" id="urlinput6" value="1" <?php if(isset($_POST["state04"])){ echo 'checked="checked"';}?>> 数字(0-9)
<input type="button" name="botan" id="button01" onClick="sendRequest();" value="ランダム文字列作成">
<TEXTAREA id="urloutput2" name="moto" size="70" placeholder="ここに生成した文字を出力します。" style="width:100%;height:160px;" wrap="off"></TEXTAREA>
</form>
フォームには文字数、個数、アルファベットの大文字と小文字、数字を使うかを設定できるフォームになっています。
サンプル
[randm_pass01]
改善すべき点
これでパスワードが簡単に生成する事ができるようになりました。
後はこれに「!」や「@」のような特殊な文字を追加したり、アルファベットが先頭になるように等の機能が欲しい所です。
こう言った機能を追加するにはチェックボックスの有効・無効が切り替えられると便利なので、次回はこれを追加できるようにする解説します。
JavaScriptでフォームのボタンの有効と無効を切り替える方法
