lostyazilim
tr.link

Üye güncelleme ve Session güncelleme

12 Mesajlar 2.403 Okunma
lstbozum
tr.link

netman netman netman Kullanıcı
  • Üyelik 30.01.2017
  • Yaş/Cinsiyet 35 / E
  • Meslek Danışman
  • Konum İstanbul Avrupa
  • Ad Soyad H** K**
  • Mesajlar 729
  • Beğeniler 204 / 203
  • Ticaret 10, (%90)

 

Merhaba, takıldığım bir nokta da bilgi almak istiyorum.

Mail adresi ve şifreyle giriş yapan kullanıcılara ait hesabım sayfası var ve bu sayfa da üye adı soyadı mail adresi gibi bilgilerini güncelleyebiliyor.

Güncelleme kısmında hiç bir sorun yok yeni değerler veritabanına da kaydediliyor. Fakat güncellenen değerler o an ki session oturumunda görünmüyor. Çıkış yaparak tekrar giriş yaparsa kullanıcı yaptığı değişiklikler o zaman görünüyor.

Kullanıcı çıkış yapmadan profilinde ki bu alanları veya herhangi bir alanı düzenleyip kaydettiğinde görüntüleyebilmesi için ne yapmam gerekiyor ?

if($_GET['uyelik'] == 'uye_guncelle'){
if($_POST){
if(isset($_POST['uye_id']) and isset($_POST['uye_adi']) and isset($_POST['uye_soyadi']) and isset($_POST['uye_kadi'])) {
$uye_id = mysqli_real_escape_string($db,$_POST['uye_id']);
$uye_adi = mysqli_real_escape_string($db,$_POST['uye_adi']);
$uye_soyadi = mysqli_real_escape_string($db,$_POST['uye_soyadi']);
$uye_kadi = mysqli_real_escape_string($db,$_POST['uye_kadi']);
$bilgi_query = "UPDATE uye SET `uye_adi` = '$uye_adi', `uye_soyadi` = '$uye_soyadi', `uye_kadi` = '$uye_kadi' WHERE `uye`.`uye_id` = '$uye_id'";

$uye_guncelle = mysqli_query($db,$bilgi_query);
if($uye_guncelle){
$_SESSION["uye"] = mysqli_fetch_array($uye_guncelle);
$return = array('uye_guncelle'=>1);
echo json_encode($return, true);
}
else{
$return = array('uye_guncelle'=>2);
echo json_encode($return, true);
}

}

}
}

Mesaj 2 defa düzenlendi. Son düzenleyen: netman (30.01.2022 20:08)

 

 

// Acta est fabula
wmaraci
reklam

osman4046 osman4046 WM Aracı Kullanıcı
  • Üyelik 09.09.2018
  • Yaş/Cinsiyet 26 / E
  • Meslek Web Programlama Uzmanı
  • Konum Van
  • Ad Soyad O** K**
  • Mesajlar 145
  • Beğeniler 44 / 20
  • Ticaret 0, (%0)
üyeye ait hangi bilgileri session da tutuyorsunki gözükmüyor ?
 

 

Web Programlama Uzmanı | ( PHP, Bootstrap, MySQL ) Yazılım İşleri Yapılır | WhatsApp Tıkla

netman netman netman Kullanıcı
  • Üyelik 30.01.2017
  • Yaş/Cinsiyet 35 / E
  • Meslek Danışman
  • Konum İstanbul Avrupa
  • Ad Soyad H** K**
  • Mesajlar 729
  • Beğeniler 204 / 203
  • Ticaret 10, (%90)
Şu kısımda üye tablosundan gelen verileri alıyorum.

$_SESSION["uye"] = mysqli_fetch_array($uye_guncelle);


Çekerken de bu şekilde çekiyorum hocam?

$_SESSION["uye"]["uye_id"];
 

 

// Acta est fabula

Abdullahx Abdullahx MW Aracı Kullanıcı
  • Üyelik 03.04.2019
  • Yaş/Cinsiyet 29 / E
  • Meslek .
  • Konum Trabzon
  • Ad Soyad A** K**
  • Mesajlar 905
  • Beğeniler 393 / 395
  • Ticaret 3, (%100)
mysqli uzun zamandır kullanmıyorum ama içeriğinde update olan query yi session a atıyorsunuz direkt. Öncelikle içeriğinde ne olduğunu bir kontrol edin bakalım ne çıktı veriyor.


if($uye_guncelle){
print_r(mysqli_fetch_array($uye_guncelle));
exit();
$_SESSION["uye"] = mysqli_fetch_array($uye_guncelle);
 

 


wmaraci
wmaraci

JamesMoriarty JamesMoriarty WM Aracı Kullanıcı
  • Üyelik 22.09.2020
  • Yaş/Cinsiyet 21 / E
  • Meslek Öğrenci
  • Konum Bursa
  • Ad Soyad Ö** D**
  • Mesajlar 73
  • Beğeniler 9 / 9
  • Ticaret 1, (%100)
unset ile sıfırlayın sonra tekrardan başlatın hocam sessionu birde güvenlik açıkları için tedbir almalısınız.
 

 

netman netman netman Kullanıcı
  • Üyelik 30.01.2017
  • Yaş/Cinsiyet 35 / E
  • Meslek Danışman
  • Konum İstanbul Avrupa
  • Ad Soyad H** K**
  • Mesajlar 729
  • Beğeniler 204 / 203
  • Ticaret 10, (%90)

Abdullahx adlı üyeden alıntı

mysqli uzun zamandır kullanmıyorum ama içeriğinde update olan query yi session a atıyorsunuz direkt. Öncelikle içeriğinde ne olduğunu bir kontrol edin bakalım ne çıktı veriyor.


if($uye_guncelle){
print_r(mysqli_fetch_array($uye_guncelle));
exit();
$_SESSION["uye"] = mysqli_fetch_array($uye_guncelle);


SELECT veya INSERT yaparken sorun yaşamadım hocam UPDATE de farklı mı oluyor?
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, bool given in /theme/ajax.php on line 145


Bilginiz varsa aydınlatır mısınız bu konuda?
 

 

// Acta est fabula

Abdullahx Abdullahx MW Aracı Kullanıcı
  • Üyelik 03.04.2019
  • Yaş/Cinsiyet 29 / E
  • Meslek .
  • Konum Trabzon
  • Ad Soyad A** K**
  • Mesajlar 905
  • Beğeniler 393 / 395
  • Ticaret 3, (%100)
Aslında tamamen emin değilim, veri tabanındaki değeri güncelleyen query kodunu direkt alıp o şekilde kullanabilir muyuz bilmiyorum, dediğim gibi mysqli uzun zamandır kullanmıyorum, bir tahminde bulundum.

Ama php dokümanlarını okuyunca tam da dediğiniz gibi olduğunu görebilirsiniz. "Returns false on failure. For successful queries which produce a result set, such as SELECT, SHOW, DESCRIBE or EXPLAIN, mysqli_query() will return a mysqli_result object. For other successful queries, mysqli_query() will return true."
https://www.php.net/manual/tr/mysqli.query.php#refsect1-mysqli.query-returnvalues

Aldığınız hatada da sorun ortaya çıktı. mysqli_query nin döndürdüğü yanıt boolean oluyor UPDATE yapıldığında. Oysaki mysqli_fetch_array fonksiyonu yordamsal kullanımda mysqli_result değeri gerektirir. https://www.php.net/manual/tr/mysqli-result.fetch-array.php

Yani diyeceğim o ki, güncelleme yaptıktan sonra yeniden bir vt sorgusu yapıp oradan dönen değerleri session a atamanız gerekiyor. edit => veya direkt elle de girebilirsiniz session değerlerini

$_SESSION["uye"]["uye_id"] = $uye_id;
$_SESSION["uye"]["uye_adi"] = $uye_adi;
...
...
 

 


netman netman netman Kullanıcı
  • Üyelik 30.01.2017
  • Yaş/Cinsiyet 35 / E
  • Meslek Danışman
  • Konum İstanbul Avrupa
  • Ad Soyad H** K**
  • Mesajlar 729
  • Beğeniler 204 / 203
  • Ticaret 10, (%90)

Abdullahx adlı üyeden alıntı

Aslında tamamen emin değilim, veri tabanındaki değeri güncelleyen query kodunu direkt alıp o şekilde kullanabilir muyuz bilmiyorum, dediğim gibi mysqli uzun zamandır kullanmıyorum, bir tahminde bulundum.

Ama php dokümanlarını okuyunca tam da dediğiniz gibi olduğunu görebilirsiniz. "Returns false on failure. For successful queries which produce a result set, such as SELECT, SHOW, DESCRIBE or EXPLAIN, mysqli_query() will return a mysqli_result object. For other successful queries, mysqli_query() will return true."
https://www.php.net/manual/tr/mysqli.query.php#refsect1-mysqli.query-returnvalues

Aldığınız hatada da sorun ortaya çıktı. mysqli_query nin döndürdüğü yanıt boolean oluyor UPDATE yapıldığında. Oysaki mysqli_fetch_array fonksiyonu yordamsal kullanımda mysqli_result değeri gerektirir. https://www.php.net/manual/tr/mysqli-result.fetch-array.php

Yani diyeceğim o ki, güncelleme yaptıktan sonra yeniden bir vt sorgusu yapıp oradan dönen değerleri session a atamanız gerekiyor. edit => veya direkt elle de girebilirsiniz session değerlerini

$_SESSION["uye"]["uye_id"] = $uye_id;
$_SESSION["uye"]["uye_adi"] = $uye_adi;
...
...


İngilizce kaynaklardan da çok araştırdım bazı yöntemler denedim ama çalışmadı, ben tek sorgu da halledemiyor muyuz diye çok baktım ama fazla da artık kafa yormayayım. Dediğiniz gibi ikinci bir sorgu yapıp değerleri o şekilde alayım. Teşekkür ederim.

Sorgu kısmını bu şekilde halletmiş oldum.

if($_GET['uyelik'] == 'uye_guncelle'){
if($_POST){
if(isset($_POST['uye_id']) and isset($_POST['uye_adi']) and isset($_POST['uye_soyadi']) and isset($_POST['uye_kadi'])) {
$uye_id = mysqli_real_escape_string($db,$_POST['uye_id']);
$uye_adi = mysqli_real_escape_string($db,$_POST['uye_adi']);
$uye_soyadi = mysqli_real_escape_string($db,$_POST['uye_soyadi']);
$uye_kadi = mysqli_real_escape_string($db,$_POST['uye_kadi']);
$bilgi_query = "UPDATE uye SET `uye_adi` = '$uye_adi', `uye_soyadi` = '$uye_soyadi', `uye_kadi` = '$uye_kadi' WHERE `uye`.`uye_id` = '$uye_id'";

$uye_guncelle = mysqli_query($db,$bilgi_query);
if($uye_guncelle){
$yeni_kayit_cek = "SELECT * FROM uye WHERE uye_id='".$uye_id."'";
$yeni_session = mysqli_query($db,$yeni_kayit_cek);
session_start();
$_SESSION["uye"] = mysqli_fetch_array($yeni_session);
$return = array('uye_guncelle'=>1);
echo json_encode($return, true);
}
else{
$return = array('uye_guncelle'=>2);
echo json_encode($return, true);
}

}

}
}
 

 

// Acta est fabula

netman netman netman Kullanıcı
  • Üyelik 30.01.2017
  • Yaş/Cinsiyet 35 / E
  • Meslek Danışman
  • Konum İstanbul Avrupa
  • Ad Soyad H** K**
  • Mesajlar 729
  • Beğeniler 204 / 203
  • Ticaret 10, (%90)

JamesMoriarty adlı üyeden alıntı

unset ile sıfırlayın sonra tekrardan başlatın hocam sessionu birde güvenlik açıkları için tedbir almalısınız.


unset ile session bilgilerini boşaltıp yeniden giriş ekranına atıyor.
 

 

// Acta est fabula

VipTema VipTema Vip Tema Web Tasarım Kullanıcı
  • Üyelik 29.06.2011
  • Yaş/Cinsiyet 37 / E
  • Meslek Vip Tema Web Tasarım A.Ş.
  • Konum Tekirdağ
  • Ad Soyad Ö** I**
  • Mesajlar 1393
  • Beğeniler 704 / 703
  • Ticaret 21, (%100)
Aslında sessionda üye id'si dışında kullanıcı adına bilgi tutmanıza gerek yok. Kodlarınızın session kurgusunda bir mantık hatası var. Şöyle ki üyeyi ne kadar güncellerseniz güncelleyin değişmeyecek olaan tek bilgi veri tabanındaki benzersiz id'sidir. Dolayısıyla sessionda sadece id tutmanız yeterli olur. Ekrana bastığın diğer bilgileri minnak bir select sorgusu ile id şuna eşitse bilgilerini bas diyebilirsin böylelikle sen ne bilgisini değişirsen değiş, id değişmediği için ve geri kalan bilgileri direk hep vtden çekeceği için anlık bir değişim olur. Umarım anlatabilmişimdir. :)
netman

kişi bu mesajı beğendi.

wmaraci
wmaraci
Konuyu toplam 1 kişi okuyor. (0 kullanıcı ve 1 misafir)
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al