- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Доброго времени суток!
Подскажите, как можно решить задачу.
Внизу страницы есть форма для добавления статей.
Верху над формой много текста. Скрипт проверяет поля ввода и если что-то не так, то причина ошибки выводится прям над формой. Проблема в том, что после проверки скрптом, перезагружается страница и естественно становится на начало, при этом формы с надписями об ошибки или успешной отправки в области экрана невидно. Как сделать так чтоб при перезагрузки страницы автоматом на экране показывалась именно область формы? Типа как при срабатывании ссылки на якорь.
Сразу скажу, что такие варианты как форма на отдельной страницы или перенос ее в верхнею часть страницы, моим заказчиком сильно не приветствуется.
Вот на всякай случай код скрипта:
<?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("&", "&", $str);
$str = str_replace(""", "\"", $str);
$str = str_replace("'", "'", $str);
$str = str_replace("<", "<", $str);
$str = str_replace(">", ">", $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'] = "Системная ошибка - сбой функции "mail"";
}
}
else {
$notice['error'] = "Ошибка программы - недоступна функция "imap_binary"";
}
}
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";
?>
При формировании страницы с ошибкой передайте фокус на поле с ошибкой.
<body onload="document.myTextArea.focus();"> (или что у вас там)
Вы же сами на вопрос и ответили - поставьте якорь, и при ошибке добавляйте заголовок
location: page.php#anchor
вроде так
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 варианту, но не с окошком сообщения, в с выводом на страницу (подбор логина)
При формировании страницы с ошибкой передайте фокус на поле с ошибкой.
<body onload="document.myTextArea.focus();"> (или что у вас там)
Принцип понял. Спасибо. Покопаюсь. :)
mds24 добавил 02.01.2010 в 18:48
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>
Вот!
Но я в принципы понял :)
Спасибо огромное :)
ты б не писал такое:
<?php if (!empty($_POST['name'])) echo " value=\"".$_POST['name']."\""; ?>
пиши просто:
<?=@$_POST['name'];?>
Красота! :)
Окей! :)
Вообще скрипт не мой.
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";
}
Не зная может так не кто не делает, но все работает. :)
Спасибо всем. Всех с Новым годом! 🍾