2013-08-07 115 views
0

这里有几个问题我要问,首先,它不管你是否把你的形式:中表单提交问题

<form action="whatever.php" method="post"> 

代替:

<form name="" action="$_SERVER['PHP_SELF']" method="post"> 

我的意思是我我只是列出了whatever.php,因为它分裂了我的代码,而不是有大量的代码文件,我只是通过我的错误消息等与会话变量,然后立即销毁它们,我只是好奇或缺点是什么如果我能做得更好?

下一个问题是与表单验证,我被告知如果它不是来自数据库,不打扰与服务器端验证,只打扰与客户端验证......这似乎有点奇怪,不打扰服务器方面验证,我觉得我应该有两个无论数据库或不。

+0

如果你将离开'action =“”'空,表单会自动创建文档。 – M1K1O

+0

'action =“whatever.php”'和'action =“$ _ SERVER ['PHP_SELF']”'之间的区别在于第一个调用的是源文件之外的文件,而“self”或“”“正如M1K1O所述,是在同一页面上完成的。这是标准形式。然后你有Ajax表单,其中不需要操作(或留空),表单的名称通常是Ajax触发器函数。客户端验证应始终使用,而不是JS,因为JS始终可以被禁用。 –

+0

@Fred客户端验证是用JavaScript实现的,所以我确定你想说的是什么。 – Halcyon

回答

0

表单中的动作并不重要。如果您使用带路由器的框架,则URL不会直接映射到PHP文件。你的代码所在的地方不应该由URL决定,但这是你进入更高级的代码架构的时候。

如果不能从数据库中来,不与服务器端验证的麻烦和只与客户端验证

这是周围的其他方式打扰。来自数据库的值是安全,用户输入是从来没有安全。

+0

说我把它留空,我的PHP脚本是在另一个文件,我如何链接它考虑我已经删除了该行动?像什么是将其链接到表单页面的正确方式? – thechrishaddad

+0

@ user1265535这就是Ajax进来的地方。它通常使用表单的名称来触发PHP脚本的动作,正如我在您的问题下的原始评论所述。 –

+0

阿贾克斯突然从哪里来? – Halcyon

0

,有人告诉我,如果不从数据库中来,不 服务器端验证的麻烦和只与客户端验证打扰..

错!客户端所做的一切都是潜在的危险。通过禁用JavaScript或VBScript(或其他),用户可以绕过任何验证。始终在服务器端进行验证!另外考虑Chrome浏览器的网页开发工具,任何HTML代码都可以随时更改。

至于形式,省略动作参数或留下空的(后来是另有W3C验证失败更好)将告诉浏览器输入发送到同一个文件

考虑一个下面的例子

<?php 
if(isset($_POST['submit'])) 
{ 
    echo $_POST['text']; 
} 
?> 
<hr> 
<form action="" method="POST"> 
    <input type="text" name="text"> 
    <input type="submit" value="susbmit"> 
</form> 

该脚本将回显通过表单提交的内容

0

如果在表单中使用$_SERVER['PHP_SELF'],则action属性将默认为当前URL。这是一种告诉PHP以提交表单的方式,它来自

但是,通过将action属性留空可以实现相同的效果。该表单将提交给自己。我个人认为这比较好。如果您使用$_SERVER['PHP_SELF'],攻击者通过附加URL的file.php部分来注入恶意代码将非常容易。将action属性留空可以防止发生这种情况。

来到你的第二个问题,

如果不能从数据库中来临了我被告知,不要用服务器端验证打扰,只有与客户端验证

没有理会,这是相反的。来自数据库的值通常是安全的,因为您是将它们插入数据库的。另一方面,用户输入应该是而不是是可信的,它们应该被正确验证。