2015-05-14 3 views
1

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

<form action="" method="post"> 
<input type="submit" value="Purchase" id="btn" name="link_credits"> 
</form> 

if(isset($_REQUEST['link_credits'])) 
{ 
echo "success"; 
//some codes here with sql statements 
} 
Else 
{ 
echo " Please try Again tomorrow"; 
} 

?> 

Проблема:

Я не хочу, чтобы выполнить запрос с обновлением страницы, он должен запустить код только при нажатии кнопки мыши.

+0

который, нормальный. Что за вопрос? –

+0

под редакцией. извините за столь быструю отправку – zeeshan

+0

http://stackoverflow.com/questions/6320113/how-to-prevent-form-resubmission-when-page-is-refreshed-via-php – Danijel

ответ

1

Просто добавьте строку unset ($ _ REQUEST ['link_credits']); в цикле успеха

if(isset($_REQUEST['link_credits'])) 
    { 
    echo "success"; 
    //some codes here with sql statements 

    if($success){ 
    $_SESSION['msg']="Data Added successfully"; 
    } 
    else{ 
    $_SESSION['msg']="Data Not Added successfully.Please Check"; 
    } 
    unset($_REQUEST['link_credits']); 
    header("Location:--somepage.php--");  
    } 
    else 
    { 
    echo " Please try Again tomorrow"; 
    } 

Тогда вы можете показать значение $_SESSION['msg'] в --somepage.php-- и после показа использования unset($_SESSION['msg']);

+0

не работает, в такой же ситуации – zeeshan

+0

check отредактированный ответ –

+0

это работает ... но проблема в том, что он не отображает сообщение об успешном завершении. Могу ли я установить таймер перед его переадресацией на следующую страницу – zeeshan

1

Ваш браузер должен быть предупреждаю, что обновление страницы будет повторно отправить форма. Таким образом, вы нажимаете кнопку, даже когда вы обновляете страницу, или используете сломанный браузер.

Все, что было сказано, вот некоторые возможные решения:

  1. Cookie браузер во время «успех» фразы, и только позволяют условия успеха работать, если куки не установлен/нет.

  2. Узнайте о «Перенаправление после POST», что вам нужно должно быть здесь. По сути, вы выполняете действие успеха, устанавливаете флаги как apropos и пересылаете браузер (через заголовок PHP()) на страницу с надписью «Хорошо, это сработало!».

0

Измените условие if на.

if(isset($_POST['link_credits'])){ 
echo "success"; 
//some codes here with sql statements 
} 
else 
{ 
echo " Please try Again tomorrow"; 
} 
+0

его запустить, попробуйте еще раз, я нажму кнопку. Существует более 5 форм с разными именами. Я надеюсь, что это не должно повлиять на код – zeeshan

+0

Вы можете использовать любое количество кнопок, но каждая кнопка должна иметь уникальные имена и использовать, если условия соответственно 'if (isset ($ _ POST ['button_name']))' –

0

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

Решение:

if(isset($_REQUEST['link_credits'])) { 
    echo "success"; 
    $_REQUEST['link_credits'] = null; 
} else { 
    echo " Please try Again tomorrow"; 
} 
+0

не работает. одна и та же – zeeshan

0

Это произошло из-за просто на обновления она представит свой запрос.

Итак, идея решить эту проблему, вылечив ее корень причины.

Я имею в виду, что мы можем настроить одну переменную сеанса внутри формы и проверить ее при обновлении.

if($_SESSION["csrf_token"] == $_POST['csrf_token']) 
{ 
// submit data 
} 

//inside from 

$_SESSION["csrf_token"] = md5(rand(0,10000000)).time(); 

<input type="hidden" name="csrf_token" value=" 
htmlspecialchars($_SESSION["csrf_token"]);"> 
Смежные вопросы