【问题标题】:Displaying text in input field when a button is clicked(php/html)单击按钮时在输入字段中显示文本(php/html)
【发布时间】:2013-02-13 09:33:36
【问题描述】:

我在以下方面需要一些帮助;当在另一个输入字段中单击“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;
}

【问题讨论】:

  • 那就去看看你有什么问题
  • 你不能像这样混合 PHP 和 HTML/Javascript。 PHP 运行在服务器端,HTML/Javascript 客户端。要在 HTML/Javascript 中获取 PHP 生成的密码,您需要 AJAX 等技术。
  • 它不工作。它目前总是显示密码,而不是当我点击按钮时。

标签: php javascript html input


【解决方案1】:

我怀疑您希望在单击按钮时显示新密码。为此,您必须使用 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 ;
}
?>

【讨论】:

  • 打败我。我正要评论 PHP 是服务器端的,所以对 random_password 的调用在 OP 发布的代码中发生一次。 Ajax 似乎是最好的方法,或者创建一个 Javascript 函数来生成随机密码。
  • 是的,想补充一点,你打败了我哈哈:P 但是你的密码生成机制不会是秘密的!!!! :O
  • 它不一定是秘密的,如果它根据浏览器区域设置 + 一天中的时间、鼠标移动、键入的键等随机事物生成密码则不必。任何人都可以复制/粘贴该功能,但他们不会两次生成相同的密码(无论如何都不会在合理的时间内)。另外,我应该补充一点,通过 Ajax(以及明文)发送的密码并不安全。但它解决了 OP 的问题并且可以合理使用。为了获得真正的安全性,您希望在通过线路发送任何内容之前在客户端和服务器上进行加密。
  • 如果您以安全的方式存储您的密码(一些哈希值加上唯一的盐),那么密码的生成方式就无关紧要了。
  • 我仍然卡住了,得到了以下代码,但它仍然无法正常工作..
【解决方案2】:

这应该可以正常工作。

<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 ;
}
?>

【讨论】:

  • 你能打开你的浏览器,然后通过url浏览到你的gpass.php文件吗?发生什么了?你在屏幕上看到了什么?
  • onClick 位于一个令人讨厌的奇怪位置:P
  • 感谢大家的帮助,但我设法解决了它!你们在谈论持续更新生成的密码,但我的目标是只生成一次,幸运的是,感谢您的帮助@Husman & AmazingDreams =D
  • 不用担心 Fliptab。修复了点击,不再重要@AmazingDreams
【解决方案3】:

PHP 是服务器端的,所以您调用

echo random_Password();

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

【讨论】:

    【解决方案4】:

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

    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

    希望有帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-16
      • 1970-01-01
      • 2020-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多