• 07-04-2025, 12:51:22
    #1
    Merhabalar
    posttan gelen veriyi bu kodlar ile kayıt yapıyorum ama aynı tc tekrar kayıt olmasın istiyorum ne eklemem gerekli

    <?php
    session_start();
    require_once 'db.php'; // PDO nesnesi burada olmalı: $pdo
    
    function turkce_duzelt($veri){
        $bul = ['ç', 'ğ', 'ı', 'i', 'ö', 'ş', 'ü'];
        $deg = ['Ç', 'Ğ', 'I', 'İ', 'Ö', 'Ş', 'Ü'];
        return str_replace($bul, $deg, $veri);
    }
    
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    
        // GİRİŞ İŞLEMİ
        if (!empty($_POST['tc_kimlik']) && !empty($_POST['sifre']) && empty($_POST['ad'])) {
            $stmt = $pdo->prepare("SELECT id, sifre FROM musteri WHERE tc_kimlik = ? AND durum = 1 LIMIT 1");
            $stmt->execute([$_POST['tc_kimlik']]);
            $kullanici = $stmt->fetch(PDO::FETCH_ASSOC);
    
            if ($kullanici && password_verify($_POST['sifre'], $kullanici['sifre'])) {
                $_SESSION['kullanici']['giris'] = 1;
                $_SESSION['kullanici']['id'] = $kullanici['id'];
                echo "<script>alert('Giriş Yapıldı.'); location.href='index.php';</script>";
            } else {
                echo "<script>alert('TC veya Şifre hatalı.');</script>";
            }
    
        // KAYIT İŞLEMİ
        } elseif (!empty($_POST['ad'])) {
            $ad         = strtoupper(turkce_duzelt(trim($_POST['ad'])));
            $soyad      = strtoupper(turkce_duzelt(trim($_POST['soyad'])));
            $telefon    = trim($_POST['telefon']);
            $tc_kimlik  = trim($_POST['tc_kimlik']);
            $dogum_yili = trim($_POST['dogum_yili']);
            $email      = trim($_POST['email']);
            $parola     = trim($_POST['sifre']);
    
            if (!$ad || strlen($ad) <= 2 || !$soyad || strlen($soyad) <= 2 || !$dogum_yili || !$tc_kimlik) {
                echo "<script>alert('Boş Alan Bırakmayın!');</script>";
            } elseif (strlen($tc_kimlik) != 11) {
                echo "<script>alert('T.C. Numaranız 11 karakter olmalıdır!');</script>";
            } elseif (strlen($dogum_yili) != 4 || !is_numeric($dogum_yili)) {
                echo "<script>alert('Geçersiz doğum yılı!');</script>";
            } else {
                try {
                    $client = new SoapClient('https://tckimlik.nvi.gov.tr/Service/KPSPublic.asmx?WSDL');
                    $params = [
                        'TCKimlikNo' => $tc_kimlik,
                        'Ad'         => $ad,
                        'Soyad'      => $soyad,
                        'DogumYili'  => (int)$dogum_yili
                    ];
    
                    $response = $client->TCKimlikNoDogrula($params);
    
                    if ($response->TCKimlikNoDogrulaResult) {
                        $hashed_password = password_hash($parola, PASSWORD_DEFAULT);
                        $stmt = $pdo->prepare("INSERT INTO musteri (ad, soyad, tc_kimlik, telefon, email, sifre) VALUES (?, ?, ?, ?, ?, ?)");
                        $stmt->execute([$ad, $soyad, $tc_kimlik, $telefon, $email, $hashed_password]);
    
                        echo '<script>swal("BAŞARILI!", "Bilgiler doğru! Üyelik başarılı.", "success");</script>';
                    } else {
                        echo '<script>swal("HATA!", "Girilen bilgiler ile TC uyuşmuyor.", "warning");</script>';
                    }
                } catch (Exception $e) {
                    echo '<script>swal("HATA!", "Geçersiz bilgiler!", "error");</script>';
                }
            }
        }
    }
    ?>
  • 07-04-2025, 12:56:33
    #2
    En son else içerisinde (burası olması şart değil ama kayıt kısmında yapmalısınız), üstteki giriş kısmında kontrol ettiğiniz gibi bir kontrol yapmanız lazım. Yani SELECT ile tabloyu seçip WHERE ile TC sütununa parametreyi gönderip kontrol ettirmelisiniz. Sonrasında, varsa bu TC kayıtlı diye uyarı verebilirsiniz.
  • 07-04-2025, 13:48:17
    #3
    YazilimciBiri adlı üyeden alıntı: mesajı görüntüle
    En son else içerisinde (burası olması şart değil ama kayıt kısmında yapmalısınız), üstteki giriş kısmında kontrol ettiğiniz gibi bir kontrol yapmanız lazım. Yani SELECT ile tabloyu seçip WHERE ile TC sütununa parametreyi gönderip kontrol ettirmelisiniz. Sonrasında, varsa bu TC kayıtlı diye uyarı verebilirsiniz.
    teşekkürler hocam şöyle birşekilde yaptım
    <?php
    session_start();
    require_once 'db.php'; // PDO nesnesi burada olmalı: $pdo
    
    function turkce_duzelt($veri){
        $bul = ['ç', 'ğ', 'ı', 'i', 'ö', 'ş', 'ü'];
        $deg = ['Ç', 'Ğ', 'I', 'İ', 'Ö', 'Ş', 'Ü'];
        return str_replace($bul, $deg, $veri);
    }
    
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    
        // GİRİŞ İŞLEMİ
        if (!empty($_POST['tc_kimlik']) && !empty($_POST['sifre']) && empty($_POST['ad'])) {
            $stmt = $pdo->prepare("SELECT id, sifre FROM musteri WHERE tc_kimlik = ? AND durum = 1 LIMIT 1");
            $stmt->execute([$_POST['tc_kimlik']]);
            $kullanici = $stmt->fetch(PDO::FETCH_ASSOC);
    
            if ($kullanici && password_verify($_POST['sifre'], $kullanici['sifre'])) {
                $_SESSION['kullanici']['giris'] = 1;
                $_SESSION['kullanici']['id'] = $kullanici['id'];
                echo "<script>alert('Giriş Yapıldı.'); location.href='index.php';</script>";
            } else {
                echo "<script>alert('TC veya Şifre hatalı.');</script>";
            }
    
        // KAYIT İŞLEMİ
        } elseif (!empty($_POST['ad'])) {
            $ad         = strtoupper(turkce_duzelt(trim($_POST['ad'])));
            $soyad      = strtoupper(turkce_duzelt(trim($_POST['soyad'])));
            $telefon    = trim($_POST['telefon']);
            $tc_kimlik  = trim($_POST['tc_kimlik']);
            $dogum_yili = trim($_POST['dogum_yili']);
            $email      = trim($_POST['email']);
            $parola     = trim($_POST['sifre']);
    
            if (!$ad || strlen($ad) <= 2 || !$soyad || strlen($soyad) <= 2 || !$dogum_yili || !$tc_kimlik) {
                echo "<script>alert('Boş Alan Bırakmayın!');</script>";
            } elseif (strlen($tc_kimlik) != 11) {
                echo "<script>alert('T.C. Numaranız 11 karakter olmalıdır!');</script>";
            } elseif (strlen($dogum_yili) != 4 || !is_numeric($dogum_yili)) {
                echo "<script>alert('Geçersiz doğum yılı!');</script>";
            } else {
                // Aynı TC var mı kontrolü
                $stmt = $pdo->prepare("SELECT COUNT(*) FROM musteri WHERE tc_kimlik = ?");
                $stmt->execute([$tc_kimlik]);
                $tc_var_mi = $stmt->fetchColumn();
    
                if ($tc_var_mi > 0) {
                    echo "<script>swal('HATA!', 'Bu T.C. Kimlik Numarası ile daha önce kayıt yapılmış!', 'error');</script>";
                } else {
                    try {
                        $client = new SoapClient('https://tckimlik.nvi.gov.tr/Service/KPSPublic.asmx?WSDL');
                        $params = [
                            'TCKimlikNo' => $tc_kimlik,
                            'Ad'         => $ad,
                            'Soyad'      => $soyad,
                            'DogumYili'  => (int)$dogum_yili
                        ];
    
                        $response = $client->TCKimlikNoDogrula($params);
    
                        if ($response->TCKimlikNoDogrulaResult) {
                            $hashed_password = password_hash($parola, PASSWORD_DEFAULT);
                            $stmt = $pdo->prepare("INSERT INTO musteri (ad, soyad, tc_kimlik, telefon, email, sifre) VALUES (?, ?, ?, ?, ?, ?)");
                            $stmt->execute([$ad, $soyad, $tc_kimlik, $telefon, $email, $hashed_password]);
    
                            echo '<script>swal("BAŞARILI!", "Bilgiler doğru! Üyelik başarılı.", "success");</script>';
                        } else {
                            echo '<script>swal("HATA!", "Girilen bilgiler ile TC uyuşmuyor.", "warning");</script>';
                        }
                    } catch (Exception $e) {
                        echo '<script>swal("HATA!", "Geçersiz bilgiler!", "error");</script>';
                    }
                }
            }
        }
    }
    ?>
  • 07-04-2025, 14:20:15
    #4
    Kurumsal PLUS
    Merhabalar aşağıdaki kodu eklemeniz yeterli olaaktır databaseden check yaparsınız

    $stmt = $pdo->prepare("SELECT id FROM musteri WHERE tc_kimlik = ? LIMIT 1");
    $stmt->execute([$tc_kimlik]);
    $mevcutTc = $stmt->fetch(PDO::FETCH_ASSOC);
    if ($mevcutTc) {
        echo '<script>swal("UYARI!", "Bu T.C. kimlik numarası zaten kayıtlıdır!", "warning");</script>';
    } else {
    }