#php #forms #html #contact
#php #формы #HTML #Контакты
Вопрос:
Мы используем PHP для создания страницы продукта для веб-сайта галереи, использующего GetSimple 3.0 CMS. Мы пытаемся создать контактную форму, которая отображается при нажатии кнопки. По умолчанию контактная форма находится в DIV, для которого установлено значение display: none. При нажатии на кнопку отображается: block. Когда пользователь нажимает кнопку отправки формы и вызывает действие, оно загружает contact.php файл и сбрасывает DIV на display: none, в результате чего пользователь не видит текст соответствия, который была отправлена его форма. Вы можете увидеть это, только снова нажав на кнопку контакта и отобразив этот DIV для блокировки вручную.
Мы бы хотели, чтобы DIV контактной формы сохранялся после нажатия кнопки отправки. Я не думаю, что показ нашего кода был бы полезен. Мы просто пытаемся найти способ реализовать эту идею, если это возможно.
В настоящее время наш веб-сайт все еще находится на ранней стадии разработки и все еще размещается локально.
Спасибо за любую помощь.
Комментарии:
1. Итак, по сути, вы хотите, чтобы форма автоматически отображалась после того, как пользователь использовал ее хотя бы один раз? Например, PHP-файл, который обрабатывает отправку формы, возвращает пользователя в ту же форму?
2. в принципе, это правда. contact.php файл является частью плагина, который устанавливает текстовые поля, используемые для формы, а затем при отправке проверяет информацию о форме. Если форма заполнена правильно, форма скрывается и заменяется div, в котором есть сообщение с благодарностью / подтверждением. Если какое-либо из полей не было заполнено должным образом, средство проверки распознает это и отображает текст о том, что им нужно сделать, чтобы исправить то, что они ввели. В любом случае при нажатии кнопки отправки загружается content.php страница, а затем div, содержащий форму, возвращается к отображению: нет; вместо оставшегося блока.
Ответ №1:
используйте отправку ajax этой конкретной формы, чтобы фокус не терялся, даже страница не обновлялась
Комментарии:
1. Рассмотрите возможность добавления некоторых деталей к вашему ответу. Что вы имеете в виду? Как бы он это сделал? Приведите пример кода.
Ответ №2:
Если вы можете редактировать PHP-код, используемый для создания страницы, вы всегда можете динамически отображать стиль в зависимости от запроса, например:
<div style="display:<?php echo (isset($_REQUEST['answer'])) ? 'block' : 'none';?>>
Thank you!
</div>
<form action="contact.php" method="post">
<input type="hidden" name="answer" />
...
</form>
Вы также можете отправить форму без перезагрузки страницы, например, с помощью jQuery.Формы
Ответ №3:
Если и форма, и файл PHP находятся в Contact.php , вы могли бы рассмотреть возможность использования этого:
<div id="formWarp" <? if($_POST["contact"] == "true"){ echo 'style="display:none" '; } ?>>
<form method="POST" action="Contact.php">
<input type="text" name="something"/>
<input type="hidden" name="contact" value="true"/>
</form>
Вы можете включить в форму любые другие <input>
.
Комментарии:
1. Это то, к чему мы стремились. Однако наш contact.php файл является частью более крупного плагина контактной формы. HTML, который он выдает, получен из переменной php $ html, которая, похоже, использует свой собственный специальный синтаксис. Я просто не знаю, как записать эту первую строку в наш contact.php файл
2.
public function html() { $html = '<form action="#p01-contact' . $this->id . '" autocomplete="off" '; $html .= 'id="p01-contact' . $this->id . '" class="p01-contact" method="post">'; $html .= $this->html_status(); }
Это выглядит примерно так3. можно ли управлять опубликованной вами функцией? или это часть CMS?
4. Этим можно манипулировать. для плагина, используемого CMS, есть графический интерфейс, но на самом деле он используется только для настройки отображаемых текстовых полей и занесения в черный список определенных записей данных, таких как известные адреса электронной почты для рассылки спама.
5. Эта функция вызывается только для contact.php файл?
Ответ №4:
РЕДАКТИРОВАТЬ: полностью изменено, чтобы отразить новую информацию, полученную для более прямого решения проблемы.
Читая ваши комментарии выше, я вполне уверен, что мы смотрим на неправильную функцию для редактирования. Элемент-оболочка отсутствует в опубликованной вами функции, для чего необходимо переключить его отображение.
как только вы найдете этот блок кода, мы можем отредактировать его, чтобы найти наличие данных post, которые указывали бы на то, что страница загружается после отправки формы (я не могу обещать, что это не приведет к ее срабатыванию в неподходящее время, если на этой странице есть более одной формыстраница) и напишите в атрибуте style, чтобы перезаписать значение по умолчанию, если проверено true.
Где-то в этом плагине будет что-то, определяющее элемент оболочки forms
$html = '<div id="some-unique-id" class="some-class-name">';
Вы можете разбить эту строку и поставить тест на данные post, добавив атрибут встроенного стиля, если он найден
$html = '<div id="some-unique-id" class="some-class-name"'; //tag left open
if(isset($_POST) amp;amp; (count($_POST))){ //Some Post Data Exists
$html .= ' style="display:block;"'; //Add display overwrite
}//Some Post Data Exists
$html .= '>'; //close the tag
Тест, который мы выполняем здесь if(isset($_POST) amp;amp; (count($_POST))){
, проверяет, чтобы убедиться, что А) $_POST
существует и Б) в нем есть хотя бы один элемент (это использует манипулирование типами для преобразования числового результата из count()
в его логический эквивалент (где будет проверяться все, что больше 0 true
)
Теперь, как я уже упоминал, на этой странице может быть более одной формы, и, возможно, она будет отображаться впоследствии, что автоматически отобразит вашу контактную форму, когда вы не хотите, чтобы она отображалась. Основываясь на примере, который вы предоставили в комментарии, похоже, что эта функция существует внутри класса. Если блок кода, который мы ищем, существует в том же классе, возможно, можно использовать id
атрибут, чтобы ограничить проверку для отправки данных из интересующей вас формы.
$html = '<div id="some-unique-id" class="some-class-name"';
//Check for contact form specific post data
//(if $this->id is within scope and still the same)
if(isset($_POST) amp;amp; (isset($_POST['p01-contact' . $this->id]))){
$html .= ' style="display:block;"'; //Add display overwrite
}//Post Data Exists
$html .= '>';
В этом тесте мы надеемся, что $this
она существует, и атрибут id
of $this
тот же, что и во время первоначального создания формы, чтобы мы могли искать данные post, связанные с конкретной контактной формой. (имя, которое мы ищем, основано на примере кода, который вы опубликовали в качестве комментария)
К сожалению, не глядя на источник сайта / плагина, я не смогу сказать вам, где вы можете найти то, что ищете. Как только вы найдете ее, хотя, надеюсь, один из этих двух сценариев решит вашу проблему.
Это общедоступный плагин, на который мы могли бы посмотреть, или что-то разработанное собственными силами?
Комментарии:
1. Ajax действительно отсутствует на картинке, потому что я знаю об этом меньше, чем о PHP. Решение iframe было тем, что мы рассматривали ранее, но не смогли найти элегантный способ его использования.