• 12-01-2024, 15:55:25
    #1

    Merhaba arkadaşlar, şifre değişikliği yapıldıktan sonra kullanıcının aktif_mi kolonunu 3'e update etmek istiyorum.

    // Form gönderilmiş mi diye kontrol et
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        // Kullanıcı girişi
        $currentPassword = $conn->real_escape_string($_POST["currentPassword"]);
        $newPassword = $conn->real_escape_string($_POST["newPassword"]);
        $confirmPassword = $conn->real_escape_string($_POST["confirmPassword"]);
    
        // Veritabanından kullanıcının mevcut şifresini al
        $hashedCurrentPassword = $userData["sifre"];
    
        // Mevcut şifreyi kontrol et
        if (password_verify($currentPassword, $hashedCurrentPassword)) {
            // Yeni şifreyi kontrol et
            if ($newPassword == $confirmPassword) {
                // Kullanıcının şifresini güncelle
                $hashedNewPassword = password_hash($newPassword, PASSWORD_DEFAULT);
    
                $updatePasswordQuery = "UPDATE kullanici_tablosu SET sifre = ? WHERE kullanici_adi = ?";
                $stmt = $conn->prepare($updatePasswordQuery);
                $stmt->bind_param("ss", $hashedNewPassword, $username);
                $stmt->execute();
    
                // Başarı mesajı
                $successMessage = "Şifreniz başarıyla değiştirildi!";
            } else {
                // Hata mesajı
                $errorMessage = "Yeni şifreler uyuşmuyor.";
            }
        } else {
            // Hata mesajı
            $errorMessage = "Mevcut şifre yanlış.";
        }
    }
    
    $conn->close();
    ?>
  • 12-01-2024, 16:00:27
    #2
    Merhabalar hocam,
    Şu şekilde ilgili satırları güncellemeyi deneyebilir misiniz?
    $updatePasswordQuery = "UPDATE kullanici_tablosu SET sifre = ?, aktif_mi = ? WHERE kullanici_adi = ?";
    $stmt->bind_param("ss", $hashedNewPassword, 3,$username);
  • 12-01-2024, 16:02:16
    #3
    // Form gönderilmiş mi diye kontrol et
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        // Kullanıcı girişi
        $currentPassword = $conn->real_escape_string($_POST["currentPassword"]);
        $newPassword = $conn->real_escape_string($_POST["newPassword"]);
        $confirmPassword = $conn->real_escape_string($_POST["confirmPassword"]);
    
        // Veritabanından kullanıcının mevcut şifresini al
        $hashedCurrentPassword = $userData["sifre"];
    
        // Mevcut şifreyi kontrol et
        if (password_verify($currentPassword, $hashedCurrentPassword)) {
            // Yeni şifreyi kontrol et
            if ($newPassword == $confirmPassword) {
                // Kullanıcının şifresini güncelle
                $hashedNewPassword = password_hash($newPassword, PASSWORD_DEFAULT);
    
                $updatePasswordQuery = "UPDATE kullanici_tablosu SET sifre = ?, aktif_mi = ? WHERE kullanici_adi = ?";
                $stmt = $conn->prepare($updatePasswordQuery);
                $stmt->bind_param("ss", $hashedNewPassword, 3, $username);
                $stmt->execute();
    
                // Başarı mesajı
                $successMessage = "Şifreniz başarıyla değiştirildi!";
            } else {
                // Hata mesajı
                $errorMessage = "Yeni şifreler uyuşmuyor.";
            }
        } else {
            // Hata mesajı
            $errorMessage = "Mevcut şifre yanlış.";
        }
    }
    
    $conn->close();
    şifreyi yenileme işlemini gönderirken hata veriyor
  • 12-01-2024, 16:25:05
    #4
    error_reporting(E_ALL);
    ini_set('display_errors', 1);




    if (isset($errorMessage)) {
    // Hata mesajını kullanıcıya göster
    echo '<div style="color: red;">' . $errorMessage . '</div>';
    }

    if (isset($successMessage)) {
    // Başarı mesajını kullanıcıya göster
    echo '<div style="color: green;">' . $successMessage . '</div>';
    }





    if ($_SERVER["REQUEST_METHOD"] == "POST" && !isset($errorMessage)) {
    echo '<div style="color: red;">Lütfen formu eksiksiz doldurun.</div>';
    }
  • 12-01-2024, 16:35:33
    #5
    $conn = new mysqli($servername, $username, $password, $dbname);
    
    if ($conn->connect_error) {
        die("Veritabanına bağlanırken hata oluştu: " . $conn->connect_error);
    }
    
    // Kullanıcı adını session'dan al
    $username = $_SESSION["username"];
    
    // Kullanıcıyı veritabanından al
    $getUserQuery = "SELECT * FROM kullanici_tablosu WHERE kullanici_adi = ?";
    $stmt = $conn->prepare($getUserQuery);
    $stmt->bind_param("s", $username);
    $stmt->execute();
    $getUserResult = $stmt->get_result();
    
    if ($getUserResult->num_rows > 0) {
        $userData = $getUserResult->fetch_assoc();
    } else {
        // Kullanıcı bulunamadı, yönlendir
        header("Location: login.php");
        exit();
    }
    
    // Hata ve Başarı Mesajları
    $successMessage = $errorMessage = '';
    
    // Form gönderilmiş mi diye kontrol et
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        // Kullanıcı girişi
        $currentPassword = $conn->real_escape_string($_POST["currentPassword"]);
        $newPassword = $conn->real_escape_string($_POST["newPassword"]);
        $confirmPassword = $conn->real_escape_string($_POST["confirmPassword"]);
    
        // Veritabanından kullanıcının mevcut şifresini al
        $hashedCurrentPassword = $userData["sifre"];
    
        // Mevcut şifreyi kontrol et
        if (password_verify($currentPassword, $hashedCurrentPassword)) {
            // Yeni şifreyi kontrol et
            if ($newPassword == $confirmPassword) {
                // Kullanıcının şifresini güncelle
                $hashedNewPassword = password_hash($newPassword, PASSWORD_DEFAULT);
    
                $updatePasswordQuery = "UPDATE kullanici_tablosu SET sifre = ? WHERE kullanici_adi = ?";
                $stmt = $conn->prepare($updatePasswordQuery);
                $stmt->bind_param("ss", $hashedNewPassword, $username);
                $stmt->execute();
    
                // Başarı mesajı
                $successMessage = "Şifreniz başarıyla değiştirildi!";
            } else {
                // Hata mesajı
                $errorMessage = "Yeni şifreler uyuşmuyor.";
            }
        } else {
            // Hata mesajı
            $errorMessage = "Mevcut şifre yanlış.";
        }
    }
    
    $conn->close();
    ?>
    Kodda hata ve başarı mesajları mevcut zaten bu şekilde de çalışıyor zaten.
    fakat alttaki kod ile güncellediğim zaman şifreyi yenilediğimde sayfa hata veriyor.

    $updatePasswordQuery = "UPDATE kullanici_tablosu SET sifre = ?, aktif_mi = ? WHERE kullanici_adi = ?";
    $stmt->bind_param("ss", $hashedNewPassword, 3,$username);
  • 12-01-2024, 16:46:45
    #6
    $updatePasswordQuery = "UPDATE kullanici_tablosu SET sifre = ?, aktif_mi = 3 WHERE kullanici_adi = ?";
    arkadaşlar sadece bu şekilde çözdüm teşekkürler.
  • 12-01-2024, 21:45:48
    #7
    Buradaki hatanın sebebi bind_param kullanımının hatalı olması, queryde bir sorun yok. bind_param metodunda verdiğiniz ilk parametre, ardından gelen diğer parametrelerin tipini belirtir. Siz burada iki string ifade olduğunu belirtip 3 veri göndermişsiniz. Ayrıca ikinci veriyi de 3 yazarak string değil integer göndermişsiniz. Yani hem adet hatası, hem de tip hatası mevcut. Doğru kullanım şekli şu:

    $stmt->bind_param('sis', $hashedNewPassword, 3, $username);

    Burada string, integer, string sıralamasıyla ifadeleri gönderdiğinizi sis stringi ile belirtirsiniz.

    ozanbilbil adlı üyeden alıntı: mesajı görüntüle
    $updatePasswordQuery = "UPDATE kullanici_tablosu SET sifre = ?, aktif_mi = ? WHERE kullanici_adi = ?";
    $stmt->bind_param("ss", $hashedNewPassword, 3,$username);