[PHP] Forum blijft submitted op refresh

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
In edit_brands.php heb de volgende code:

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
<script language="JavaScript">
function submitForm()
{
    document.frm_add_brand.submitted.value = "yes";
    document.frm_add_brand.submit();
}
</script>

<form name="frm_add_brand" action="edit_brands.php" method="post">
  <input type="hidden" name="submitted" value="">
  <input name="brand_name" type="text">
  <input type="button" value="add brand" onclick="submitForm();">
</form>


en bovenin de pagina de volgende PHP:
PHP:
1
2
3
4
5
6
7
8
if (isset($_POST['submitted'])) {
    if (isset($_POST['brand_name'])) {
        $qry_insert_brand = "INSERT INTO brands (brand_id, brand_name)".
                            "VALUES ('', '".$_POST['brand_name']."')";
        $qid_insert_brand = db_query($qry_insert_brand, 0, 0);
        unset($_POST['submitted']);
    }
}


Met andere woorden: als iemand in het form een brand name tikt, en het form submit, wordt deze toegevoegd aan de tabel met brands. Echter - als je daarna op refresh drukt, voert hij die code telkens opnieuw uit en wordt hetzelfde brand telkens in een nieuwe recordset aan de database toegevoegd!

Ik heb dit proberen tegen te gaan door $_POST['submitted'] te unsetten nadat de query is uitgevoerd:
PHP:
1
2
3
4
5
6
7
8
if (isset($_POST['submitted'])) {
    if (isset($_POST['brand_name'])) {
        $qry_insert_brand = "INSERT INTO brands (brand_id, brand_name)".
                            "VALUES ('', '".$_POST['brand_name']."')";
        $qid_insert_brand = db_query($qry_insert_brand, 0, 0);
        unset($_POST['submitted']; <<<<<
    }
}

Maar dit werkt niet.

Hoe ga ik op een goede manier tegen dat, nadat het form gesubmit is en het brand is toegevoegd, de query niet nog een keer wordt afgevuurd als iemand op F5 drukt?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

Verwijderd

Als een gebruiker de pagina refreshed, worden alle waarden opnieuw naar de server verstuurd. Als ik jou was, zou ik de gebruiker redirecten naar dezelfde pagina (via een header("Location: "), of via javascript).

Succes ermee :)

Acties:
  • 0 Henk 'm!

  • Shadowman
  • Registratie: Januari 2002
  • Niet online
Eerst een select op de database uitvoeren om te kijken of de brand_name er al in staat. En als dat niet het geval is die dan toevoegen lijkt me dan toch het makkelijkst.

Je javascript zit trouwens ook niet handig in elkaar. Je zet bij het submitten automatisch die variabele op "yes".

Acties:
  • 0 Henk 'm!

  • JoostMartijn
  • Registratie: December 2003
  • Laatst online: 17-04 15:22
Hmm... je wilt brand_id in je tabel wegschrijven terwijl je deze geen waarde mee geeft. Ik neem aan dat dit dat een auto-nummering is. Volgens mij hoef je deze dan ook niet apart te inserten.

Je kan het beste ook even proberen om de insert even te testen zonder formulier.

succes er mee

Windsoft


Acties:
  • 0 Henk 'm!

  • dingstje
  • Registratie: Augustus 2002
  • Laatst online: 02-01-2024
Genereer een hash, zet die in je form en in een session, je controleert of de key overeenkomt met de sessionkey en zoja, dan unset je die key en insert je in je database. Zonee, dan is je session zonet geunset en throw je een error.

If you can't beat them, try harder