PHP PDO CRUD anasayfamız
PHP,  WEB TEKNOLOJİLERİ

PHP PDO CRUD işlemi (Dosya Yüklemeli)| MYSQL10 min read

Merhabalar,
Bu yazımda sizlere PHP PDO CRUD (Create, Read ,Update, Delete) yani türkçesiyle (Oluşturma , Okuma , Güncelleme, Silme) işlemlerini görmüş olucaksınız.

Bu CRUD işlemi Dosya Yüklemeli olarak bulunmaktır.
Dosya yüklemesi olmayan CRUD işlemine buradan ulaşabilirsiniz.

Veritabanımız

PHP PDO CRUD Veritabanı
Veritabanımız

Veritabanındaki Veriler

PHP PDO CRUD Veriler
Veritabanımızdaki Veriler

Veritabanı Bağlantımız (fonk.php)

<?php
$host = '127.0.0.1';
$dbname = 'pdocrud';
$username = 'root';
$password = '';
$charset = 'utf8';
//$collate = 'utf8_unicode_ci';
$dsn = "mysql:host=$host;dbname=$dbname;charset=$charset";
$options = [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_PERSISTENT => false,
    PDO::ATTR_EMULATE_PREPARES => false,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    //   PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES $charset COLLATE $collate"
];
try {
    $baglanti = new PDO($dsn, $username, $password, $options);
    $baglanti->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo 'Bağlantı hatası: ' . $e->getMessage();
    exit;
}
?>

Anasayfamız (Gösterme/READ) (index.php)

index.php sayfasında verileri Gösterme işlemleri bulunmaktadır.
Ayrıca Düzenle , Ekle , Sil İşlemlerine tıklayarak işlemler yapılabilir.

PHP PDO ile CRUD anasayfamız
Anasayfamız (READ/Gösterme)
<!DOCTYPE html>
<html>
<head>
	<title>PDO CRUD</title>
	<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
	<link rel="stylesheet" type="text/css" href="css/all.min.css">
</head>
<body>

	<container>
		<div class="row">
			<div class="col-md-8">
				<a href="ekle.php"><button type="button" class="btn btn-primary btn-lg btn-block">YENİ VERİ EKLE</button></a>
				<table class="table table-striped">
					<thead>
						<tr>
							<th scope="col">ID</th>
							<th scope="col">FOTOĞRAF</th>
							<th scope="col">BAŞLIK</th>
							<th scope="col">AÇIKLAMA</th>
							<th scope="col">Düzenle</th>
							<th scope="col">SİL</th>
						</tr>
					</thead>
					<tbody>
						<?php
						include('fonk.php'); // İndex.php sayfamıza veritabanını çağırıyoruz

						$sorgu = $baglanti->prepare('Select * from makale'); // Veritabanındaki Makale tablosundaki tüm verileri çekiyoruz
						$sorgu->execute(); // Sorgumuzu çalıştırıyoruz

						while($sonuc=$sorgu->fetch()) // While Döngüsü ile Verilerimzi döndürüyoruz
						
						{  // While Başlangıcı

							?>
							<tr>
								<th scope="row"><?= $sonuc['id']?></th>
								<td><img src="img/<?= $sonuc["foto"] ?>" width="150px"/></td>
								<td><?= $sonuc['baslik']?></td>
								<td><?= $sonuc['aciklama']?></td>
								<td>
								<a href="duzenle.php?id=<?= $sonuc["id"] ?>"><button type="button" class="btn btn-success">Düzenle</button></a>
								</td>
								<td>
								<a href="sil.php?id=<?= $sonuc["id"] ?>"><button type="button" class="btn btn-warning">SİL</button></a>
								</td>
							</tr>

							<?php
						}  // While Bitiş

						?>
						
					</tbody>
				</table>

			</div>
		</div>
	</container>

	<script src="js/jquery-3.4.1.min.js"></script>	
	<script src="js/bootstrap.min.js"></script>
</body>
</html>

Düzenleme (Edit) sayfası (duzenle.php)

Verileri Güncellerken Tüm durumları (hata vb) durumları SweetAlert yöntemiyle gösterilmiştir.

PHP PDO ile CRUD Düzenle
Düzenleme sayfası
<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
    <title></title>
</head>
<?php
include('fonk.php');

$sorgu = $baglanti->prepare("SELECT * FROM makale Where id=:id");
$sorgu->execute(['id' => (int)$_GET["id"]]);
$sonuc = $sorgu->fetch();//sorgu çalıştırılıp veriler alınıyor
?>
<body>
    <div class="container">
        <div class="row">
            <div class="col-md-6">
                <a href="index.php"><button type="button" class="btn btn-danger btn-lg btn-block">Geri DÖN</button></a>
                <div class="card mb-3">
                    <div class="card-body">                     
                       <form method="post" action="" enctype="multipart/form-data">
                         <div class="form-group">
                            <img src="img/<?= $sonuc["foto"] ?>" width="150" alt="">
                            <label for="foto">Foto</label>
                            <input type="file" name="foto" class="form-control-file" id="foto">
                        </div>
                        <div class="form-group">
                            <label>Başlık</label>
                            <input required type="text" value="<?= $sonuc["baslik"] ?>" class="form-control" name="baslik"
                            placeholder="Başlık">
                        </div>                  
                        <div class="form-group">
                            <label>Açıklama</label>
                            <input required type="text" value="<?= $sonuc["aciklama"] ?>" class="form-control" name="aciklama"
                            placeholder="Açıklama">
                        </div>    
                        <div class="form-group">
                            <button type="submit" class="btn btn-primary">Güncelle</button>
                            <script type="text/javascript" src="js/sweetalert.min.js"></script>
                            <?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'];
               $hata = '';

               if ($_FILES["foto"]["name"] != "") {
                $foto = strtolower($_FILES['foto']['name']);
                if (file_exists('images/' . $foto)) {
                    $hata = "$foto diye bir dosya var";
                } else {
                    $boyut = $_FILES['foto']['size'];
                    if ($boyut > (1024 * 1024 * 2)) {
                        $hata = 'Dosya boyutu 2MB den büyük olamaz.';
                    } else {
                        $dosya_tipi = $_FILES['foto']['type'];
                        $dosya_uzanti = explode('.', $foto);
                        $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["foto"]["tmp_name"];
                            copy($dosya, "img/" . $foto);
                            unlink('img/' . $sonuc["foto"]); //eski dosya siliniyor.
                        }
                    }
                }
            } else {
                //Eğer kullanıcı fotoğraf seçmedi ise veri tabanındaki resimi değiştirmiyoruz
                $foto = $sonuc["foto"];
            }

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

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

                </script>';     // Eğer güncelleme sorgusu çalıştıysa urunler.php sayfasına yönlendiriyoruz.
            } 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>';
            }
        }


        ?>
    </div>
</form>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

Yeni Veri Ekleme (Create) sayfası (ekle.php)

PHP PDO CRUD İşlemi| Veri Ekleme
Veri Ekleme Sayfası
<!DOCTYPE html>
<html>
<head>
	<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
	<title></title>
</head>
<body>
	<div class="container">
		<div class="row">
			<div class="col-md-6">
				<a href="index.php"><button type="button" class="btn btn-danger btn-lg btn-block">Geri DÖN</button></a>
				<div class="card mb-3">
					<div class="card-body">						
						<form method="post" action="" enctype="multipart/form-data">
							<div class="form-group">
								<label for="foto">Foto</label>
								<input required type="file" name="foto" class="form-control-file" id="foto">
							</div>
							<div class="form-group">
								<label>Başlık</label>
								<input required type="text" class="form-control" name="baslik" placeholder="Başlık">
							</div>				
							<div class="form-group">
								<label>Açıklama</label>
								<input required type="text" class="form-control" name="aciklama" placeholder="Açıklama">
							</div>
							<div class="form-group">
								<button type="submit" class="btn btn-primary">Güncelle</button>
								<script type="text/javascript" src="js/sweetalert.min.js"></script>
							</div>
							<?php
							include('fonk.php');

							if ($_POST) { // Sayfada post olup olmadığını kontrol ediyoruz.

    $baslik = $_POST['baslik']; // Sayfa yenilendikten sonra post edilen değerleri değişkenlere atıyoruz
    $aciklama = $_POST['aciklama'];   
    $hata = "";

    // Veri alanlarının boş olmadığını kontrol ettiriyoruz. başka kontrollerde yapabilirsiniz.
    if ($baslik <> "" && $aciklama <> "" && isset($_FILES['foto'])) {

    	if ($_FILES['foto']['error'] != 0) {
    		$hata .= 'Dosya yüklenirken hata gerçekleşti lütfen daha sonra tekrar deneyiniz.';
    	} else {

    		$dosya_adi = strtolower($_FILES['foto']['name']);
    		if (file_exists('images/' . $dosya_adi)) {
    			$hata .= " $dosya_adi diye bir dosya var";
    		} else {
    			$boyut = $_FILES['foto']['size'];
    			if ($boyut > (1024 * 1024 * 2)) {
    				$hata .= ' Dosya boyutu 2MB den büyük olamaz.';
    			} else {
    				$dosya_tipi = $_FILES['foto']['type'];
    				$dosya_uzanti = explode('.', $dosya_adi);
    				$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 {
    					$foto = $_FILES['foto']['tmp_name'];
    					copy($foto, 'img/' . $dosya_adi);


                        //Eklencek veriler diziye ekleniyor
    					$satir = [
    						'foto' => $dosya_adi,
    						'baslik' => $baslik,    						
    						'aciklama' => $aciklama,
    					];

                        // Veri ekleme sorgumuzu yazıyoruz.
    					$sql = "INSERT INTO makale SET foto=:foto, baslik=:baslik,aciklama=:aciklama;";
    					$durum = $baglanti->prepare($sql)->execute($satir);

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

    						</script>';
    					}


    				}
    			}
    		}
    	}
    }
    if($hata!=""){
    	echo '<script>swal("Hata","'.$hata.'","error");</script>';
    }
}

?>
</form>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

Veri Silme (Delete) İşlemi (sil.php)

index.php sayfasında sil butonuna basıldığı anda çalışacak kodlar , bu kodlar ile veriler ile beraber fotoğraf ile silinebilmektedir , dilerseniz unlink kodunu silip fotoğrafları olduğu gibi bırakabilirsiniz.

<?php
if ($_GET) {

    $sayfa = $_GET["sayfa"];
    include("fonk.php"); // veritabanı bağlantımızı sayfamıza ekliyoruz.
    $sorgu = $baglanti->prepare("SELECT * FROM makale Where id=:id");
    $sorgu->execute(['id' => (int)$_GET["id"]]);
    $sonuc = $sorgu->fetch();//sorgu çalıştırılıp veriler alınıyor
    unlink('img/' . $sonuc["foto"]);//eski dosya siliniyor. isteğe bağlı

    // id'si seçilen veriyi silme sorgumuzu yazıyoruz.
    $where = ['id' => (int)$_GET['id']];
    $durum = $baglanti->prepare("DELETE FROM makale WHERE id=:id")->execute($where);
    if ($durum) {
        header("location:index.php"); // Eğer sorgu çalışırsa index.php sayfasına gönderiyoruz.
    }
}
?>

Yazımızın sonuna geldik 🙁

Bu yazım sizlere faydalı olduğunu düşünüyorum , bu uygulamayı birçok projelerinizde kullanabilir veya entegre edebilirsiniz.

Uygulamayı projenize entegre etmeden test ediniz, test ettikten sonra entegre edin.

PHP PDO CRUD Uygulamasını ve Veritabanına Buradan Bulabilirsiniz ==> PdoCRUD.zip

Görüşleriniz bizim için değerli , emoji bırakarak yada yorum yazarak görüşlerinizi bize belirtebilirsiniz. 

Sevgi ve saygılarımla

İyi KODLAMALAR 🙂