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

使用PHP根据输入值更改操作,php,forms,action,perch,Php,Forms,Action,Perch,我正在处理一个表单,我想根据表单提交时输入的值更改表单操作。这需要使用PHP来完成 以下是我迄今为止所尝试的: <?php $action = ""; $input = (isset($_POST["hp"])); if($input == "") { $action = "action1"; } else { $action = "action2"; } ?> <form name="contactF

我正在处理一个表单,我想根据表单提交时输入的值更改表单操作。这需要使用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>
这不起作用,因为构建它的CMS会抛出一个$action尚未定义的错误

当我尝试时:

<?php   
  $action = "";
  if(isset($_POST['submit'])){ 
    $input = ($_POST['hp']); 
    if($input == "") {
      $action = "action1";
    } else {
      $action = "action2";
    }
  }    
?>
它在提交时根本没有做任何事情,因为它将操作设置为

有什么建议吗?

写得简短些

$action = isset($_POST['hp'])?'action2':'action1';
仅此而已。

用简短的方式书写

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

仅此而已。

如果第2版和第3版不起作用,您必须缺少以下输入:

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

如果第2版和第3版不起作用,则必须缺少以下输入:

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

不同的可能性:

相同的操作和重定向 最简单的方法可能是将表单发送到同一个PHP文件,在该文件中,通过POST获取该输入的内容并重定向到正确的文件

通过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、KnockoutJS或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,知道如何处理事件,但从未使用过绑定库,那么第二个选项可能更适合您


如果您使用的数据绑定库或框架实现了数据绑定,如Angular,那么第三个选项可能最适合您。

不同的可能性:

相同的操作和重定向 最简单的方法可能是将表单发送到同一个PHP文件,在该文件中,通过POST获取该输入的内容并重定向到正确的文件

通过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、KnockoutJS或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,知道如何处理事件,但从未使用过绑定库,那么第二个选项可能更适合您


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

上面的答案对我都不适用,因此我最终选择了以下内容

用例:

我有一个带有两个字段的搜索表单。当用户单击“搜索”时, 这些值应添加到URL中,以便以前的搜索 可以添加书签。然后应执行搜索。 首次加载页面或未使用搜索条件时,所有 应显示可能的结果。 代码说明:

在文件顶部,检查用户是否提交了表单。 如果是: 从所需字段中获取值并将其保存到局部变量。 导航到同一个PHP文件,这次传递您感兴趣的变量 如果用户未提交表单: 检查URL参数 如果存在URL参数,请将其保存到局部变量, 并使用这些局部变量来运行搜索 代码段:

ifisset$\u POST['submit']{ 如果!空$\u POST['projectNameSearch']{ $projectNameSearch=mysqli\u real\u escape\u string$conn,$\u POST['projectNameSearch']; } if!空$\u POST['projectDescriptionSearch']{ $projectDescriptionSearch=mysqli\u real\u escape\u string$conn,$\u POST['projectDescriptionSearch']; } 如果$projectNameSearch!=| |$projectDescriptionSearch!={ headerLocation:projects.php?projectnamesearch=$projectnamesearch&projectdescriptionsearch=$projectdescriptionsearch; } }否则{ ifisset$\u GET['projectnamesearch']{ $projectNameSearch=mysqli\u real\u escape\u string$conn,$\u GET['projectNameSearch']; } IFAsset$\u GET['projectdescriptionsearch']{ $projectDescriptionSearch=mysqli\u real\u escape\u string$conn,$\u GET['projectDescriptionSearch']; }
} 以上答案都没有 这是我最后的选择

用例:

我有一个带有两个字段的搜索表单。当用户单击“搜索”时, 这些值应添加到URL中,以便以前的搜索 可以添加书签。然后应执行搜索。 首次加载页面或未使用搜索条件时,所有 应显示可能的结果。 代码说明:

在文件顶部,检查用户是否提交了表单。 如果是: 从所需字段中获取值并将其保存到局部变量。 导航到同一个PHP文件,这次传递您感兴趣的变量 如果用户未提交表单: 检查URL参数 如果存在URL参数,请将其保存到局部变量, 并使用这些局部变量来运行搜索 代码段:

ifisset$\u POST['submit']{ 如果!空$\u POST['projectNameSearch']{ $projectNameSearch=mysqli\u real\u escape\u string$conn,$\u POST['projectNameSearch']; } if!空$\u POST['projectDescriptionSearch']{ $projectDescriptionSearch=mysqli\u real\u escape\u string$conn,$\u POST['projectDescriptionSearch']; } 如果$projectNameSearch!=| |$projectDescriptionSearch!={ headerLocation:projects.php?projectnamesearch=$projectnamesearch&projectdescriptionsearch=$projectdescriptionsearch; } }否则{ ifisset$\u GET['projectnamesearch']{ $projectNameSearch=mysqli\u real\u escape\u string$conn,$\u GET['projectNameSearch']; } IFAsset$\u GET['projectdescriptionsearch']{ $projectDescriptionSearch=mysqli\u real\u escape\u string$conn,$\u GET['projectDescriptionSearch']; }
}您是否有name=submit的输入?我在您的代码中没有看到完整的表单,只有一部分:我有!我不认为这是必要的,但我会将其编辑到我的帖子中,这样就不会有任何混淆。@BrittanyLayGeneralPheal您可以使用我的答案,这将满足您的需要您有name=submit的输入吗?我没有看到您代码的完整表单,只有一部分:我有!我不认为这是必要的,但我会将其编辑到我的帖子中,这样就不会有任何混乱。@BrittanyLayGeneralPheal你可以使用我的答案,这将满足你的需要这对我不起作用-出于同样的原因,我的第三个示例不起作用-它只拉入$action=;页面加载时的值,并且在表单提交时不拉入$u POST['hp']的值,因此它总是转到action1。这对我不起作用-与我的第三个示例不起作用的原因相同-它只拉入$action=;页面加载时的值,并且不会在表单提交时拉入$\u POST['hp']的值,因此它总是转到action1。