有没有办法在不重新加载页面的情况下修改当前页面的URL?
如果可能的话,我想访问#hash 之前的部分.
我只需要在域之后更改部分,因此它不像我违反了跨域策略.
window.location.href = "www.mysite.com/page2.php"; // Sadly this reloads
Run Code Online (Sandbox Code Playgroud) 我有一个简单的表单,将文本提交到我的SQL表.问题是,在用户提交文本后,他们可以刷新页面并再次提交数据,而无需再次填写表单.我可以在提交文本后将用户重定向到另一个页面,但我希望用户保持在同一页面上.
我记得读过一些关于为每个用户提供一个唯一的会话ID并将其与另一个值进行比较的方法,这个值解决了我遇到的问题,但我忘记了它的位置.
第一页包含HTML表单.第二页 - 处理提交数据的代码.
第一页中的表单已提交.浏览器被重定向到第二页.第二页处理提交的数据.
此时,如果第2页被刷新,则会弹出"确认表单重新提交"警告.
这可以预防吗?
我是PHP的新手,我想知道当用户在与表单相同的页面刷新时,其他程序员使用什么方法/预防来阻止数据输入MySQL数据库两次?显然它发生了,我需要一个很好的方法来阻止它.
谢谢,本
我在这里和其他地方搜索了很多帖子,但似乎无法找到我的问题的解决方案.我有一个显示数据库条目的页面:database.php.可以使用表单过滤这些条目.当我过滤它们并只显示我感兴趣的那些时,我可以点击一个条目(作为链接),它将我带到那个条目页面(通过php GET).当我在该条目页面上(即"view.php?id = 1")并点击后退按钮(返回到database.php)时,过滤器表单需要确认表单重新提交.有什么方法可以防止这种情况吗?
这里有一些(简化的)代码示例:
database.php中:
<form>
<select>
<option>1</option>
<option>2
<option>
</select>
<input type="submit" name="apply_filter" />
</form>
<?php
if ( isset( $_POST[ "apply_filter" ] ) ) { // display filtered entries
$filter = $_POST[ "filter" ];
$q = "Select * from table where col = '" . $filter . "'";
$r = mysql_query( $q );
} else { // display all entries
$q = "Select * from table";
$r = mysql_query( $q );
}
while ( $rec = mysql_fetch_assoc( $r …Run Code Online (Sandbox Code Playgroud) 由于POST/Redirect/GET(PRG)模式中的POST请求303 See Other成功返回redirect()状态代码,因此可以告知客户端他们要享受的特定成功风格(例如,OK,Created ,接受等)以及任何适当的标题(例如,Location对于a 201 Created,可能与重定向的标题冲突)?
例如,是否适合使重定向的GET响应POST响应所期望的正确响应代码和标题?
在HTTP 1.1规范说:
该方法[303]主要用于允许输出POST激活的脚本以将用户代理重定向到所选择的资源.
但是没有提供任何有关更常见的状态代码和标头丢失的见解.
编辑 - 一个例子:
客户端发送POST请求,在/orders该请求中创建新资源/orders/1.
如果服务器发送201 Created状态location: /orders/1,自动客户端会很高兴,因为它知道资源已创建,并且它知道它在哪里,但使用Web浏览器的人会不高兴,因为他们/orders再次获取页面,如果他们刷新它们他们将发送另一个订单,这不太可能是他们想要的.
如果服务器发送一个303 See Other状态,location: /orders/1人类将被带到他们的订单,通知它的存在和状态,并且不会有意外重复它的危险.但是,自动客户端不会明确告知资源的创建,它必须根据location标头推断创建.此外,如果303重定向到其他地方(例如/users/someusername/orders),人类可能会得到很好的适应,但自动化客户端却没有明显的信息.
我的建议是,发送201 Created的响应对新资源重定向的GET请求,但我越去想它,我喜欢它的少(可能会非常棘手,以确保只有创建者接收的201,它不应该出现的GET请求创建了资源).
在这种情况下,最佳响应是什么?
我阅读了很多关于PHP的Restful教程.
(我不想深入探讨为什么我不使用RoR.这是由于团队更熟悉PHP)
因为我们计划将来扩展到API,所以我认为实现Restful Web服务很重要.
我看了很多教程
http://www.gen-x-design.com/archives/create-a-rest-api-with-php/
显然宁静是为web服务.
网页怎么样?它们也可以是RESTFUL吗?
如果答案是否定的,请不要超出这条线并告诉我.谢谢.
我知道让网址看起来像RESTFUL网址就是简单地使用mod_rewrite.但是,我很确定,宁静的架构不仅仅是让网址看起来不错.
例如,我在名为list.php的网页上有一个项目列表.每个项目旁边都有一个删除链接.例如,list.php?id = 1&deleteitem
当有人点击list.php?id = 1&deleteitem链接时,我会回到同一个list.php文件并检查$ _GET中的param deleteitem.
如果检测到,我将根据$ _GET中的参数id从数据库中删除.
之后我将重定向回list.php没有任何参数.
我想知道,我如何使整个流程RESTFUL?
我问,因为在REST中,要删除一些你需要使用HTTP请求方法(DELETE).
很明显,在我的链接中,它们都很简单 <a href="list.php?id=1&deleteitem">Delete</a>
请赐教.
我的编程并不那么强大,如果给出的建议尽可能地成为外行,那将是很好的.
谢谢.
编辑
我有2个跟进问题.
问题1)由于这是一个带分页的项目列表,如果我想让它成为RESTful,URL会是什么样子?
问题2)因为我在列表中的每个项目旁边放置DELETE链接,我现在明白了,我应该使用
<form method="POST">
<input type=hidden name="_method" value="delete">
<input type="submit" >
</form>
Run Code Online (Sandbox Code Playgroud)
代替.
但表格应该张贴到哪里?项目网址?/项目/ {项目-ID}
但是我想回到这个列表页面,在成功删除数据库中的行后显示成功消息.
当我使用成功消息刷新此列表页面时,我还想避免弹出消息.
如果我发回这个list.php网址,那么它不是RESTful是吗?因为下面的答案我告诉我每个项目都是需要自己网址的资源.
请赐教.谢谢.
我使用 HTML 和 PHP 制作的联系表单有问题。当用户单击submit它时,它会重定向到用户收到消息“您的消息已发送”的另一个页面。然后它会自动重定向到主页。但是当用户单击back按钮时,消息再次出现并重新提交表单。因此,我收到两条相同的消息发送到我的电子邮件!
我怎样才能解决这个问题?
php ×5
forms ×3
html ×3
http ×2
back ×1
form-submit ×1
friendly-url ×1
get ×1
javascript ×1
post ×1
refresh ×1
rest ×1
restful-url ×1
url ×1
user-input ×1