PHP veri güncelleme ve kaydet butonunu işlevsel hale getirme

abdalwahid

Hectopat
Katılım
8 Mart 2021
Mesajlar
92
Daha fazla  
Cinsiyet
Erkek
Arkadaşlar bir sayfam var, kalabalık yapmaması için CSS ve JS dosyalarını sildim. Bu sayfada üyeye ait mevcut verileri çekiyorum. Benim ihtiyacım olan isim, telefon ve email bilgilerini güncellemek. Yani kaydet butonunu işlevsel hale getirmek. Direk sayfa içerisine gerekli kodları yazıp çalışır hale gelmesinde yardımcı olabilirseniz memnun olurum.
Bir de profil fotosu değiştirme işlemi var, o biraz daha zor sanırım ama mümkün olursa o da çok iyi olur
 
Merhaba,

Veri tabanınız MySQL mi bir de sunucunuz Apache mi?
 
Nasıl bir projeniz var hiçbir kod paylaşmamışsınız ne istediğiniz tam anlaşılmıyor.

Büyük ihtimal şöyle yapacak. Verileri veri tabanından çekip sitede gösteriyor. Amaç herhalde verilerin çekilip gösterildiğı sayfada veriyi değiştirip sonra kaydetmek galiba ben bunu anladım. Forumda isim değiştirme ve şifre değiştirme işleminin benzerini yapmaya çalışacak.
 
Kendi veritabanı bilgilerine göre değiştirerek çalıştırabilirsin bu şekilde. Tabii bu sayfaya kullanıcının ID bilgisini göndermen gerek. PHP bildiğini varsayarak yazdım yapamazsan yardımcı olurum tekrar.

PHP:
<?php
include("veritabani_baglanti_dosyasi.php");
$gelenid = $_GET['id'];
$sorgu = $db->prepare("SELECT * FROM kullanici_tablosu WHERE id = ?");
$sorgu->bindParam(1, $gelenid, PDO::PARAM_INT);
$sorgu->execute();
$cikti = $sorgu->fetch(PDO::FETCH_ASSOC);
?>
    <form action="" method="POST">
        <input type="text" value="<?=$cikti['isim']?>" name="isim">
        <input type="text" value="<?=$cikti['telefon']?>" name="telefon">
        <input type="text" value="<?=$cikti['mail']?>" name="mail">
        <input type="submit" name="kaydet" value="Kaydet">
    </form>
    <?php

        if ($_POST['kaydet']) {
            
            $isim = $_POST['isim'];
            $telefon = $_POST['telefon'];
            $mail = $_POST['mail'];
            
            if ($isim<>"" && $telefon<>"" && $mail<>"") {

                if ($db->query("UPDATE kullanici_tablosu SET isim = '$isim', telefon = '$telefon', mail = '$mail' WHERE id =".$gelenid))
                {
                    echo 'Güncellendi.';
                    
                }
                else
                {
                    echo 'Güncellenemedi.';
                }
            }
            
        }
        ?>
 
Merhaba,

PDO ile bağlantı sağlamayın, charset vb. ayarlarını yapmanız gerekir. Doğrudan mysqli ile bağlantı yapın sizin için daha kolay olur. Aşağıda bir örnek iletiyorum size. Docker üzerinde kurduysanız, db için oluşturduğunuz konteynerın adı server adını alır.


Kod:
        $serverName = 'localhost';
        $dbUserName = 'root';//DB kullanıcı adı buraya gelir, root ile farklı networkteki veri tabanına bağlanamazsınız.
        $dbPass = 'secret';//DB şifresi buraya gelir
        $dbName = 'intelligence';//DB adı buraya gelir
        $port = 3306; //3306 - 3308

        $conn = mysqli_connect($serverName, $dbUserName, $dbPass, $dbName, $port);

        if (!$conn) {
            die("Bağlantı kurulamadı: " . mysqli_connect_error());
        }
        
                $USER_MAIL = $_POST['USER_MAIL'];
        $USER_PC_NAME = $_SERVER['REMOTE_ADDR'];

        $sql = "SELECT USER_PC_NAME, USER_MAIL FROM users WHERE USER_MAIL = '$USER_MAIL' and USER_PC_NAME = '$USER_PC_NAME' ";
        $result = $conn->query($sql);

        if ($result->num_rows > 0) {
            while ($row = $result->fetch_assoc()) {
                session_start();
                $_SESSION['User_Mail'] = $row['USER_MAIL'];
                $_SESSION['date'] = date('ymd');
                $_SESSION['token'] = md5(uniqid(mt_rand(), true));
                header('Location: /Main.php?token=' . $_SESSION["token"]);
                die();
            }
        }
 


Verdiğiniz bilgilerden yola çıkarak bir şeyler yaptım şu an kaydediyor. Dosyanın son hali şu şekilde. profil resmi değişme konusunda da yardımcı olabilir misiniz?

O kadar fazla bilgim yok malesef o yüzden verdiğim dosyalar üzerinde yardımcı olursanız daha hızlı yol alabilirim. Şu an düzenlemeler çalışır durumda resim yükleme kısmında kaldım.

 
Tekrar Merhaba,

Son olarak resim vb. değiştirmek için resmin file serverda kayıtlı olması gerekiyor. Ancak file servera kaydetmenizi önermem, bunun yerine MySQL8'de blob olarak veri tabanına kaydedebilirsiniz. Aşağıda örnek obje kaydedebileceğiniz yapıyı paylaşıyorum.

PDO Örnek:


DB Örnek:


Son olarak veri tabanındaki kullanıcı id'si ile işlem yaptığınızı gördüm. Onun yerine tek kullanımlık session id (token) kullanmanız güvenlik açısından daha uygun olur.

Burada da 2 token oluşturmanız gerekir. 1.'si URL'de tutulur. 2.'si cookie üzerinde tutulur. Bu kullanıcı giriş yaptıktan sonra bu tokenlar ile işlem yapar ya da işlemleri engellenir. Aksi takdirde CSRF'e karşı herhangi bir güvenliğiniz olmaz.

Örnek token yapısı aşağıda yer almaktadır. $_SESSION['date'] olarak gördüğünüzü 1 günlük geçerli yaparsınız, bu sayede saat 24'ü geçtiğinde sunucu tüm sessionları sonlandırır.

$_SESSION['date'] = date('ymd');
$_SESSION['token'] = hash('sha512', uniqid(mt_rand(), true));
$cookie = hash('sha512', uniqid(mt_rand(), true));
setcookie("cookietoken", $cookie, time() + 86400);
exit(header('Location: /Main.php?token=' . $_SESSION["token"]));
 
@FDDeathWing

Malesef ben başlangıç aşamasındayım yaptığınız gibi tariflerle yol alamıyorum. Bulduğum bir örnekten yola çıkarak resim yükleme işini de hallettim. Bir kaç ufak sorun kaldı sadece.

Sayfanın altında üye banlamak için buton var banlaya tıklayınca çalışıyor ama sayfayı güncellediğimde ancak değişikliği görüyorum.@dgknbzgluverdiği kodda da aynı sorun vardı şu satırı

header("Location: uyeayar.php?id=$id");

verdiği kodların arasına eklediğimde düzeldi.

if(isset($_GET['uye_turu']) && $_GET['uye_turu'] == '2'){
$db->query("UPDATE uyeler SET uye_turu='2' WHERE id=$id ");
echo $_GET['id'];
}

bu satıra bunu nasıl uygularım..

butonda şu;

<a href="<?php echo base_url() ?>uyeayar.php?id=<?php echo $profilxyz["id"] ?>&uye_turu=0" type="submit" class="btn btn btn-primary mb-1" style="color:#ffffff;text-shadow:1px 1px #000000">Üye Yasakla</a>
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…