Diskon 80% terbatas! Masukkan kupon "merdeka" di kelas apa saja

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 6 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 6 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 6 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 6 tahun yang lalu

coba pake direct

avatar soldier404
@soldier404

2 Kontribusi 0 Poin

Dipost 6 tahun yang lalu

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

Terima Kasih

avatar dhoeng
@dhoeng

21 Kontribusi 1 Poin

Dipost 6 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 6 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 6 tahun yang lalu

Login untuk ikut Jawaban