Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
HTML表单PHP post到self以验证或提交到新页面_Php_Html_Forms - Fatal编程技术网

HTML表单PHP post到self以验证或提交到新页面

HTML表单PHP post到self以验证或提交到新页面,php,html,forms,Php,Html,Forms,事先道歉。今天是我使用php的第一天,我终于想出了如何让我的页面返回到自己的页面(我的页面是.html,而不是.php),但现在我很难想出如何在表单验证后将数据带到新页面。我已经做了很长一段时间了,我很兴奋。下面是一个简单的例子: <!DOCTYPE HTML> <html> <head> <style> .error {color: #FF0000;} </style> </head> <body> <

事先道歉。今天是我使用php的第一天,我终于想出了如何让我的页面返回到自己的页面(我的页面是.html,而不是.php),但现在我很难想出如何在表单验证后将数据带到新页面。我已经做了很长一段时间了,我很兴奋。下面是一个简单的例子:

<!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();
  }
}