php - 使表单 URL 提交看起来像路由而不是查询字符串

标签 php html codeigniter

有没有办法更改表单提交时的默认 URL 格式?

这是我的:

<form action="<?php echo base_url('some_controller/some_method'); ?>" method="GET">
    <select name="foo">
        <option value="1">bar</option>
        <option value="2">Wubba lubba dub dub</option>
    </select>
    <button type="submit">Send</button>
</form>

当我点击按钮时,url 变为:(不需要)

localhost/some_controller/some_method?foo=2

有没有办法让它像下面这样? (预期结果)

localhost/some_controller/some_method/2

仅使用 PHP/Codeigniter 可以实现吗?或者可能在 HTML 中?
(不用javascript不用htaccess也能搞定吗?)

我认为使用 form_open 方法没有任何区别。

最佳答案

发生这种情况是因为您的方法是 GET。如果您将方法更改为 POST,信息将从 URL 中消失。但是,它会产生不同的副作用,这些副作用或好或坏,具体取决于您的观点:

  1. 如果在 codeigniter 中打开,Post 会将其置于 CSRF 保护范围内。
  2. 如果导航回 POST 提交结果的页面,您会从浏览器收到“您要重新提交吗?”类型的消息。

唯一的其他选择是通过 javascript 在后台执行 ajax 请求。

关于php - 使表单 URL 提交看起来像路由而不是查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46244814/

相关文章:

html - 使 ckeditor 在页面加载时只读

php - 消息 : Object of class stdClass could not be converted to string in codeigniter

javascript 对象不会在控制台中打印

javascript - Jquery 插件对象 #<HTMLDocument> 没有方法 'observe' 问题

php - 如何在codeigniter中获取数据库列的总和?

php - 亚马逊 ec2 中的 codeigniter .htaccess 删除 index.php 不起作用

php - 向 Facebook 中的好友发送消息或通知

php - stream_socket_client 通过 http 代理

php - 为什么login.php一直显示密码无效?

javascript - angularJS 和 php- HTML 标签未解码