Возникли проблемы с контактной формой PHP внутри DIV, установленной для отображения: по умолчанию нет - PullRequest
1 голос
/ 20 октября 2011

Мы используем PHP для создания страницы продукта для веб-сайта галереи, использующего GetSimple 3.0 CMS. Мы пытаемся создать контактную форму, которая отображается при нажатии кнопки. По умолчанию контактная форма находится в DIV, для которого установлено отображение: нет. При нажатии на кнопку отображается: блок. Когда пользователь нажимает кнопку отправки формы и вызывает действие, он загружает файл contact.php и сбрасывает DIV для отображения: ни один из них не приводит к тому, что пользователь не видит текст подтверждения, что его форма была отправлена. Вы можете увидеть его, только нажав на кнопку контакта еще раз и отобразив этот DIV для блокировки вручную.

Мы бы хотели, чтобы контактная форма DIV сохранялась после нажатия кнопки отправки. Я не думаю, что показ нашего кода был бы полезен. Мы просто пытаемся найти способ реализовать эту идею, если это возможно.

В настоящее время наш веб-сайт все еще находится на ранней стадии разработки и все еще находится на локальном хостинге.

Спасибо за любую помощь.

Ответы [ 4 ]

0 голосов
/ 20 октября 2011

Если и форма, и файл 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> в форму.

0 голосов
/ 20 октября 2011

РЕДАКТИРОВАТЬ: полностью изменены, чтобы отразить новую информацию, полученную для более непосредственного решения проблемы.

Читая ваши комментарии выше, я вполне уверен, что мы ищем неправильную функцию для редактирования. Элемент-обертка отсутствует в опубликованной вами функции, и именно поэтому он должен быть включен.

как только вы найдете этот блок кода, мы можем отредактировать его, чтобы найти наличие данных поста, которые бы указывали на то, что страница загружается после отправки формы (я не могу обещать, что это не вызовет его вызвать в неправильное время, если на этой странице более одной формы) и записать в атрибуте style, чтобы перезаписать значение по умолчанию, если проверено значение true.

Где-то в этом плагине будет что-то, определяющее элемент-оболочку форм

$html = '<div id="some-unique-id" class="some-class-name">';

Вы можете разбить эту строку и поставить тест для данных публикации, добавив атрибут встроенного стиля, если он найден

$html = '<div id="some-unique-id" class="some-class-name"'; //tag left open

if(isset($_POST) && (count($_POST))){ //Some Post Data Exists
  $html .= ' style="display:block;"'; //Add display overwrite
}//Some Post Data Exists

$html .= '>'; //close the tag

Тест, который мы здесь выполняем, это if(isset($_POST) && (count($_POST))){, который проверяет, чтобы убедиться, что A) $_POST существует и B) у него есть хотя бы один элемент (это использует жонглирование типов для преобразования числового результата из 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) && (isset($_POST['p01-contact' . $this->id]))){
  $html .= ' style="display:block;"'; //Add display overwrite
}//Post Data Exists

$html .= '>';

В этом тесте мы надеемся, что $this существует и атрибут id из $this такой же, как и в то время, когда форма была изначально нарисована, поэтому мы можем искать данные постов, связанные с конкретная контактная форма. (имя, которое мы ищем, основано на примере кода, который вы разместили в качестве комментария)

К сожалению, не глядя на источник сайта / плагина, я не смогу сказать вам, где вы можете найти то, что ищете. Как только вы обнаружите, что хотя бы один из этих двух сценариев должен позаботиться о вашей проблеме.

Это общедоступный плагин, на который мы могли бы взглянуть, или что-то разработанное собственными силами?

0 голосов
/ 20 октября 2011

Если вы можете редактировать код 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.Forms

0 голосов
/ 20 октября 2011

используйте ajax для отправки этой конкретной формы, чтобы фокус не потерял, даже страница не будет обновлена

...