Mencegah penambahan data ketika halaman direfresh

Teman2 sharing dong bagaimana ketika sudah submit data di form dan ketika direfresh halaman tersebut data tidak terkirim lagi.

Terima Kasih

avatar dhoeng
@dhoeng

21 Kontribusi 1 Poin

Diperbarui 5 tahun yang lalu

7 Jawaban:

di form action nya harus ke file lain (misal : input.php) agar menghindari refrest. di file input.php jika menginginkan balik ke form tadi, tinggal di redirect atau header location.

avatar Nandar
@Nandar

648 Kontribusi 204 Poin

Dipost 5 tahun yang lalu

Terima kasih gan jawabannya...tapi di form tersebut saya buat actionnya ke form itu sendiri. kalau kasus kayak gitu gimana gan?

avatar dhoeng
@dhoeng

21 Kontribusi 1 Poin

Dipost 5 tahun yang lalu

kan di atas udah saya jawab juga gan. jika menginginkan balik ke form tadi, tinggal di redirect atau header location ke file tadi.

contoh

di file form.php <pre> &lt;html&gt; &lt;body&gt;

&lt;form action="input.php" method="post"&gt; Name: &lt;input type="text" name="name"&gt;&lt;br&gt; E-mail: &lt;input type="text" name="email"&gt;&lt;br&gt; &lt;input type="submit"&gt; &lt;/form&gt;

&lt;/body&gt; &lt;/html&gt; </pre>

di file input.php

<pre> //lakukan query simpan data, jika sudah header('Location: form.php'); </pre>

note: jika yg di maksud input tanpa refresh, agan sebaiknya menggunakan ajax post

avatar Nandar
@Nandar

648 Kontribusi 204 Poin

Dipost 5 tahun yang lalu

coba pake direct

avatar soldier404
@soldier404

2 Kontribusi 0 Poin

Dipost 5 tahun yang lalu

Ok Gan maksud saya tanpa refresh soalnya form action saya kosongkan.

Terima Kasih

avatar dhoeng
@dhoeng

21 Kontribusi 1 Poin

Dipost 5 tahun yang lalu

Jawaban Terpilih

2 alternatif, 1 pake header location / Main Session gan,, ini prinsipnya hampir sama kayak csrf token di framework

  1. header location / redirect <pre> &lt;?php if(isset($_POST['submit'])) {

    $sql = "INSERT INTO ..... ";

    mysqli_query($conn, $sql); header('location: nama_file.php'); } ?&gt; </pre>

  2. Pake session <pre> &lt;?php if(isset($_POST['submit']) && $_POST['token'] == $_SESSION['token']) {

    $sql = "INSERT INTO ..... ";

    mysqli_query($conn, $sql);

} ?&gt;

&lt;form action="" method="post"&gt; &lt;?php $token = rand(); $_SESSION['token'] = $token; ?&gt;

&lt;input type="hidden" value="&lt;?php echo $token ?&gt;" name="token" /&gt; &lt;input type="submit" name="submit" value="submit"&gt;

&lt;/form&gt; </pre>

Gabungkan 2 nya kalau masih tetep gk bisa hehe,,, atau sesuai kebutuhan

avatar ciloxz
@ciloxz

284 Kontribusi 139 Poin

Dipost 5 tahun yang lalu

bisa juga buat ke file itu sendiri dari formnya

<pre> &lt;?php include('proses.php');?&gt; &lt;html&gt; &lt;head&gt; &lt;/head&gt; &lt;body&gt; &lt;form action="index.php"&gt; &lt;input type="submit" name="inp"/&gt; &lt;/form&gt; &lt;/body&gt; &lt;/html&gt; </pre>

jadi dalam case ini kita hanya memanggil proses.php ketika klik tombol submit, file akan mengarah ke index.php

nah bagaimana biar tidak terjadi looping ketika di refres ? saya biasa menggunakan

<pre> if(isset()){} </pre>

buat mendeteksi itu adalah proses yang mana isset sendiri diambil dari nama button yang disini diberi nama "inp" jadi dalam proses.php akan memproses hanya dengan paramater "inp" tersebut

<pre> if(isset($_POST['inp']) {

looping disini

}</pre>

jadi tidak akan ada proses input data yang kedoublelan ketika di refresh.

Refrence :

http://php.net/manual/en/function.isset.php

avatar maszgalang
@maszgalang

297 Kontribusi 80 Poin

Dipost 5 tahun yang lalu

Login untuk ikut Jawaban