使用PHP根据输入值更改操作



我正在研究一种我想根据表单上的输入价值来更改表单操作的表单。这需要使用php。

来完成

这是我到目前为止尝试的:

<?php
    $action = "";
    $input = (isset($_POST["hp"])); 
    if($input == "") {
      $action = "action1"; 
    } else {
      $action = "action2"; 
    }   
?>
<form name="contactForm" id="contactForm" method="post" action="<?php echo $action; ?>">
    <!-- form stuff here -->
    <input id="hp" name="hp" type="text" class="hp"/>
    <input type="submit" name="submit" id="submit" value="Submit Query" class="button" />
</form>

这是不起作用的,因为(isset($_POST["hp"]))hp字段没有从一开始的值,因此它总是转到Action1。

我也尝试了:

<?php   
  if(isset($_POST['submit'])){ 
    $input = ($_POST['hp']); 
    $action = "";
    if($input == "") {
      $action = "action1";
    } else {
      $action = "action2";
    }
  }    
?>
<form name="contactForm" id="contactForm" method="post" action="<?php echo $action; ?>">

由于perch(正在构建的CMS(为您带来了$action尚未定义的错误。

我尝试时:

<?php   
  $action = "";
  if(isset($_POST['submit'])){ 
    $input = ($_POST['hp']); 
    if($input == "") {
      $action = "action1";
    } else {
      $action = "action2";
    }
  }    
?>

它在提交时根本没有做任何事情,因为它将操作设置为"。

有什么建议?

以简短的方式写入

$action = isset($_POST['hp'])?'action2':'action1';

仅此而已。

不同的可能性:

相同的动作和重定向

最简单的方法可能是将表单发送到同一PHP文件,在此文件中,通过邮政获取此输入的内容,然后重定向到正确的文件。

防止默认提交并通过JavaScript添加提交事件

第二个选项可能是通过JavaScript上提交的事件添加一个事件,防止默认措施防止提交,然后检查输入值,设置操作并提交表格:

<form name="contactForm" id="contactForm" method="post" action="">
    ...
</form>
<script>
    document.querySelector('#contactForm').addEventListener('submit', function(e) {
        //Prevent default submit
        e.preventDefault();
        //Check input value
        if (...) {
            this.action = "page1.php";
        } else if (...) {
            this.action = "page1.php";
        }
        //perform submit form.
        this.submit();
    });
</script>

使用数据绑定库

这可能是这样做的最佳形式,但是理解最复杂的形式是基于使用数据绑定库(例如vue.js,nockoutjs或ractivejs(在模型对象中设置的,取决于输入值的操作字符串。

然后,在html表单标签中,在操作中设置了使用所选库的绑定语法的模型数据值:

//Vue.js syntax
<form name="contactForm" id="contactForm" method="post" :action="action">
//Ractive.js syntax
<form name="contactForm" id="contactForm" method="post" action="{{action}}">

我建议什么?

如果您使用PHP新颖,并且不知道JavaScript,那么第一个选项可能是最适合您的,如果您知道JavaScript并且知道如何使用事件,但从未使用过绑定的库,可能第二种选择更适合您。

如果您使用某些数据绑定库(或实现数据绑定的框架(,则第三个选项可能是最适合您的。

如果第二版和第三版不起作用,则必须缺少类似的输入:

<input type="submit" name="submit">

您可以将该按钮添加到表单中,也可以更改代码以使用if isset($_POST['hp'])

<?php   
  $action = "";
  if(isset($_POST['hp'])){ 
    $input = ($_POST['hp']); 
    if($input == "") {
      $action = "action1";
    } else {
      $action = "action2";
    }
  }    
?>

上面的答案都不适合我,所以这是我最终与之相处的。

用例:

  1. 我有一个带有两个字段的"搜索"表格。当用户单击"搜索"时,这些值应添加到URL中,以便先前的搜索可能被书签。然后应执行搜索。
  2. 首先加载页面或不使用搜索条件时应显示可能的结果。

代码描述:

  • 在文件的顶部,检查用户是否提交了表格。如果是这样:
    • 从您想要的字段中获取值并将其保存到本地变量。
    • 导航到同一PHP文件,这次传递了您对
    • 的变量
  • 如果用户未提交表格:
    • 检查URL参数
    • 如果存在URL参数,请将其保存到本地变量,并使用这些本地变量运行搜索

代码段:

  if(isset($_POST['submit'])){
    if(!empty($_POST['projectNameSearch'])){
      $projectNameSearch = mysqli_real_escape_string($conn, $_POST['projectNameSearch']);
    }
    if(!empty($_POST['projectDescriptionSearch'])){
      $projectDescriptionSearch = mysqli_real_escape_string($conn, $_POST['projectDescriptionSearch']);
    }
    if($projectNameSearch != '' || $projectDescriptionSearch != ''){
      header("Location: projects.php?projectnamesearch=$projectNameSearch&projectdescriptionsearch=$projectDescriptionSearch");
    }
  } else {
    if(isset($_GET['projectnamesearch'])){
      $projectNameSearch = mysqli_real_escape_string($conn, $_GET['projectnamesearch']);
    }
    if(isset($_GET['projectdescriptionsearch'])){
      $projectDescriptionSearch = mysqli_real_escape_string($conn, $_GET['projectdescriptionsearch']);
    }
  }

最新更新