формы — Изменение действия на основе входного значения с использованием переполнения стека

Я работаю над формой, в которой я хотел бы изменить действие формы, основываясь на значении ввода при отправке формы. Это должно быть достигнуто с помощью 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";
}
}
?>

Он ничего не сделал при отправке, потому что установил действие как «».

Какие-либо предложения?

1

Решение

Писать коротко

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

Это все.

2

Другие решения

Разные возможности:

Вероятно, самый простой способ — это отправить форму в тот же 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), возможно, вам подойдут третьи варианты.

1

Если 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";
}
}
?>
0
По вопросам рекламы [email protected]