location.href = '<?php echo $arow->site_url; ?>/soru/${sorusef}'
bu kısım benim attığım kod ile aynı değil, dikkat ederseniz ben backtick yani ` karakteri kullandım, siz normal kesme işareti yapmışsınız, bunlar farklı şeyler. backtick işareti sayesinde string içerisinde + işaretlerini kullanmadan javascript kodu/değişkeni vs yazabiliyoruz.
Öncelikle size de bazı mesajlarımda belirttiğim bazı durumları açıklayayım. Daha temiz ve doğru bir kod yazabilme açısından ufak detaylar.
(Muhtemelen JQuery nin güncel sürümlerinden birini kullandığınızı varsayıyorum)
$(selector).click(function() {}) yerine $(selector).on("click", function() {}) kullanın
Gördüğüm kadarıyla a elemanına sorusef ve cevapid adında özellikler (attribute) eklemişsiniz. Bu HTML5 kurallarına biraz aykırı bir durum, eğer veri taşımak için kendiniz bir şey eklemek istiyorsanız bunu data- ön eki ile kullanmanız gerekir. Diğer türlü de çalışır ama yanlış bir kullanım olur. data-sorusef ve data-cevapid şeklinde düzenlemenizi öneririm. Jquery tarafında bu değerleri alırken de attr data metodunu kullanabilirsiniz.
Sorunuza gelecek olursak success ve error fonksiyon olması fark etmeksizin her türlü aynı linke yönlendirme yapmak istiyorsunuz. Bunun için kodu kısaltmak için then sonrasına tek bir kod yazılması yeterli olur. Yukarıda söylediğim değişikliği yapmanız sonucu kodun son hâli şöyle gözükecektir.
$(function() {
$("a.soru_okundu").on("click", function() {
let nesne = $(this),
id = nesne.attr("id"),
sorusef = nesne.data("sorusef"),
cevapid = nesne.data("cevapid");
$.ajax({
url: "<?= $arow->site_url ?>/sistem/bildirim-okundu.php",
data: {
id: id,
sorusef: sorusef,
cevapid: cevapid
},
type: "post",
dataType: "json"
}).then(() => {
location.href = `<?php echo $arow->site_url; ?>/soru/${sorusef}`
})
})
})
Bunun en temiz tarafı ne biliyor musun, bunu direkt olarak sql tarafında halletmek, ya bir foreign key yazacaksın ya da trigger oluşturacaksın.
Foreign key için yapman gereken adımlar: phpmyadmin'den (muhtemelen onu kullanıyorsundur) yorumlar tablosunu açıyorsun, Yapı sekmesine tıklıyorsun, ardından ilişki görünümü, ON DELETE ve ON UPDATE açılır menüsünden ikisinde de CASCADE seçeneğini seçiyorsun. Sağda sütun olarak dersid seçiyorsun, onun sağında database seçilidir değilse database seçiyorsun, onun sağında tablo seçeneğinden dersler i seçiyorsun, onun da sağında yani en sondaki sütun olarak da dersler tablosundaki id değerini seçiyorsun.
Yani yaptığımız olay kısaca şu şekilde, dersler tablosundaki bir sütunda silme veya değişiklik işlemi yapıldığında o sütunun yorumlar tablosundaki dersid değerine sahip sütunda da aynı olay yapılsın. CASCADE yapmamız bundan ötürü. Böylece veritabanı bütünlüğün korunmuş olur, PHP tarafında meydana gelebilecek hatalardan bağımsız olarak sorunsuz bir şekilde ekstra bir koda ihtiyaç olmadan çalışacaktır.
Diğer yöntem ise TRIGGER eklemek. Şöyle ki bir tabloda bir UPDATE,DELETE,INSERT işlemi yapıldığında Mysql tarafından otomatik bazı kodları yürütmeyi sağlar.
Senin örnekte dersler tablosundan bir sütun silindiği zaman yorumlar tablosundan o sütunun id değerine sahip sütunları silmek için şöyle bir trigger kodu oluşturabilirsin. Bu kodları SQL sekmesine yazman gerekiyor.
DELIMITER $$
CREATE TRIGGER trigger_ismi AFTER DELETE
ON dersler
FOR EACH ROW
BEGIN
DELETE FROM yorumlar WHERE dersid = OLD.id;
END$$
DELIMITER ;
Trigger hakkında daha detaylı bilgiye buradan ulaşabilirsin.
Bu uyarıyı back-end den mi alıyorsunuz yoksa formun kendisi mi veriyor, ve kodlar nasıl?
Yok diye bir şey yok ama o kadar zor ki bu istediğin, keşke Google'un yanlış yazımları nasıl doğru anladığını biz de anlamış olsaydık :)
<?php
$values = ['dolar', 'euro', 'doviz', 'döviz'];
if (isset($_GET['q'])) {
$s = $_GET['q'];
if (in_array(strtolower($s), $values)) {
$arr = [];
$connect_web = simplexml_load_file('https://www.tcmb.gov.tr/kurlar/today.xml');
$arr[] = $connect_web->Currency[0];
$arr[] = $connect_web->Currency[3];
?>
<div class="details">
<h3 class="name">Kurlar</h3>
<?php foreach ($arr as $item) { ?>
<div class="para">
<div class="title"><?= $item->Isim ?></div>
<div class="d"><span>Alış: </span><span class="alis"><?= $item->BanknoteBuying ?></span></div>
<div class="d"><span>Satış: </span><span class="satis"></span><?= $item->BanknoteSelling ?></div>
</div>
<?php } ?>
<span class="close">×</span>
</div>
<?php } } ?>
Aslında ne istediğinizi anladım da benim biraz uğraşasım varmış :)
Ayrıca sırf bir dolar kurunu öğreneceğiz diye arama kutusunda enter a basıp aramak pek iyi bir fikir olmayabilir ama siz bilirsiniz. Onu yapmak nispeten daha kolay.
Ajax isteklerinde Cross Origin sorunu oluştuğu için belirli aralıklarla döviz xml dosyasını kendi sunucunuza kaydedin.
$getFile = file_get_contents('https://www.tcmb.gov.tr/kurlar/today.xml');
file_put_contents('kurlar.xml', $getFile);
Rica ederim, kargasa1982 daha kısa bir yolunu göstermiş, o şekilde yapmanız daha kolay olabilirdi aslında. Şimdi geçti ama bu işi direkt olarak SQL tarafında halledilmek daha iyidir her zaman. Ufak bir değişiklikle işinize yarar hale gelebilir.
UPDATE tabloadi SET puan=yas, yas='-' WHERE puan = ''
https://regex101.com/r/MSQPu9/2
$newStr = preg_replace('/\d+- (\w+)(\n)?/', '$1$2', $oldStr);