PHP - MySQL fotoğraf güncelleme

ByPassTR

Hectopat
Katılım
19 Aralık 2018
Mesajlar
572
Çözümler
10
Arkadaşlar yaptığım projede bir düzenleme sayfam var ve burada tüm değişkenleri düzenleyebiliyoruz. Fakat fotoğrafları düzenleyemiyorum onun için nasıl bir sorgu yapmam gerekiyor. Hem fotoğrafı değiştirecek hem de eski fotoğrafı silecek bir sorguya ihtiyacım var.
 
Son düzenleyen: Moderatör:
Eski projelerimde şöyle bir şey kullanmıştım. Kendine göre düzenleyip kullanabilirsin işine yararsa.


PHP:
if ($_POST) { // Post olup olmadığını kontrol ediyoruz.
             $baslik = $_POST['baslik']; // Sayfa yenilendikten sonra post edilen değerleri değişkenlere atıyoruz
             $aciklama = $_POST['aciklama'];
             $tarih = $_POST['tarih'];
             $icon = $_POST['icon'];
             $hata = '';
            
             if ($_FILES["resim"]["name"] != "") {
                $resim = strtolower($_FILES['resim']['name']);
                if (file_exists('../images/' . $resim)) {
                    $hata = "$resim diye bir dosya var";
                } else {
                    $boyut = $_FILES['resim']['size'];
                    if ($boyut > (1024 * 1024 * 2)) {
                        $hata = 'Dosya boyutu 2MB den büyük olamaz.';
                    } else {
                        $dosya_tipi = $_FILES['resim']['type'];
                        $dosya_uzanti = explode('.', $resim);
                        $dosya_uzanti = $dosya_uzanti[count($dosya_uzanti) - 1];

                        if (!in_array($dosya_tipi, ['image/png', 'image/jpeg']) || !in_array($dosya_uzanti, ['png', 'jpg'])) {
                            //if (($dosya_tipi != 'image/png' || $dosya_uzanti != 'png' )&&( $dosya_tipi != 'image/jpeg' || $dosya_uzanti != 'jpg')) {
                            $hata = 'Hata, dosya türü JPEG veya PNG olmalı.';
                        } else {
                            $dosya = $_FILES["resim"]["tmp_name"];
                            copy($dosya, "../images/" . $resim);
                            unlink('../images/' . $sonuc["resim"]); //eski dosya siliniyor.
                        }
                    }
                }
            } else {
                //Eğer kullanıcı fotoğraf seçmedi ise veri tabanındaki resimi değiştirmiyoruz
                $resim = $sonuc["resim"];
            }



            if ($baslik <> "" && $aciklama <> "" && $hata == "") { // Veri alanlarının boş olmadığını kontrol ettiriyoruz.
                //Değişecek veriler
                $satir = [
                  'id' => $_GET['id'],
                  'baslik' => $baslik,
                  'aciklama' => $aciklama,
                  'tarih' => $tarih,
                  'icon' => $icon,
                  'resim' => $resim
              ];
                // Veri güncelleme sorgumuzu yazıyoruz.
              $sql = "UPDATE haber SET resim=:resim, baslik=:baslik, aciklama=:aciklama, tarih=:tarih, icon=:icon WHERE id=:id;";     
              $durum = $baglanti->prepare($sql)->execute($satir);

              if ($durum)
              {
               echo '<script>swal("Başarılı","Güncellendi","success").then((value)=>{ window.location.href = "haberler.php"});

               </script>';
           } else {
                    echo 'Düzenleme hatası oluştu: '; // id bulunamadıysa veya sorguda hata varsa hata yazdırıyoruz.
                }
            } else {
                echo 'Hata oluştu: ' . $hata; // dosya hatası ve form elemanlarının boş olma durumunua göre hata döndürüyoruz.
            }
            if ($hata != "") {
                echo '<script>swal("Hata","' . $hata . '","error");</script>';
            }
        }
 
Merhaba,
Üstteki arkadaşın ilettiği gibi bir yapı kullanabilirsin fakat
PHP:
$_FILES['resim']['type']
kullanarak yapmak yerine getimagesize fonksiyonunu if içerisinde kullanmak çok daha güvenli olacaktır.
getimagesize fonksiyonu kullanmamızın mantığı, yüklenen dosyanın resim olup olmadığını en güvenli şekilde kontrol etmektir.
 

Yeni konular

Geri
Yukarı