Может есть какой-нибудь простой и интересный способ?
Спасибо.
Спустя 5 минут, 54 секунды (3.02.2010 - 16:07) sergeiss написал(а):
Вообще, странные какие-то пользователи... 
Попробуй так сделать:
- в onsubmit вызываешь функцию
- в этой функции проверяешь некую переменную, которая при первом вызове функции равна true, а потом заменяется на false
- эта функция возвращает значение этой переменной
Тогда при первом нажатии кнопки submit будет выполнен, а затем браузер может тормозить сколько угодно, и юзер может кнопать сколько угодно - больше не будет ни одного (лишнего) сабмита.
PS. Тему переместил в JavaScript.

Попробуй так сделать:
- в onsubmit вызываешь функцию
- в этой функции проверяешь некую переменную, которая при первом вызове функции равна true, а потом заменяется на false
- эта функция возвращает значение этой переменной
Тогда при первом нажатии кнопки submit будет выполнен, а затем браузер может тормозить сколько угодно, и юзер может кнопать сколько угодно - больше не будет ни одного (лишнего) сабмита.
PS. Тему переместил в JavaScript.
Спустя 14 минут, 30 секунд (3.02.2010 - 16:22) VoLk88 написал(а):
sergeiss
Пробовал, но не понимаю. Может потому что сегодня экзамен сдавал)
Мы вызываем функцию. При каждом вызове функции, будут декларироваться переменные.
Пробовал, но не понимаю. Может потому что сегодня экзамен сдавал)
Мы вызываем функцию. При каждом вызове функции, будут декларироваться переменные.
Спустя 1 минута, 59 секунд (3.02.2010 - 16:24) sergeiss написал(а):
Нет, переменная должна быть объявлена вне функции, до неё!!! А в функции мы ее просто проверяем (сначала), и изменяем (если нужно).
var first_time=true;
function if_submit()
{
if( first_time )
{
first_time=false;
return true;
}
return false;
}
Спустя 6 минут, 7 секунд (3.02.2010 - 16:30) VoLk88 написал(а):
int n=0;
function subForm()
{
//subnow = true;
if(n == 0)
{
return false;
}
else
{
return true;
}
n=n+1;
}
<input type=submit name=submit value="Добавить" onSubmit="this.disabled=subForm()">
так? не работает(
Спустя 2 минуты, 45 секунд (3.02.2010 - 16:33) sergeiss написал(а):
Ёпрст... Во-первых, в твоей функции до n=n+1; дело никогда не дойдет 
Во-вторых - зачем disabled???
И начинку функции сделай, как я написал.

Во-вторых - зачем disabled???
onsubmit="return subForm()"
И начинку функции сделай, как я написал.
Спустя 7 минут, 5 секунд (3.02.2010 - 16:40) VoLk88 написал(а):
пробовал вашим скриптом, писал onSubmit="return if_submit()", результат такой же, проскакивает сразу несколько
Спустя 3 минуты, 1 секунда (3.02.2010 - 16:43) DedMorozzz написал(а):
покажи код ф-ии Иф_сабмит
Спустя 4 минуты, 33 секунды (3.02.2010 - 16:47) VoLk88 написал(а):
DedMorozzz
вот, как мне sergeiss дал, я ничего не менял
var first_time=true;
function if_submit()
{
if( first_time )
{
first_time=false;
return true;
}
return false;
}
вот, как мне sergeiss дал, я ничего не менял
Спустя 8 минут, 3 секунды (3.02.2010 - 16:55) DedMorozzz написал(а):
скорее всего ты не сравниваешь значение ф-и, а проверяешь тру иль фолс переменной "фёст тайм". её тогда и возвращай. Покажи как используешь ответ.
Спустя 4 минуты, 59 секунд (3.02.2010 - 17:00) VoLk88 написал(а):
<input type=submit name=submit value='Добавить' onSubmit=\"return if_submit()\">
я правда этого не понимаю, думаю что правильно было делать:
<input type=submit name=submit value='Добавить' onClick=\"this.disabled=if_submit()\">
но при таком раскале вообще ничего не отправляется
я правда этого не понимаю, думаю что правильно было делать:
<input type=submit name=submit value='Добавить' onClick=\"this.disabled=if_submit()\">
но при таком раскале вообще ничего не отправляется
Спустя 3 минуты, 32 секунды (3.02.2010 - 17:04) sergeiss написал(а):
Цитата (VoLk88 @ 3.02.2010 - 18:00) |
<input type=submit name=submit value='Добавить' onSubmit=\"return if_submit()\"> |
А чего тут за каша такая??? Часть в апострофах, часть в кавычках, часть без этого всего, "голышом"... И слэши тут для чего? Эта строка выводится через echo? Или у тебя прямо в браузер такая строка передается, со слэшами?
Мне так кажется, что ты просто "накосячил" с синтаксисом

Попробуй в первой строке функции написать alert( 'In function' ); и посмотри, выйдет ли эта строка.
Спустя 1 минута, 51 секунда (3.02.2010 - 17:06) VoLk88 написал(а):
через эхо, поэтому и экранировал
Спустя 1 минута, 29 секунд (3.02.2010 - 17:07) sergeiss написал(а):
Цитата (VoLk88 @ 3.02.2010 - 18:06) |
через эхо, поэтому и экранировал |
Сделай всё однотипно. Лучше - в кавычках.
Спустя 13 секунд (3.02.2010 - 17:07) DedMorozzz написал(а):
onSubmit=\"if_submit()\" без ретёрн
Спустя 5 минут, 55 секунд (3.02.2010 - 17:13) VoLk88 написал(а):
пробовал без ретёрн, тоже самое.
кстати, алерт не срабатывает.
сейчас буду разбираться.
кстати, алерт не срабатывает.
сейчас буду разбираться.
Спустя 1 минута, 42 секунды (3.02.2010 - 17:15) Lenarfate написал(а):
можешь попробывать сделать так, чтобы при нажатие сабмита запускался js типа
например
document.location.href="index.php"
например

Спустя 1 минута, 51 секунда (3.02.2010 - 17:17) DedMorozzz написал(а):
кстати, сергейсс, а тут разве не так:
function if_submit()
{
if( first_time==true)
{
first_time=false;
return true;
}
else
{
return false;
}
}
Спустя 4 минуты, 10 секунд (3.02.2010 - 17:21) sergeiss написал(а):
Цитата (DedMorozzz @ 3.02.2010 - 18:17) |
кстати, сергейсс, а тут разве не так: |
А зачем, если это и так логическая величина? Которая изначально объявлена как true, и потом заменяется на false. И else не нужен!!! Потому что, если условие верно, то изнутри ифа выйдешь из функции.
Цитата (VoLk88 @ 3.02.2010 - 18:13) |
сейчас буду разбираться. |
Сделай всё однотипно!!!
echo '<input type="submit" name="submit" value="Добавить" onSubmit="return if_submit()" />
Спустя 1 минута, 6 секунд (3.02.2010 - 17:22) DedMorozzz написал(а):
ах да. булеан...торможу

Спустя 4 минуты (3.02.2010 - 17:26) sergeiss написал(а):
Цитата (DedMorozzz @ 3.02.2010 - 18:22) |
торможу |
И еще раз повторю - else (как ты написал) не нужен!

Спустя 2 минуты, 3 секунды (3.02.2010 - 17:28) DedMorozzz написал(а):
да понял уже
я ж написал

Цитата |
Цитата (DedMorozzz @ 3.02.2010 - 18:22) торможу |

Спустя 14 минут, 21 секунда (3.02.2010 - 17:42) VoLk88 написал(а):
не выходит всё равно. ладно. буду гуглить дальше и разбираться)
спасибо)
спасибо)
Спустя 49 минут, 36 секунд (3.02.2010 - 18:32) Winston написал(а):
Цитата (VoLk88 @ 3.02.2010 - 16:01) |
Столкнулся с проблемой. Пользователи нажимают несколько раз на сабмит и на сервер несколько раз улетает содержимое формы. Притяного мало. Не хочу ограничивать сильно пользователей и делать дилеи между отправками. Пробовал онклик="зис.дисаблед=1", но кнопка блокируется до того, как содержимое формы улетит. Может есть какой-нибудь простой и интересный способ? Спасибо. |
Для того чтобы такого не было, нужна защита от F5 (Refresh), тогда сколько не жми на submit, сколько не обновляйся, одна и та же инфа в базу больше не полезет, как например на этом форуме. Кстати мне самому, интересно как такую защиту реализовать, т. к. у самого те же проблемы. Может Эксперты в разделе для новичков, создадут тему Защита от F5 с пометкой ВАЖНО? чтобы раз и навсегда избавится от этих вопросов

Спустя 47 минут, 44 секунды (3.02.2010 - 19:20) arlamar написал(а):
надо с ретёрном тока зачем он в input'е?!?!??!?
так надо:
<form onsubmit="return if_submit()">
так надо:
<form onsubmit="return if_submit()">
Спустя 26 минут, 48 секунд (3.02.2010 - 19:47) ZSH написал(а):
onSubmit надо вешать на form а не input
Спустя 23 минуты, 26 секунд (3.02.2010 - 20:10) Lenarfate написал(а):
<input type="submit" name="ok">
$ok = isset($_POST['ok']) ? true : false;
if($ok)
{
//тут всякий код...
//...
header("location: ". $_SERVER['PHP_SELF']);
}
вот и все, и не надо гуглить
Спустя 2 часа, 30 минут, 44 секунды (3.02.2010 - 22:41) sergeiss написал(а):
Цитата (PHPprogramer @ 3.02.2010 - 19:32) |
Может Эксперты в разделе для новичков, создадут тему Защита от F5 с пометкой ВАЖНО? чтобы раз и навсегда избавится от этих вопросов |
Ты не поверишь, но эта тема уже многократно "обсасывалась" тут

Вот только я так понял топик-стартера, что у него проблема не с Ф5, а с тем, что очень шустрые юзеры успевают многократно "жмякнуть" по кнопке сабмит до того, как форма уйдет на обработку.
Спустя 10 часов, 20 минут, 20 секунд (4.02.2010 - 09:01) Alex VoDevil написал(а):
Ну так может просто за грэйаутить сабмит то? Прописать кнопке id = "mySubmit" а потом при сабмите формы:
document.getElementById('mySubmit').disabled = true;
и всем счастье... нет?
document.getElementById('mySubmit').disabled = true;
и всем счастье... нет?
Спустя 34 минуты, 1 секунда (4.02.2010 - 09:35) sergeiss написал(а):
Цитата (Alex VoDevil @ 4.02.2010 - 10:01) |
Ну так может просто за грэйаутить сабмит то? |
Секунд 30-40-50 пытался понять фразу... Еле дошло... А по-русски нельзя было сказать, чтоб понятнее?
Согласно правил форума основным языком является русский (п.2.4.а).
Спустя 1 час, 10 минут, 25 секунд (4.02.2010 - 10:46) Joker написал(а):
а так не проще
<form action="" method="post" onsubmit="return if_submit('submit')">
<input type="submit" id="submit">
</form>
function if_submit(id)
{
document.getElementById(id).disabled='disabled';
return true;
}
Спустя 3 минуты, 30 секунд (4.02.2010 - 10:49) Joker написал(а):
Цитата (sergeiss @ 4.02.2010 - 11:35) |
Секунд 30-40-50 пытался понять фразу... Еле дошло... А по-русски нельзя было сказать, чтоб понятнее? |
+1 после того как пост создал только дошло)
Спустя 6 минут, 33 секунды (4.02.2010 - 10:56) Alex VoDevil написал(а):
виноват, исправлюсь
Просто у меня в последние дни основным языком является английский и в силу скудоумия моего порой кодировки путаются и рождаются вот такие перлы.

Спустя 9 минут, 4 секунды (4.02.2010 - 11:05) sergeiss написал(а):
Joker - ты не предотвращаешь многократное нажатие на кнопку 
А речь идет именно об этом!!!
Вот я сделал такую тестовую хрень... И у меня получалось несколько раз нажать на кнопку!
Один раз из нескольких десятков попыток, но получается.

А речь идет именно об этом!!!
Вот я сделал такую тестовую хрень... И у меня получалось несколько раз нажать на кнопку!

<script language="javascript">
var subm=0;
function test_submit()
{
if( subm >=2 ) alert( subm );
subm++;
document.getElementById( 'pressed' ).value=subm;
}
</script>
<form action="" enctype="multipart/form-data" onsubmit="test_submit()" method="post">
<input type="text" name="txt" id="txt" value="12345" />
<input type="submit" name="s" id="s" value="press button" />
<input type="hidden" name="pressed" id="pressed" />
</form>
if( !empty( $_POST['pressed'] ) )
echo 'Нажато '.$_POST['pressed'].' раз(а)';
Спустя 7 минут, 7 секунд (4.02.2010 - 11:12) Joker написал(а):
Цитата (sergeiss @ 4.02.2010 - 13:05) |
Joker - ты не предотвращаешь многократное нажатие на кнопку |
как это? при первом же нажатии кнопка заблокируеться и хоть затыкай на неё она уже не активна....