2017-04-17 33 views
1

我正在處理表單,我想根據表單提交中的輸入值改變表單操作。這需要使用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字段沒有值從一開始走,所以它總是轉到動作1。

我也試過:

<?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; ?>"> 

這並不起作用,因爲鱸魚(這是被建立在CMS)拋出你$action尚未定義的錯誤。

,當我試圖:

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

它沒有做任何事情上提交,因爲它設定的行動是「」。

有什麼建議嗎?

+0

你有'name =「submit」'輸入嗎? – Barmar

+0

我沒有在你的代碼中看到一個完整的表單,只是一個部分:'

」>其餘的在哪裏? –

+0

我願意!我不認爲這是必要的,但我會將其編輯到我的文章中,以免混淆。 –

回答

2

要在短的路

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

這是所有寫。

0

如果第二和第三個版本不工作,你必須缺少像輸入:

<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"; 
    } 
    }  
?> 
+0

這不適用於我 - 出於同樣的原因,我的第三個例子沒有工作 - 它只拉動'$ action =「」'value在頁面加載時,並不會在表單提交中拉取'$ _POST ['hp'])'的值,因此它總是進入action1。 –

+0

'var_dump($ _ POST)'顯示什麼? – Barmar

1

型動物的可能性:

同樣的作用和重定向

最簡單的方法可能是將表單發送到相同的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> 

使用數據綁定庫

這可能是做的最好形式,但最複雜understad,這種形式是基於使用數據綁定庫像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這樣的數據綁定的框架),第三個選項可能是最適合你的。