强制表单转到 website.com/test/ 而不是网站.com?名称=



所以我试图创建一个名称搜索,但是当我单击sumbit按钮时,它会转到网站链接.com?=name=Nighel,但我希望它像这样 websitelink.com/Nighel/

是的,我已经在使用 htacces,这就是为什么 ?= 对我不起作用的原因

我似乎不知道如何解决这个问题。

这是为了根据我的日志中的名称进行搜索

我用什么来抢名字

$name = isset($_GET['playername']) ? $_GET['playername'] : "";
<div class="ironman-nav">
<form>
<span class="ironman-nav__option">Search for username</span>
<input class="ironman-nav__option" type="text" name="playername" placeholder="Username..." autocomplete="off">
<input class="ironman-nav__option" type="submit" value="Submit">
</form>
</div>

您可以使用 javascript 在按下键时或在提交表单之前使用输入值动态更改表单操作属性来解决此问题。

客户端不知道您的服务器重写规则

对于客户端testwebsite.com/test/只是 URL 的一部分,因此如果您希望浏览器将表单提交到website.com/test/则将表单的操作属性设置为website.com/test/

如果您希望test部分是可变的,则必须动态构建表单的URL。 像这样的东西

<div class="ironman-nav">
<form  action="https://website.com/<?=$name?>">
<span>Search for username</span>
<input type="text" name="playername">
<input type="submit" value="Submit">
</form>
</div>

我将把我的响应分解为两部分,第一部分解释原始代码的行为,第二部分将包含可能的实现途径。

默认情况下,HTML表单会将整理所有输入标签(<input><textarea><select>等(作为字典,其中键是节点的名称(属性(,值是节点的值(也是属性(。

所以在你的情况下,

$name = isset($_GET['playername']) ? $_GET['playername'] : "";
<div class="ironman-nav">
<form>
<span class="ironman-nav__option">Search for username</span>
<input class="ironman-nav__option" type="text" name="playername" placeholder="Username..." autocomplete="off">
<input class="ironman-nav__option" type="submit" value="Submit">
</form>
</div>

提交时将执行以下操作:

  1. 创建一个包含以下键值对的字典:玩家名=VALUE_FROM_PLAYERNAME_INPUT
  2. 使用上述参数向当前页面发出 GET 请求:GET/thispage?playername=VALUE_FROM_PLAYERNAME_INPUT

由于您希望请求转到/thispage/VALUE_FROM_PLAYERNAME_INPUT,因此您需要修改该表单的提交事件处理程序。不幸的是,会计师似乎不会为您担心,因为在加载搜索页面时您没有目标用户名(因此表单标签的动作属性无法预先填充目标用户(。

var searchForm = document.querySelector('.ironman-nav form');
searchForm.addEventListener('submit', function(evt) {
searchForm.action = '' + searchForm.querySelector('input[name="playername"]').value;
});

我在搜索表单操作中放置空字符串的原因是,如果您需要在操作 URL 前面加上任何内容。例如,如果您的搜索页和结果页名为search.html,则searchForm.action = 'search.html' + searchForm.querySelector('input[name="playername"]').value;。您必须这样做,因为它是一个相对 URL(操作 URL 不以协议或斜杠开头(,因此浏览器将从当前页面的父页面开始搜索该资源。

最新更新