Çözüldü MySQL veri tabanından ID'ye göre veri çekmek

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

hasuna

Hectopat
Katılım
24 Temmuz 2020
Mesajlar
3.774
Çözümler
31
Merhabalar. PHP ile veri tabanindan veri cekmek istiyorum profil sayfasi olusturmak için.
"ID" kismini kod ile almam lazim ki giris yapan kisinin verilerini elde edeyim sadece. Ama o kodu bulamadim. Bilgisi olan yardim ederse sevinirim.

[CODE title="kod"]
session_start();
if($_SESSION["USER"] == "")
{
echo "<script>window.location.href='giris.php'</script>";
}
else{
include("baglanti.php");

$sec="Select * From kullanicilar Where id=";


$sonuc=$baglan->query($sec);
if($sonuc->num_rows>0){
while($cek=$sonuc->fetch_assoc()){
echo "

<h3>Isim:".$cek['kullanici_adi']."</h3>
<h3>Sehir:".$cek['sehir']."</h3>
<h3>Yas:".$cek['yas']."</h3>
<h3>Cinsiyet:".$cek['cinsiyet']."</h3>

";


}

}
}

}[/CODE]
 
Son düzenleme:
Çözüm
PHP:
<?php
session_start();
if(!isset($_SESSION["USER"]) || $_SESSION["USER"] == "")
{
 header("Location:giris.php");
}

else{

 include("baglanti.php");
 
 $user = $_SESSION['USER'];
 $sec = $vtbaglan->query("SELECT * FROM admin WHERE username='".$user."'");
 
 $admincek = mysqli_fetch_array ($sec);
 
 $idcek        = $admincek['id'];
 $usercek    = $admincek['user'];
 $sifrecek    = $admincek['sifre'];

}

?>

<p> ID No: <?=$idcek?> </p>
<p> Kullanıcı Adınız: <?=$usercek?> </p>
<p> Şifreniz: <?=$sifrecek?> </p>

Kodun 13. Satırında "username" yani USER sessionuna atadığın tablo ismini yazarsan bu şekilde istediğin veriyi çekebilirsin.
@hasuna atamasını yapmadığım şeyi kullanamazsın. Veritabanında kullanıcı adı ve şifre doğrulaması yaptığında kullanıcının ID'sini session'a yazman gerek. Sonra yazdığın isimde tekrar kullanman lazım.

Yalnız ciddi temel eksiklerin var gibi. Daha temelden başlaman gerek. Veri yapılarını ve değişken türlerini biliyor musun ya da değişken nedir, nasıl atanır?
 
@hasuna atamasını yapmadığım şeyi kullanamazsın. Veritabanında kullanıcı adı ve şifre doğrulaması yaptığında kullanıcının ID'sini Session'a yazman gerek. Sonra yazdığın isimde tekrar kullanman lazım.

Yalnız ciddi temel eksiklerin var gibi. Daha temelden başlaman gerek. Veri yapılarını ve değişken türlerini biliyor musun ya da değişken nedir, nasıl atanır?

Temel eksiklerimin oldugunun farkindayim fakat sağ olsun web hocamiz hiçbir şey ogretmeden bizden site tasarlamamizi istedi. 0 almamak için bir şeyler yapmak zorundayim ve fazla bir zamanim da yok.
 
@hasuna anlıyorum, hızlıca bir YouTube kursuna göz atıp devam etmeyi deneyebilirsin. Bedava anlatanlar var, üstelik bir örnek üstünden gidiyorlar. Sana hem ödevinde hem de öğrenmende yardımı olur.

Örn. Emrah Yüksel.
 
Kullanıcı giriş yaptığında gelen $_POST değerlerini bir değişkene ata, örneğin $email = $_POST['email']; aynı şekilde şifre bilgisini de bir değişkene al.

PHP:
        if ($_POST) {
            $email = helper::cleaner($_POST['email']);
            $password = helper::cleaner($_POST['password']);

            if ($email!="" and $password!="") {
                $control = $this->model('userModel')->control($email, md5($password));
                if ($control == 0) {
                    helper::redirect(SITE_URL."/login");
                } else {
                    sessionManager::createSession(['email'=>$email,'password'=>md5($password)]);
                    helper::redirect(SITE_URL);
                }

Burada yaptığım işlemler şunlar:
  1. Email ve password bilgisini bir değişkene aldım.
  2. If koşulum ile email ve password un NULL olup olmadığını kontrol ettim.
  3. Eğer NULL ise tekrardan /login sayfasına yönlendirdim. (Redirect Fonksiyonunu paylaşmıyorum konu ile alakası yok.
  4. Eğer NULL değil ise değişkene aldığım verileri Session oluşturmak için yazdığım fonksiyona gönderiyorum.
PHP:
    public static function createSession($array = [])
    {
        foreach ($array as $key => $value) {
            $_SESSION[$key] = helper::cleaner($value);
        }
    }

Burada gelen verileri SESSION'a alıyorum. Buraya kadar tamam ise şimdi ID değerini nasıl alacağını söyleyeceğim.

PHP:
    public function getUserInfo()
    {
        if ($this->isLogged()) {
            $email = $_SESSION['email'];
            $password = $_SESSION['password'];
            $query = $this->db->prepare("SELECT * FROM members WHERE email =? AND password=? ");
            $query->execute(array($email,$password));
            return $query->fetch(PDO::FETCH_ASSOC);
        } else {
            return false;
        }
    }

Buradaki If kısmına takılma direkt olarak içeriye bak. Burada SESSION'daki kullanıcıyı veritabanında bulmak için sorguluyorum.

$this->myuserinfo = $this->sessionManager->getUserInfo();

Buraya kadar doğru yaptıysan artık giriş yapmış kullanıcı bilgilerini alabilirsin.

<?= $this->myuserinfo['name']; ?>

Örneğin bununla SESSION'daki userin adını yazdırıyorum. Sana ID lazım ise şöyle yapacaksın:

<?= $id = $this->myuserinfo['id']; ?>

Gece olduğu için sağlamasını yapamıyorum yarın yapamazsan veya kodlarda hata var ise daha detaylı bakarız.
 
Son düzenleyen: Moderatör:
Kod:
<?php
session_start();
ob_start();
// Veritabanı Bağlantısı START
$server = "localhost"; // sunucu adi
$user = "root"; // seritabanı kullanici adi
$password = "1234"; // veritabani sifresi
try {
$conn = new PDO("mysql:host=$server;dbname=veri", $user, $password); // veritabani baglantisi
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Success!";
} catch (PDOException $e) {
echo "Oh, there is a mistake: " . $e->getMessage(); // Hata olursa hata mesajini yayinliyoruz.
}
// Veritabanı Bağlantısı END
?>
<?php if ($_SESSION['email'] == "") { ?>
<!--SESSION var ise giris kismini gostermiyoruz -->
<form action="" method="POST">
<label for="email">E-Mail veya K.Adı</label>
<input type="text" name="email">
<label for="password">Şifre</label>
<input type="text" name="password">
<button type="submit">Giriş Yap</button>
</form>
<?php } else { ?>
<!-- Giris yapilmis ise session olusturacagiz-->
<?php
if ($_POST) {
function createSession($array = []) // Session olusturma fonksiyonu
{
foreach ($array as $key => $value) {
$_SESSION[$key] = $value;
}
}

$email = $_POST['email']; // Yukaridaki formdan gelen email bilgisini $email degiskenine aliyoruz
$password = $_POST['password']; // Ayni sekilde sifreyi de aldik
createSession(['email' => $email, 'password' => md5($password)]); // yukaridaki fonksiyonu kullanarak session aciyoruz
$email = $_SESSION['email']; // veritabanından sessiona göre sorgulayacagimiz icin bu sefer email ve passwordu-
$password = $_SESSION['password']; // session icindeki verilere göre aliyoruz
$data = $conn->query("SELECT * FROM members WHERE email ='$email' AND password='$password'")->fetch(PDO::FETCH_ASSOC);
// yukarida sessiondaki email ve sifreye aldigimiz degiskenlerle bu sefer sql sorgumuzu yapiyoruz
if ($data["email"] == "") {
echo "HATA!";
} else {
// sorgu sonucu gelen bilgileri yazdiriyoruz
echo "<h3>Isim:" . $data['kullanici_adi'] . "</h3>";
echo "<h3>Sehir:" . $data['sehir'] . "</h3>";
echo "<h3>Yas:" . $data['yas'] . "</h3>";
echo "<h3>Cinsiyet:" . $data['cinsiyet'] . "</h3>";
}
}
}
?>
 
Son düzenleyen: Moderatör:
Kod:
<?php
session_start();
ob_start();
// Veritabanı Bağlantısı START
$server = "localhost"; // sunucu adi
$user = "root"; // seritabanı kullanici adi
$password = "1234"; // veritabani sifresi
try {
$conn = new PDO("mysql:host=$server;dbname=veri", $user, $password); // veritabani baglantisi
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Success!";
} catch (PDOException $e) {
echo "Oh, there is a mistake: " . $e->getMessage(); // Hata olursa hata mesajini yayinliyoruz.
}
// Veritabanı Bağlantısı END
?>
<?php if ($_SESSION['email'] == "") { ?>
<!--SESSION var ise giris kismini gostermiyoruz -->
<form action="" method="POST">
<label for="email">E-Mail veya K.Adı</label>
<input type="text" name="email">
<label for="password">Şifre</label>
<input type="text" name="password">
<button type="submit">Giriş Yap</button>
</form>
<?php } else { ?>
<!-- Giris yapilmis ise session olusturacagiz-->
<?php
if ($_POST) {
function createSession($array = []) // Session olusturma fonksiyonu
{
foreach ($array as $key => $value) {
$_SESSION[$key] = $value;
}
}

$email = $_POST['email']; // Yukaridaki formdan gelen email bilgisini $email degiskenine aliyoruz
$password = $_POST['password']; // Ayni sekilde sifreyi de aldik
createSession(['email' => $email, 'password' => md5($password)]); // yukaridaki fonksiyonu kullanarak session aciyoruz
$email = $_SESSION['email']; // veritabanından sessiona göre sorgulayacagimiz icin bu sefer email ve passwordu-
$password = $_SESSION['password']; // session icindeki verilere göre aliyoruz
$data = $conn->query("SELECT * FROM members WHERE email ='$email' AND password='$password'")->fetch(PDO::FETCH_ASSOC);
// yukarida sessiondaki email ve sifreye aldigimiz degiskenlerle bu sefer sql sorgumuzu yapiyoruz
if ($data["email"] == "") {
echo "HATA!";
} else {
// sorgu sonucu gelen bilgileri yazdiriyoruz
echo "<h3>Isim:" . $data['kullanici_adi'] . "</h3>";
echo "<h3>Sehir:" . $data['sehir'] . "</h3>";
echo "<h3>Yas:" . $data['yas'] . "</h3>";
echo "<h3>Cinsiyet:" . $data['cinsiyet'] . "</h3>";
}
}
}
?>

Hocam veri tabani baglantisini hallettim ama duzgun calismadi. Simdilik bu kısmı sona birakacagim yoksa diger kisimlar yetismeyecek. Vakit ayirip yardim ettiginiz için teşekkür ederim. Ilerleyen zamanlarda cozume ulasamaz isem tekrar etiketlerim sizi.
 
Hocam veri tabani baglantisini hallettim ama duzgun calismadi. Simdilik bu kısmı sona birakacagim yoksa diger kisimlar yetismeyecek. Vakit ayirip yardim ettiginiz için teşekkür ederim. Ilerleyen zamanlarda cozume ulasamaz isem tekrar etiketlerim sizi.
Çalışıyor hocam, yalnız veritabanını da buraya göre düzenleyin.
Şifre kısmına bunu yaz karşılığı 123. 202cb962ac59075b964b07152d234b70

Büyük ihtimalle senin veritabanında şifre MD5 değildi.

1641216133452.png
 
Çalışıyor hocam, yalnız veritabanını da buraya göre düzenleyin.
Şifre kısmına bunu yaz karşılığı 123. 202cb962ac59075b964b07152d234b70

Eki Görüntüle 1259978

Kod calisiyordur hocam ona eminim ama ben calistiramadim. Siz mesela giris yapili degilse label ile giris yapmasini eklemissiniz o kısmı cikarttim cunku benim ayri bir giris sayfam var profil sayfasinda giris yapili degilse oraya atiyor. Bu arada veri tabani baglantisi için ayri bir PHP sayfasi mevcut o nedenle duzenleyince basarili yaziyor ama duzgun calisip calismadigindan emin degilim. Ayrica sadece email uzerinden bilgileri almasini istedim o nedenle sifre kismini cikarttim. Buyuk ihtimalle cok onemli seyleri bilim olmadigi için cikartmis da olabilirim.
En son 'duzenledigim'/bozdugum kod:

Kod:
<?php
session_start();
ob_start();
include("baglanti.php");
try {
$conn = new PDO("mysql:host=$vt_sunucu;dbname=youfools", $vt_kullanici, $vt_sifre);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

} catch (PDOException $e) {
echo "Oh, there is a mistake: " . $e->getMessage();
}

if ($_SESSION["USER"] == "") {

}

else {

if ($_POST) {
function createSession($array = [])
{
foreach ($array as $key => $value) {
$_SESSION[$key] = $value;
}
}

$email = $_POST['email'];

createSession(['email' => $email]);
$email = $_SESSION['email'];

$data = $conn->query("SELECT * FROM kullanicilar WHERE email ='$email'")->fetch(PDO::FETCH_ASSOC);

if ($data["email"] == "") {
echo "HATA!";
}
else {

echo "<h3>Isim:" . $data['kullanici_adi'] . "</h3>";
echo "<h3>Sehir:" . $data['sehir'] . "</h3>";
echo "<h3>Yas:" . $data['yas'] . "</h3>";
echo "<h3>Cinsiyet:" . $data['cinsiyet'] . "</h3>";
}
}
}
?>
 
Son düzenleme:
Kod calisiyordur hocam ona eminim ama ben calistiramadim. Siz mesela giris yapili degilse label ile giris yapmasini eklemissiniz o kısmı cikarttim cunku benim ayri bir giris sayfam var profil sayfasinda giris yapili degilse oraya atiyor. Bu arada veri tabani baglantisi için ayri bir PHP sayfasi mevcut o nedenle duzenleyince basarili yaziyor ama duzgun calisip calismadigindan emin degilim.

Hocam sizin istediğiniz bu değil mi?

İlk girildiğinde:
1641217254113.png


Giriş bilgileri:
1641217263950.png


Veritabanı:
1641217280247.png


Sonuç:
1641217272559.png


Eğer bilgiler yanlış ise:

1641217317804.png
 

Geri
Yukarı