1

我需要以下帮助;当在另一个输入字段中单击“gww”按钮时,我想显示一个新生成的密码(php 中的函数)。有人可以解释一下吗?

<td><input type="button" value="Generate" name="gww"></td>
<td><input type="text" id="ww"></td>

<script type="text/javascript">
function password()
{
var elem = document.getElementById("ww");
elem.value = "<? echo random_Password(); ?>";
}
</script>

function random_Password($length = 8)
{
//empty password string
$password = "";


//Possible characters
$karakters = "123456789abcdefghijklmnpqrstuvwxyz";

$maxlength = strlen($karakters);
if($length > $maxlength)
{
    $length = $maxlength;
}
$i = 0;
while($i < $length)
{
    $char = substr($karakters, mt_rand(0, $maxlength-1), 1);
    if(!strstr($password, $char))
    {
        $password .= $char;
        $i++;
    }
}
return $password;
}
4

4 回答 4

3

我怀疑您希望在单击按钮时显示新密码。为此,您必须使用 AJAX。

所以你有你的javascript函数:

function generatePassword()
{
    var xmlhttp;
    if (window.XMLHttpRequest)
    {
       // code for IE7+, Firefox, Chrome, Opera, Safari
       xmlhttp=new XMLHttpRequest();
    }
    else
   {
       // code for IE6, IE5
       xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
   xmlhttp.onreadystatechange=function()
   {
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
        document.document.getElementById("ww").value = xmlhttp.responseText;
    }
  }
   xmlhttp.open("GET","http://www.example.com/generatepassword.php",true);
   xmlhttp.send();
}

你的 HTML 应该是

<input type="button" value="Generate password" onClick="generatePassword()">

生成密码.php:

<?php
echo random_Password();

function random_Password($length = 8)
{
  //your function here ;
}
?>
于 2013-02-13T09:39:26.420 回答
1

这应该按原样工作。

<td><input type="button" value="Generate" name="gww" onClick="generatePassword()"></td>
<td><input type="text" id="ww"></td>

<script type="text/javascript">
function generatePassword()
{
  var xmlhttp;
  if (window.XMLHttpRequest)
  {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
  }
  else
  {
    // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange=function()
  {
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
      document.document.getElementById("ww").value = xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","gpass.php",true);
xmlhttp.send();
}
</script>

我认为您已经将 gpass.php 设置为:

<?php
echo random_Password();

function random_Password($length = 8)
{
  //your function here ;
}
?>
于 2013-02-13T10:15:13.320 回答
0

PHP 是服务器端,所以你打电话给

echo random_Password();

仅在页面加载时发生,并且发生一次。在 javascript 中创建函数并为按钮设置一个 onClick 属性。或者使用其他人在这些评论中提到的 Ajax。

于 2013-02-13T09:43:03.103 回答
0

您遇到的问题是以下代码仅运行一次:

var elem = document.getElementById("ww");
elem.value = "<? echo random_Password(); ?>";

因此,假设您的random_Password()函数(完全难以置信)返回值12345678,该值将保留到手动刷新页面为止。无需刷新,单击GWW按钮每次都会将WW字段设置为12345678

您在这里有几个不同的选择(从最简单到最难):

  1. GWW按钮在单击时执行整页刷新。不可取

  2. 将您的 random_Password() 函数转换为 JavaScript 代码并在客户端中执行它。非常简单,但它向黑客揭示了密码是如何生成的,因此并不安全

  3. 使用AJAX。将您的random_Password()函数移动到它自己的文件中,random_password.php并将“页面”(即 8 个字符的字符串)加载到文本字段的val.

在 99% 的情况下,我会选择选项 3 。教程在这里:http ://www.w3schools.com/php/php_ajax_php.asp

希望有帮助:)

于 2013-02-13T09:44:01.593 回答