v2.5.2
Giriş yap

PHP Post Sorunu

mami
1,259 defa görüntülendi ve 1 kişi tarafından değerlendirildi

Selam dostlar 👋
linktr.ee mantığında bir site yapıyorum. fakat bir sorunum var.
sayfamda link eklemek için post atınca, sayfayı yenilediğim zaman post işlemi tekrarlanıyor.
sayfayı her yenilediğimde, yeni bir link ekleniyor.
bu sorunu nasıl çözebilirim?

Resim: https://www.hizliresim.com/cwfwufd

kodlar:

if ($_POST) {
	if ($_POST['token'] == $_SESSION['_token']) {
		if ($_POST['islem'] == "ekle") {
			$insert = $db->prepare("INSERT INTO linkler SET link_name=?, link_address=?, link_owner=?");
			$control_insert = $insert->execute(array($_POST['link_name'], $_POST['link_address'], $_SESSION['username']));
		}else if($_POST['islem']=="sil"){
			$delete = $db->prepare("DELETE FROM linkler WHERE link_id=?");
			$control_delete = $delete->execute(array($_POST['deger_hidden']));
		}
	}
}
?>
<hr>
<h3>Link Ekle!</h3>
	<form method="post">
		<label for="link_name_id">Link İsmi: </label><input type="text" placeholder="youtube, facebook..." name="link_name" id="link_name_id"><br>
		<label for="link_id">Link: </label><input id="link_id" placeholder="http://" type="text" name="link_address">
		<input type="hidden" name="islem" value="ekle">
		<input type="hidden" name="token" value="<?=$_SESSION['_token']; ?>">
		<br>
		<br><button>Ekle</button>
	</form>
	<hr>
	<h3>Linklerin</h3>
	<ol>
		link ismi - link adresi
	</ol>
	<ol>
	<?php 
	$mgryrdwadwadwdaggjf = $db->prepare("SELECT * FROM linkler WHERE link_owner=?");
	$mgryrdwadwadwdaggjf->execute(array($_SESSION['username']));

	if (!empty($mgryrdwadwadwdaggjf->rowCount())) {
		while($fregyryrdy=$mgryrdwadwadwdaggjf->fetch()){
			?>
			<li>
				<?=$fregyryrdy['link_name']." - ".$fregyryrdy['link_address']; ?><form method="post"><input name="deger_hidden" type="hidden" value="<?=$fregyryrdy['link_id']; ?>"><input type="hidden" name="islem" value="sil"><input name="token" type="hidden" value="<?=$_SESSION['_token']; ?>"><button>SİL!</button></form>
			</li>
			<?php 
		}
	}else{
		echo "eklediğiniz link Bulunmuyor.";
	}

	 ?></ol><hr>


Cevap yaz
Cevaplar (4)
qplot
1289 gün önce

işlem bitince header ile yönlendıreceksın


if ($_POST) {
	if ($_POST['token'] == $_SESSION['_token']) {
		if ($_POST['islem'] == "ekle") {
			$insert = $db->prepare("INSERT INTO linkler SET link_name=?, link_address=?, link_owner=?");
			$control_insert = $insert->execute(array($_POST['link_name'], $_POST['link_address'], $_SESSION['username']));
			
			header('Location: xxx.php');
            exit;
			
		}else if($_POST['islem']=="sil"){
			$delete = $db->prepare("DELETE FROM linkler WHERE link_id=?");
			$control_delete = $delete->execute(array($_POST['deger_hidden']));
			
		    header('Location: xxx.php');
            exit;
            
		}
	}
}
mami
1285 gün önce

arkadaşlar cevaplarınız için teşekkür ederim fakat ben bunun yerine kolay yoldan ajax kullanmayı seçtim 😅
söylediğiniz yöntemler çalışıyor onda sıkıntı yok tabii kişisel tercih :D

demo
1289 gün önce

post'tan gelen token ve session'dan gelen token'i karşılaştırıp işleme aldıktan sonra; örneğin if($insert) {.... şeklinde insert işlemi başarılıysa session token'i unset etmeyi deneyebilirsin. böylece her token ile tek 1 işlem yapılır

csybot
1289 gün önce

1 şifreleme token Kullana Bilirsin Prototurk Kanalındada Buna Benzer İçerik Mevcut
2 Şunu footerine ekleyede bilirsin

<script>

if (window.history.replaceState) {

window.history.replaceState(null, null, window.location.href);

}

</script>