Я работаю над формой, в которой я хотел бы изменить действие формы, основываясь на значении ввода при отправке формы. Это должно быть достигнуто с помощью 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>
Это не работает, потому что hp
поле для (isset($_POST["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-файл, и в этом файле получить содержимое этого ввода через POST и перенаправить в правильный файл.
Второй вариант — добавить событие в форму при отправке через 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), возможно, вам подойдут третьи варианты.
Если 2-я и 3-я версии не работают, вы должны пропустить ввод, например:
<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";
}
}
?>