Подскажите, как можно решить задачу

mds24
На сайте с 19.12.2009
Offline
9
497

Доброго времени суток!

Подскажите, как можно решить задачу.

Внизу страницы есть форма для добавления статей.

Верху над формой много текста. Скрипт проверяет поля ввода и если что-то не так, то причина ошибки выводится прям над формой. Проблема в том, что после проверки скрптом, перезагружается страница и естественно становится на начало, при этом формы с надписями об ошибки или успешной отправки в области экрана невидно. Как сделать так чтоб при перезагрузки страницы автоматом на экране показывалась именно область формы? Типа как при срабатывании ссылки на якорь.

Сразу скажу, что такие варианты как форма на отдельной страницы или перенос ее в верхнею часть страницы, моим заказчиком сильно не приветствуется.

Вот на всякай случай код скрипта:

<?php

# Функции

function formtohtml ($str) {

if (get_magic_quotes_gpc()) {

$str = stripslashes($str);

}

$str = trim($str);

$str = htmlspecialchars ($str, ENT_QUOTES);

$str = str_replace("|", "/", $str);

$str = str_replace("\r", "", $str);

$str = str_replace("\n", "<br>", $str);

$str = eregi_replace("(<br>*){2,}","<br><br>",$str);

$str = eregi_replace("[ ]{2,}", " ", $str);

return $str;

}

function htmltoform ($str) {

$str = str_replace("&amp;", "&", $str);

$str = str_replace("&quot;", "\"", $str);

$str = str_replace("&#039;", "'", $str);

$str = str_replace("&lt;", "<", $str);

$str = str_replace("&gt;", ">", $str);

$str = str_replace("<br>", "\r\n", $str);

return $str;

}

# Отправка

if (!empty($_GET['a']) and $_GET['a'] == "m") {

$var['fields'] = array("name"=>"автор", "email"=>"e-mail", "zip"=>"Название", "message"=>"Основной текст");

$notice['error'] = array();

foreach ($var['fields'] as $key => $value) {

if (empty($_POST[$key]) || (($_POST[$key] = formtohtml($_POST[$key])) == "0")) $notice['error'][] = $value;

}

if (empty($notice['error'])) {

if (preg_match("/^([a-z,0-9,_,\-,\.])+\@([a-z,0-9,_,\-])+(\.([a-z,0-9])+)+$/",$_POST['email'])) {

$t['c'] = file($config['recip_f']);

$t['n'] = sizeof($t['c']);

for ($i=0;$i<$t['n'];$i++) {

$t['c'][$i] = explode("|",trim($t['c'][$i]));

}

if (!empty($_POST['recip']) and !empty($t['c'][$_POST['recip']-1])) {

$var['recip_n'] = $t['c'][$_POST['recip']-1][1];

$var['recip_e'] = $t['c'][$_POST['recip']-1][0];

if (function_exists("imap_binary")) {

function mail_convert($str) {

$str = trim(imap_binary(addcslashes($str, "\"!@\\!@(!@)")));

return $str;

}

$var['subj'] = "=?Windows-1251?B?".trim(imap_binary(htmltoform($_POST['subject'])))."?=";

$var['header'] = "From: =?Windows-1251?B?".mail_convert(htmltoform($_POST['name']))."?= <".$_POST['email'].">\r\n";

$var['header'] .= "MIME-Version: 1.0\r\n";

$var['header'] .= "Content-Transfer-Encoding: 8bit\r\n";

$var['header'] .= "Content-Type: text/plain; charset=\"Windows-1251\"\r\n";

$var['header'] .= "X-Mailer: PHP v.".phpversion();

$var['message'] = htmltoform($_POST['zip'])."\r\n";

$var['message'] .= htmltoform($_POST['message']);

if (!empty($config['features'])) $var['message'] .= "\r\n\r\n---------------------------------------\r\nIP адрес отправителя: ".$_SERVER['REMOTE_ADDR'];

# Пытаемся послать сообщение

if (mail("=?Windows-1251?B?".mail_convert(htmltoform($var['recip_n']))."?= <".$var['recip_e'].">",$var['subj'],$var['message'],$var['header'])) {

$notice['ok'] = "Сообщение успешно отправлено";

}

else {

$notice['error'] = "Системная ошибка - сбой функции &quot;mail&quot;";

}

}

else {

$notice['error'] = "Ошибка программы - недоступна функция &quot;imap_binary&quot;";

}

}

else {

$notice['error'] = "Ошибка настоек программы - неверный получатель";

}

}

else {

$notice['error'] = "Пожалуйста, проверьте правильность e-mail";

}

}

else {

$notice['error'] = "Пожалуйста, введите ".implode(", ",$notice['error']);

}

}

echo "<table width=\"610\" border=\"0\" align=\"center\" cellpadding=\"3\" cellspacing=\"0\">\r\n";

if (empty($notice['ok'])) {

echo "<form name=\"SM\" method=\"POST\" action=\"".$_SERVER['PHP_SELF']."?a=m\">\r\n";

}

else {

// ПРИ ВОЗНИКНОВЕНИИ ОШИБКИ "METHOD POST NOT ALLOWED" ИЗМЕНИТЬ "POST" на "GET"

echo "<form name=\"GT\" method=\"GET\" action=\"".$config['url_path']."\">\r\n";

}

# Сообщение о завершении / ошибке

if (!empty($notice)) {

echo "<tr><td align=\"center\">";

if (!empty($notice['ok'])) {

echo "<p><b><font color=\"#99CC00\">".$notice['ok']."!</font></b></p>";

}

elseif (!empty($notice['error'])) {

echo "<p><b><font color=\"#FF6633\">".$notice['error']."!</font></b></p>";

}

echo "</td></tr>\r\n";

}

# Вывод формы

if (empty($notice['ok'])) {

echo "<tr><td align=\"center\">";

require("./form.inc");

echo "</td></tr>\r\n";

}

echo "<tr><td align=\"center\"><table border=\"0\" cellpadding=\"5\" cellspacing=\"0\"><tr><td>";

# Кнопки

if (empty($notice['ok'])) {

echo "<input type=\"submit\" value=\"Отправить\"></td>\r\n";

echo "<td><input type=\"reset\" value=\"Сбросить\">\r\n";

}

else {

echo "<input type=\"submit\" value=\"".$config['url_name']."\">\r\n";

}

echo "</td></tr></table></td></tr>\r\n";

echo "<tr><td align=\"center\"></td></tr>\r\n";

echo "</form></table>\r\n";

?>

Белый каталог сайтов DreamLink.nov.ru (http://dreamlink.nov.ru/) Профессиональные базы каталогов (http://dreamlink.nov.ru/bases.html)
B
На сайте с 18.08.2009
Offline
9
bur
#1

При формировании страницы с ошибкой передайте фокус на поле с ошибкой.

<body onload="document.myTextArea.focus();"> (или что у вас там)

Эмбрион SEO блога или Блог SEO эмбриона (http://evafobia.ru)
Jekyll
На сайте с 04.05.2009
Offline
111
#2

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

location: page.php#anchor

вроде так

S
На сайте с 27.02.2007
Offline
60
#3

1) onload="window.scrollBy(0,200);"

2) onload="window.location.hash='a';" (а возле сообщения об ошибке стоит <a name="a"></a>)

3) onload="document.myTextArea.focus();" (нужно было код своего form.inc показать)

4) вместо onload во втором варианте, пишем в пхп-скрипте Header("Location: http://".$_SERVER["HTTP_HOST"]."/имя_страницы#a");

5) смотрим, как тут происходит реакция на НЕСУЩЕСТВУЮЩИЙ, но лексически правильный емаил. Например: a@a.ru

Проверка происхотит аяксом и страница не перезагружается вообще.

6) аналогично 5 варианту, но не с окошком сообщения, в с выводом на страницу (подбор логина)

Создание сайтов, документация... (http://site3k.net/), сайт нашей дизайн-студии (http://website-it.ru/)
mds24
На сайте с 19.12.2009
Offline
9
#4
bur:
При формировании страницы с ошибкой передайте фокус на поле с ошибкой.
<body onload="document.myTextArea.focus();"> (или что у вас там)

Принцип понял. Спасибо. Покопаюсь. :)

mds24 добавил 02.01.2010 в 18:48

Supervisork:
1) onload="window.scrollBy(0,200);"
2) onload="window.location.hash='a';" (а возле сообщения об ошибке стоит <a name="a"></a>)
3) onload="document.myTextArea.focus();" (нужно было код своего form.inc показать)
4) вместо onload во втором варианте, пишем в пхп-скрипте Header("Location: http://".$_SERVER["HTTP_HOST"]."/имя_страницы#a");
5) смотрим, как тут происходит реакция на НЕСУЩЕСТВУЮЩИЙ, но лексически правильный емаил. Например: a@a.ru
Проверка происхотит аяксом и страница не перезагружается вообще.
6) аналогично 5 варианту, но не с окошком сообщения, в с выводом на страницу (подбор логина)

<table width="605" border="1" cellpadding="6" cellspacing="0" bordercolor="#999999" bgcolor="#F5F5F5">

<tr>

<td>

<table width="590" border="0" cellpadding="3" cellspacing="0">

<tr>

<td align="right">

Автор (ИФ или псевдоним):</td>

<td nowrap><div align="left"><input style="width: 160px" class="F2" maxlength="50" name="name" <?php if (!empty($_POST['name'])) echo " value=\"".$_POST['name']."\""; ?>size="14"></div></td>

</tr>

<tr>

<td align="right">

E-Mail (для согласования):</td>

<td><div align="left"><input style="width: 160px" class="F2" maxlength="35" name="email" <?php if (!empty($_POST['email'])) echo " value=\"".$_POST['email']."\""; ?>size="14"></div></td>

</tr>

<tr>

<td align="right">Название:</td>

<td><div align="left"><input style="width: 190px" class="F2" maxlength="10" name="zip" <?php if (!empty($_POST['zip'])) echo " value=\"".$_POST['zip']."\""; ?>size="14" /></div> </td>

</tr>

<tr>

<tr>

<td align="right" valign="top">

Основной текст:</td>

<td><div align="left"><textarea class="F3" name="message" rows="5" cols="45"><?php if (!empty($_POST['message'])) echo htmltoform($_POST['message']); ?></textarea></div></td>

</tr>

</table>

</td>

</tr>

</table>

Вот!

Но я в принципы понял :)

Спасибо огромное :)

S
На сайте с 27.02.2007
Offline
60
#5

ты б не писал такое:

<?php if (!empty($_POST['name'])) echo " value=\"".$_POST['name']."\""; ?>

пиши просто:

<?=@$_POST['name'];?>

Красота! :)

mds24
На сайте с 19.12.2009
Offline
9
#6

Окей! :)

Вообще скрипт не мой.

mds24 добавил 02.01.2010 в 23:22

echo "<table width=\"610\" border=\"0\" align=\"center\" cellpadding=\"3\" cellspacing=\"0\">\r\n";

if (empty($notice['ok'])) {

echo "<form name=\"SM\" method=\"POST\" action=\"".$_SERVER['PHP_SELF']."?a=m"."#m\">\r\n";

}

Не зная может так не кто не делает, но все работает. :)

Спасибо всем. Всех с Новым годом! 🍾

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий