HTML表单PHP post到self以验证或提交到新页面
事先道歉。今天是我使用php的第一天,我终于想出了如何让我的页面返回到自己的页面(我的页面是.html,而不是.php),但现在我很难想出如何在表单验证后将数据带到新页面。我已经做了很长一段时间了,我很兴奋。下面是一个简单的例子:HTML表单PHP post到self以验证或提交到新页面,php,html,forms,Php,Html,Forms,事先道歉。今天是我使用php的第一天,我终于想出了如何让我的页面返回到自己的页面(我的页面是.html,而不是.php),但现在我很难想出如何在表单验证后将数据带到新页面。我已经做了很长一段时间了,我很兴奋。下面是一个简单的例子: <!DOCTYPE HTML> <html> <head> <style> .error {color: #FF0000;} </style> </head> <body> <
<!DOCTYPE HTML>
<html>
<head>
<style>
.error {color: #FF0000;}
</style>
</head>
<body>
<?php
// Initialize variables and set to empty strings
$firstName=$lastName="";
$firstNameErr=$lastNameErr="";
// Validate input and sanitize
if ($_SERVER['REQUEST_METHOD']== "POST") {
if (empty($_POST["firstName"])) {
$firstNameErr = "First name is required";
}
else {
$firstName = test_input($_POST["firstName"]);
}
if (empty($_POST["lastName"])) {
$lastNameErr = "Last name is required";
}
else {
$lastName = test_input($_POST["lastName"]);
}
}
// Sanitize data
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<h2>Find Customer</h2>
<p><span class="error">* required</span></p>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>" method="post">
First Name: <input type="text" name="firstName" value="<?php echo $firstName; ?>"><span class="error">* <?php echo $firstNameErr; ?></span><br><br>
Last Name: <input type="text" name="lastName" value="<?php echo $lastName; ?>"><span class="error">* <?php echo $lastNameErr; ?><br><br>
<input type="submit">
</form>
</body>
</html>
.错误{color:#FF0000;}
寻找客户
*必需的
使用javascript进行验证,然后将post表单发送到它自己或另一个页面,在那里它可以处理数据
<!DOCTYPE html>
<html>
<head>
<script>
function validateForm()
{
var x=document.forms["myForm"]["fname"].value;
if (x==null || x=="")
{
alert("First name must be filled out");
return false;
}
}
</script>
</head>
<body>
<form name="myForm" action="demo_form.php" onsubmit="return validateForm()" method="post">
First name: <input type="text" name="fname">
<input type="submit" value="Submit">
</form>
</body>
</html>
函数validateForm()
{
var x=document.forms[“myForm”][“fname”].value;
如果(x==null | | x==“”)
{
警告(“必须填写姓名”);
返回false;
}
}
名字:
资料来源:
.错误{color:#FF0000;}
寻找客户
*必需的
您可以检查是否有任何无效数据,如果没有无效数据,请处理,然后重定向。比如说
if (empty($firstNameErr) && empty($lastNameErr)) {
// process the data
// redirect to other page.
header('LOCATION: index.php');
exit();
}
注意,您需要在输出任何HTML之前执行这些代码,否则无法执行重定向。例如:
<?php
// validate the data
// no error, proccess, then, redirect
?>
html code here.
这里是html代码。
满足所有条件后,可以使用标题('Location:http:mywebsite.com/otherAction.php')
在我的一些作品中,我的设置是这样的,但我在这里学到了一些不好的东西。在提交表单后刷新页面时,POST值仍然保留,并且可以复制条目。这在我看来是不好的。如果你对这种东西感兴趣,那么依赖这种重定向对SEO是不好的。
对于SEO来说,让表单自然地发布到另一个页面会更好。所以我应该用javascript而不是php来验证表单数据?这样更好,如果用户的输入有问题,用户不必重新加载页面。您仍然可以在表单登录页上执行其他php验证/清理。我大部分内容都是从w3获得的,所以我可能对它的用法感到困惑?如果表单在提交之前需要进行验证(比如,提交到数据库进行查询或插入),那么应该使用javascript,因为附加的php操作/方向是无效的/不正确的/多余的?只是想了解一下。@vincent,Javascript是一个很好的特性,但它只是可选的。PHP是必须的,因为它是您抵御可怕数据的最后一道防线。通常,可以禁用Javascript。人们可以轻松绕过Javascript验证。不需要重定向,所有逻辑都可以在登录的php页面上进行。注意,出于安全原因,您应该在重定向后立即使用exit()
。您好@invisal,您介意共享一些链接吗。所以我可以了解更多。谢谢@DrixsonOseña这个标题('Location:http:mywebsite.com/otherAction.php')
应该是标题('Location:http://mywebsite.com/otherAction.php');代码>-您错过了/
和分号结尾。最好把它放在那里。@Jaikrat当你重定向时,你失去了$\u帖子。。有两种方法可以解决这个问题。。1.)将id存储在cookie中或2.)在url中使用$\u GET add查询字符串,例如mywebsite.com/page/page?userid=12
这应该在我的if/else处理的其余部分下面,对吗?因为新变量不必实例化,所以这是一种更有效的方法吗?(假设性能增益可以忽略不计)与@Drixson的答案相比还有其他好处吗?@vincent,Drixson的答案和我的答案基本上使用相同的概念,但方法略有不同。通常,如果有许多字段需要验证,Drixson的回答会更快。因为只有两个字段,所以性能差异太小,所以没有什么不同。(即使有很多字段,性能差异仍然太小)@vincent,但是,您应该添加exit()代码>就在头重定向之后,因为头重定向只是将头发送到用户的浏览器以请求重定向。恶意用户可以忽略重定向请求。感谢您的解释-这很有意义。此外,我还为您链接的页面添加了“exit;”。感谢您就开放式安全漏洞提供建议。
<?php
// validate the data
// no error, proccess, then, redirect
?>
html code here.
// Validate input and sanitize
if ($_SERVER['REQUEST_METHOD']== "POST") {
$valid = true; //Your indicator for your condition, actually it depends on what you need. I am just used to this method.
if (empty($_POST["firstName"])) {
$firstNameErr = "First name is required";
$valid = false; //false
}
else {
$firstName = test_input($_POST["firstName"]);
}
if (empty($_POST["lastName"])) {
$lastNameErr = "Last name is required";
$valid = false;
}
else {
$lastName = test_input($_POST["lastName"]);
}
//if valid then redirect
if($valid){
header('Location: http://mywebsite.com/otherAction.php');
exit();
}
}