【问题标题】:Use text input as php variable使用文本输入作为 php 变量
【发布时间】:2012-11-10 10:32:24
【问题描述】:
<input type="text" onkeydown="domaincheck()" />

<?php
   function domaincheck()
   {
      $recordexists = checkdnsrr("", "ANY");
      if ($recordexists) 
         echo "The domain name has been taken. Sorry!";
      else 
         echo "The domain name is available!";
   }
?>

我希望我的 php 代码处理文本输入并说明它是否是有效域。唯一不起作用的是将输入链接到 php。

【问题讨论】:

  • 你必须使用Ajax与服务器通信
  • 您正在将 JavaScript (onkeydown) 与 PHP (domaincheck()) 混合使用。您想使用 JavaScript 对服务器执行查询。你没查到这么多,是吗……?
  • @shapeshifter 为什么不应该呢?这是一个简单的误解 - 并没有被问到任何事情......

标签: php html types input hyperlink


【解决方案1】:

PHP 不是这样工作的。您正在犯一个很多初学者都会犯的常见思维错误,因为您似乎认为像 Javascript 这样的 client-side 语言可以以这种方式与像 PHP 这样的 server-side 语言交互。这是由于对client/server 和/或request/response 模型的误解。

当您使用浏览器(客户端)请求网页时,您的请求由网络服务器(服务器)处理,然后返回响应,基本上是这样的:

   Client (browser)             Server (webserver)
---------------------------------------------------
   Send page request   ----->    Parse request
                                 (execute PHP)

                                       |
                                      \|/

Parse HTML response     <-----   Send HTML response
   (and execute                  (there will be no
    Javascript,                   more PHP code in
  if that was part                 this response)
  of the response)

换句话说:客户端和服务器是两个完全分离的进程,它们仅根据请求/响应原则相互通信。

PHP不能在客户端执行(客户端版本PHP-GTK除外,这里不讨论),Javascript不能在服务器端执行(服务器端版本除外) Javascript,我们不在这里讨论)。因此,PHP 函数domaincheck 将无法供客户端调用,服务器也不会接收到 Javascript 调用。

因此,如果您不想再次请求完整的网页,而只是有 Javascipt 函数请求并接收 PHP 函数的输出,则必须让 Javascipt 再次向服务器发出另一个请求(“在后台”,意思是:没有完全替换浏览器中的整个页面),并让 PHP 再次创建响应,这次是 Javascript 可以处理的输出。这通常称为AJAX(异步 JavaScript 和 XML)。尽管响应不一定是 XML。 JSON 回复很常见。 HTML 片段(甚至完整的 HTML 页面)也是可能的。

我可能会在不久的将来为您添加一个示例。

【讨论】:

    【解决方案2】:

    也许你想要这样的东西:

    <form name="Form" method="post" action="">
      <input type="text" name="DomainName" />
      <input type="submit" name="submit" value="Domain Name" />
    </form>
    
    <?php
    if ( isset( $_POST[ 'submit' ] ) ) {
      $DomainName = $_POST[ 'DomainName' ];
      domaincheck( $DomainName );
    }
    
    /**
     * @param $DomainName
     */
    function domaincheck( $DomainName ) {
        if (checkdnsrr( $DomainName, "ANY" ) ) {;
        echo "The domain \"$DomainName\" has been taken. Sorry!";
      }
      else {
        echo "The domain \"$DomainName\" is available!";
      }
    }
    
    ?>
    

    【讨论】:

      【解决方案3】:

      您必须使用 opensrs api 集成来进行域名搜索。这样您就可以获得域名列表,如果用户输入的域名与现有域名匹配,您可以说“域名可用”或说“这个新域”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-02-09
        • 2017-09-03
        • 2011-05-25
        • 2015-06-04
        • 1970-01-01
        • 2021-09-20
        • 2013-05-12
        相关资源
        最近更新 更多