【问题标题】:set input value dynamically with php用php动态设置输入值
【发布时间】:2015-10-05 17:28:58
【问题描述】:

我有用于 URL 缩短的 PHP 函数(如 goo.gl 或 bit.ly),它返回带有回显的缩短链接。我想在不刷新页面的情况下将返回的链接放入输入中(变量在 PHP 中)。

我知道这有点难以理解,所以:

  1. 用户在输入中粘贴 URL
  2. PHP 函数将其缩短并返回缩短的 URL
  3. 在输入下显示缩短的 URL(我想在输入中显示这个而不刷新)

我的代码:

<?php

function shortUrl($url)
{

    $id = substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 6);
    $ip = $_SERVER['REMOTE_ADDR'];
    $date = date("Y-m-d");
    $hour = date("H:i:s");
    $user = $_SESSION["user"];


    require_once 'db.php';

    $conn = new mysqli($servername, $username, $password, $dbname);

    if ($conn->connect_error) 
    {
        die("Database error. (1)");
        exit();
        //die($conn->connect_error);
    } 

    $sql = "INSERT INTO links (id, ip, user, link, date, hour) VALUES ('".$id."', '".$ip."', '".$user."', '".$url."', '".$date."', '".$hour."')";

    if ($conn->query($sql) === TRUE) 
    {
        echo 'http://blabla.ru/'.$id;
    }
    else 
    {
        echo 'Connection error. (2)';   
        //echo $conn->error;    
    }

    $conn->close();
}

【问题讨论】:

  • 如果 $id 值存在于不同 url 的数据库中怎么办?不过,这与问题无关。阅读Ajax

标签: javascript php


【解决方案1】:

Ajax 非常适合这一点。假设您有输入,用户将其粘贴到其中-您正在侦听该输入的值更改。一旦发生这种情况,您获取该输入的值并将其发布到 http://example.com/your-shortern.php 或带有链接作为参数的东西。

一旦运行,它将通过该回显返回,您的 ajax 成功函数将获取该数据并将其设置为输入中的值。

https://jsfiddle.net/rzan9hdr/3/ 是一个例子(超级简单)

对于后来者来说,这里是使用按钮点击触发ajax的最终解决方案https://jsfiddle.net/rzan9hdr/5/

【讨论】:

  • @RayonDabre 您也可以使用“GET”来完成。
  • 不仅“可以”使用GET,还“应该”使用GET
  • “应该”是有问题的......取决于你的情况。由于这是创建一个 url,你可以使用 POST,但你也可以使用 GET,但你实际上只是从创建操作中获得返回值......stackoverflow.com/a/18511298/1171470
  • @DrewDahlman 抱歉,我真的没有看他的服务器代码在做什么。在更新数据库时,他应该使用 POST 而不是 GET。
  • 啊,所以你可以有一个按钮jsfiddle.net/rzan9hdr/5 并注意点击它。您不需要完整的表单提交。
【解决方案2】:

如果要在页面上回显新的 URL,则需要刷新页面。

或者,您可以允许用户将 URL 输入到输入字段或其他内容中,然后使用 ajax 调用将 URL 发送到您的服务器,让您的服务器确定新 URL 并将其发送回客户端。由于您正在更改服务器的状态,因此请使用 POST 请求而不是 GET 请求(请参阅https://en.wikipedia.org/wiki/Idempotence)。也许像下面这样......

$('#input1).change(function(){
   $.POST( "yourserver.php", {oldURL:$( "'#input1t" ).val()}, function( newURL ) {
      $( "'#input1t" ).val(newURL);  //Might need to do something to prevent another change event
   });
});

你的服务器.php

<?php
shortUrl($_POST['oldURL'])

function shortUrl($url)
{
  //Your posted code
}

【讨论】:

  • jQuery 未在问题中标记! php 脚本也可以回显错误,是否要将错误设置为输入字段的值?
  • @RayonDabre Ajax 也没有在问题中标记,但是,如果原始发布者不希望刷新页面,则需要它。 jQuery 只是 JavaScript,我并不是说需要使用 jQuery 库或任何库,但是,我相信如果用户只是盯着看,它可以更好地描述意图。对于生产服务器,您不应显示任何系统生成的错误。
  • 如果您在答案中提到了 jQuery,并且该问题未标记为 jQuery,那么您必须提供令人满意的使用理由。就 Ajax 而言,OP 不知道称为 Ajax 的概念,因此在问题中对其进行标记的问题与上下文无关。在这种情况下,一个简单的 javascript 代码块就可以完成这项工作,因此不需要 jQuery。
  • @RayonDabre 恕我直言,bla bla bla。我选择了一种语言来回答问题,并且选择的答案有意识地使用了相同的语言。
猜你喜欢
  • 2020-08-17
  • 2022-06-10
  • 2022-07-26
  • 2010-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多