You need to enable JavaScript to run this app.

Ana içeriğe geç

Yazar: admin
Dizilerle Çalışma ve Array_map
Kod:
array_map
PHP, web uygulamaları geliştirirken veri işleme konusunda oldukça güçlüdür ve bu verilerin büyük bir kısmı genellikle diziler (arrays) şeklinde tutulur. Dizilerle çalışırken verileri dönüştürmek, filtrelemek veya belirli işlemlerden geçirmek sıkça karşılaşılan bir ihtiyaçtır. İşte burada devreye
Kod:
array_map
fonksiyonu girer.
Kod:
array_map
fonksiyonu, bir dizinin her bir elemanına bir geri çağırma (callback) fonksiyonu uygulayarak yeni bir dizi döndürür. Bu, özellikle karmaşık döngüler yazmak yerine daha temiz ve okunabilir kodlar oluşturmanızı sağlar.
Temel Kullanım
Önce basit bir örnekle başlayalım. Bir sayı dizisindeki her sayıyı ikiyle çarpalım:
PHP

Kod:
<?php
// Sayı dizimiz
$sayilar = [1, 2, 3, 4, 5];
// Her sayıyı ikiyle çarpan anonim bir fonksiyon (callback)
$ikiyle_carp = function($sayi) {
    return $sayi * 2;
};
// array_map kullanarak her elemana fonksiyonu uygula
$iki_kat_sayilar = array_map($ikiyle_carp, $sayilar);
echo "Orjinal Sayılar: ";
print_r($sayilar);
echo "İki Katı Sayılar: ";
print_r($iki_kat_sayilar);
?>
Çıktı:
Kod:
Orjinal Sayılar: Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
)
İki Katı Sayılar: Array
(
    [0] => 2
    [1] => 4
    [2] => 6
    [3] => 8
    [4] => 10
)
Bu örnekte,
Kod:
$ikiyle_carp
adında anonim bir fonksiyon tanımladık ve
Kod:
array_map
'e ilk parametre olarak verdik. İkinci parametre ise üzerinde işlem yapılacak dizimiz
Kod:
$sayilar
. Sonuç olarak her elemanı dönüştürülmüş yeni bir dizi elde ettik.
Birden Fazla Diziyle Çalışma
Kod:
array_map
'in güzel özelliklerinden biri de birden fazla diziyle aynı anda çalışabilmesidir. Callback fonksiyonunuz,
Kod:
array_map
'e geçirdiğiniz her diziden birer eleman alacaktır.
PHP

Kod:
<?php
$ilk_dizi = [10, 20, 30];
$ikinci_dizi = [1, 2, 3];
// İki dizinin elemanlarını toplayan fonksiyon
$toplama_fonksiyonu = function($deger1, $deger2) {
    return $deger1 + $deger2;
};
// array_map ile iki dizinin elemanlarını topla
$toplamlar = array_map($toplama_fonksiyonu, $ilk_dizi, $ikinci_dizi);
echo "Toplamlar: ";
print_r($toplamlar);
?>
Çıktı:
Kod:
Toplamlar: Array
(
    [0] => 11
    [1] => 22
    [2] => 33
)
Karmaşık Dizilerde Kullanım (Nesne Dizisi Örneği)
Kod:
array_map
'i genellikle veritabanından çektiğiniz veya bir API'den aldığınız nesne dizileri üzerinde de kullanabilirsiniz. Diyelim ki, kullanıcı nesnelerinden oluşan bir dizimiz var ve sadece kullanıcı adlarını almak istiyoruz:
PHP

Kod:
<?php
class Kullanici {
    public $id;
    public $ad;
    public $email;
    public function __construct($id, $ad, $email) {
        $this->id = $id;
        $this->ad = $ad;
        $this->email = $email;
    }
}
$kullanicilar = [
    new Kullanici(1, "Ali Yılmaz", "ali@example.com"),
    new Kullanici(2, "Ayşe Demir", "ayse@example.com"),
    new Kullanici(3, "Mehmet Can", "mehmet@example.com"),
];
// Her kullanıcı nesnesinden sadece 'ad' özelliğini al
$kullanici_adlari = array_map(function($kullanici) {
    return $kullanici->ad;
}, $kullanicilar);
echo "Kullanıcı Adları: ";
print_r($kullanici_adlari);
?>
Çıktı:
Kod:
Kullanıcı Adları: Array
(
    [0] => Ali Yılmaz
    [1] => Ayşe Demir
    [2] => Mehmet Can
)

Neden
Kod:
array_map
Kullanmalıyız?
  • Okunabilirlik:
    Kod:
    foreach
    döngüsüne göre daha kısa ve niyetinizi daha net belli eden bir yazım sunar.
  • Fonksiyonel Programlama: Veri dönüşümlerini daha fonksiyonel bir yaklaşımla yapmanızı sağlar.
  • Performans: Genellikle büyük dizilerde
    Kod:
    foreach
    döngülerine kıyasla daha optimize çalışabilir, ancak bu durum kullanıma göre değişebilir.
  • Esneklik: Anonim fonksiyonlarla birlikte kullanıldığında çok esnek veri dönüşümleri yapmanıza olanak tanır.
Forum: PHP
Yorum Yorum Yok
Yazar: admin
Nasıl Kullanılır?
Kod:
<!DOCTYPE html>
kullanımı oldukça basittir:
HTML

Kod:
<!DOCTYPE html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Sayfamın Başlığı</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <h1>Merhaba Dünya!</h1>
    <p>Bu bir örnek paragraftır.</p>
</body>
</html>
Gördüğünüz gibi, belgenin en üstünde,
Kod:
<html>
etiketinden bile önce yer almalıdır. Bu, tarayıcının sayfayı okumaya başlamadan önce hangi modu kullanacağını bilmesini sağlar.
Forum: HTML
Yorum Yorum Yok
Yazar: KodlarTR
Yapay Zeka Kodlama Önizlemesi

Yapay zeka (YZ) kodlama, insan zekasını taklit edebilen algoritmaların ve modellerin oluşturulması, eğitilmesi ve uygulanması sürecidir. Bu süreç, YZ sistemlerinin verilerden öğrenmesini, kararlar almasını ve karmaşık görevleri yerine getirmesini sağlar.

Yapay Zeka İçin Neden Kodlama Gerekli?
Kodlama, YZ'nin temelini oluşturur çünkü:
  • Algoritmaların Oluşturulması: YZ algoritmaları, belirli problemleri çözmek veya görevleri yerine getirmek için yazılan kodlardır.
  • Veri İşleme: YZ sistemleri, büyük miktarda veriyi işleyerek örüntüler ve ilişkiler bulur. Bu veri işleme adımları kod aracılığıyla gerçekleştirilir.
  • Model Eğitimi: Makine öğrenimi modelleri, veriler üzerinde eğitilerek belirli görevleri gerçekleştirmeyi öğrenir. Bu eğitim süreci de kodlama ile kontrol edilir.
  • Uygulama Geliştirme: Eğitilmiş YZ modelleri, çeşitli uygulamalara entegre edilerek gerçek dünya problemlerine çözümler sunar. Bu entegrasyon da kodlama becerisi gerektirir.
Yapay Zeka Kodlamasında Kullanılan Programlama Dilleri
Yapay zeka geliştirmede en sık kullanılan programlama dillerinden bazıları şunlardır:
  • Python: Basit söz dizimi, geniş kütüphane desteği (TensorFlow, PyTorch, scikit-learn gibi) ve güçlü topluluğu sayesinde YZ ve makine öğrenimi projelerinde en popüler dildir.
  • Java: Büyük ölçekli ve karmaşık YZ sistemleri geliştirmek için uygun, taşınabilir ve güvenilir bir dildir.
  • R: İstatistiksel analiz ve veri görselleştirme odaklıdır ve makine öğrenimi uygulamaları için çeşitli paketler sunar.
  • C++: Yüksek performans gerektiren YZ algoritmaları ve oyun YZ'si gibi gerçek zamanlı sistemler için idealdir.
  • JavaScript: Web tabanlı YZ uygulamaları geliştirmek için giderek daha fazla kullanılmaktadır.
  • Scala: Büyük veri uygulamaları ve fonksiyonel programlama için uygun bir dildir.
Yapay Zeka Kodlama Araçları
Kod yazmayı kolaylaştıran ve geliştirici verimliliğini artıran çeşitli YZ destekli araçlar bulunmaktadır:
  • Kod Oluşturucular: ChatGPT, Gemini, GitHub Copilot, Codeium gibi araçlar, doğal dil girdilerinden veya mevcut kod bağlamından kod parçacıkları veya tam fonksiyonlar üretebilir.
  • Kod Tamamlama Araçları: Gemini ve diğer IDE (Entegre Geliştirme Ortamı) eklentileri, kod yazarken olası tamamlamalar önererek yazım hızını artırır.
  • Kod İnceleme ve Hata Ayıklama Araçları: Bazı YZ araçları, kodu otomatik olarak inceleyerek potansiyel hataları ve güvenlik açıklarını tespit edebilir.
Yapay Zeka Kodlama Örnekleri
Basit bir Python örneği olarak, iki sayıyı toplayan bir YZ uygulaması aşağıdaki gibi olabilir (ancak bu temel bir programlama örneğidir ve doğrudan karmaşık bir YZ algoritması değildir):
Python

Kod:
def topla(sayi1, sayi2):
  """İki sayıyı toplar ve sonucu döndürür."""
  return sayi1 + sayi2
# Kullanıcıdan iki sayı al
num1 = float(input("İlk sayıyı girin: "))
num2 = float(input("İkinci sayıyı girin: "))
# Toplama işlemini yap ve sonucu yazdır
sonuc = topla(num1, num2)
print("Girilen sayıların toplamı:", sonuc)
Daha karmaşık YZ kodlama örnekleri, makine öğrenimi kütüphanelerini (örneğin scikit-learn) kullanarak sınıflandırma, regresyon veya kümeleme gibi görevleri gerçekleştirmeyi içerebilir. Örneğin, basit bir doğrusal regresyon modeli Python ve scikit-learn ile şu şekilde oluşturulabilir:
Python

Kod:
from sklearn.linear_model import LinearRegression
import numpy as np
# Örnek veri
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([2, 4, 5, 4, 5])
# Doğrusal regresyon modelini oluştur
model = LinearRegression()
# Modeli eğit
model.fit(X, y)
# Yeni bir girdi için tahmin yap
yeni_x = np.array([[6]])
tahmin = model.predict(yeni_x)
print("Tahmin edilen değer:", tahmin)
Bu örnekler, YZ kodlamanın temel yapı taşlarını ve kullanılan araçları göstermektedir. Gerçek dünya YZ uygulamaları genellikle çok daha karmaşık algoritmalar ve büyük veri kümeleri içerir.
Yorum Yorum Yok
Yazar: KodlarTR
TensorFlow ile Nesne Tanıma (Önceden Eğitilmiş Model)

TensorFlow Hub'dan önceden eğitilmiş bir model kullanarak nesne tanıma yapabilirsiniz. Aşağıdaki örnek, bir görüntüdeki nesneleri tanır ve etiketler.
python

Kopyala
Kod:
import tensorflow as tf
import tensorflow_hub as hub
import numpy as np
import cv2

# Modeli TensorFlow Hub'dan yükle (EfficientDet)
model = hub.load('https://tfhub.dev/tensorflow/efficientdet/d4/1')

# Görüntüyü oku ve hazırla
image = cv2.imread('nesne_resmi.jpg')
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
image_tensor = tf.convert_to_tensor(image_rgb, dtype=tf.uint8)[tf.newaxis, ...]

# Modeli çalıştır
results = model(image_tensor)

# Sonuçları işle
boxes = results['detection_boxes'].numpy()[0]
scores = results['detection_scores'].numpy()[0]
classes = results['detection_classes'].numpy()[0].astype(int)

# Tespit edilen nesneleri çiz
for i in range(len(scores)):
    if scores[i] > 0.5:  # Güven skoru %50'den büyükse
        box = boxes[i]
        y1, x1, y2, x2 = (box * [image.shape[0], image.shape[1], image.shape[0], image.shape[1]]).astype(int)
        cv2.rectangle(image, (x1, y1), (x2, y2), (0, 255, 0), 2)
        cv2.putText(image, f'Class {classes[i]}: {scores[i]:.2f}', (x1, y1-10),
                    cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)

# Sonucu göster
cv2.imshow('Nesne Tespiti', image)
cv2.waitKey(0)
cv2.destroyAllWindows()


Gereksinimler:
  • pip install tensorflow tensorflow-hub opencv-python
  • nesne_resmi.jpg adında bir görüntü dosyası.
  • Bu kod, EfficientDet modelini kullanarak görüntüdeki nesneleri tespit eder ve etiketler.
Yorum Yorum Yok
Yazar: KodlarTR
OpenCV ile Basit Görüntü Tanıma

Görüntü tanıma (image recognition) için Python tabanlı bazı temel örnekleri aşağıda paylaşıyorum. Bu örnekler, popüler kütüphanelerden OpenCV, TensorFlow ve PyTorch kullanarak nasıl görüntü tanıma yapılabileceğini gösteriyor. Kodlar basit ve anlaşılır olacak şekilde hazırlandı.

1. OpenCV ile Basit Görüntü Tanıma (Yüz Tespiti)

OpenCV, yüz tanıma gibi temel görüntü işleme görevleri için oldukça kullanışlıdır. Aşağıdaki örnek, bir görüntüdeki yüzleri tespit eder.
python

Kopyala
Kod:
import cv2

# Önceden eğitilmiş yüz tanıma modelini yükle
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

# Görüntüyü oku
image = cv2.imread('yuz_resmi.jpg')

# Görüntüyü gri tonlamaya çevir (yüz tanıma için gerekli)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Yüzleri tespit et
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))

# Tespit edilen yüzlerin etrafına dikdörtgen çiz
for (x, y, w, h) in faces:
    cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2)

# Sonucu göster
cv2.imshow('Yuz Tespiti', image)
cv2.waitKey(0)
cv2.destroyAllWindows()


Gereksinimler:
  • pip install opencv-python
  • yuz_resmi.jpg adında bir görüntü dosyası.
  • Bu kod, görüntüdeki yüzleri tespit eder ve etrafına mavi bir dikdörtgen çizer.
Yorum Yorum Yok
Yazar: admin
Basit Python kodu ve hata ayıklama

Kodlarda hata ayıklama (debugging) tekniklerinden biri **"baskı (print) yöntemiyle hata ayıklama"**dır. Bu yöntem, kodun belirli yerlerine
Kod:
print
komutları ekleyerek değişkenlerin değerlerini ve kodun akışını takip etmeyi sağlar.

Örnek: Basit Python kodu ve hata ayıklama
python

Kod:
def bolme_islemi(sayi1, sayi2):
    sonuc = sayi1 / sayi2
    return sonuc

print(bolme_islemi(10, 0))
Problem:
Bu kod çalıştırıldığında şu hatayı verir:
vbnet

Kod:
ZeroDivisionError: division by zero
Hata Ayıklama (Print Yöntemiyle)
Koda
Kod:
print
ifadeleri ekleyelim:
python

Kod:
def bolme_islemi(sayi1, sayi2):
    print(f"Gelen sayılar: sayi1={sayi1}, sayi2={sayi2}")
    sonuc = sayi1 / sayi2
    return sonuc

print(bolme_islemi(10, 0))
Çıktı:
vbnet

Kod:
Gelen sayılar: sayi1=10, sayi2=0
ZeroDivisionError: division by zero
Bu çıktıyla
Kod:
sayi2
değişkeninin sıfır olduğunu net olarak görebildik. Böylece hatanın sebebi anlaşılır.

Çözüm:
Böyle bir durumda, sıfıra bölme hatasını engellemek için kontrol eklenebilir:
python

Kod:
def bolme_islemi(sayi1, sayi2):
    print(f"Gelen sayılar: sayi1={sayi1}, sayi2={sayi2}")
    if sayi2 == 0:
        print("Hata: Sıfıra bölme yapılamaz!")
        return None
    sonuc = sayi1 / sayi2
    return sonuc

print(bolme_islemi(10, 0))
Çıktı:
makefile

Kod:
Gelen sayılar: sayi1=10, sayi2=0
Hata: Sıfıra bölme yapılamaz!
None
Bu şekilde, hem hata kaynağı anlaşıldı hem de kod güvenli hale getirildi.
Yorum Yorum Yok
Yazar: admin
Soru
Verilen bir tamsayı dizisinde, her elemanın yalnızca bir kez göründüğü ve 1'den n'e kadar olan tüm sayıların bulunduğu bir diziden eksik olan sayıyı bulun. Dizideki sayılar 1 ile n arasında olup, n dizinin uzunluğudur.
Örnek:
Kod:
Girdi: nums = [4,3,2,7,8,2,3,1]
Çıktı: 5
Açıklama: 1'den 8'e kadar olan sayılar arasında 5 eksik.
Kısıtlamalar:
  • Dizinin uzunluğu n'dir.
  • 1 ≤ nums[i] ≤ n
  • Her sayı yalnızca bir kez görünür, ancak bir sayı eksik.
Çözüm
Bu problemi çözmek için XOR işlemini kullanabiliriz. XOR'un özellikleri sayesinde, aynı sayılar birbirini sıfırlarken eksik olan sayı bulunabilir. Algoritma şu şekilde çalışır:
  1. 1'den n'e kadar olan tüm sayıların XOR'unu hesapla.
  2. Dizideki tüm sayıların XOR'unu hesapla.
  3. Bu iki XOR sonucunu birbiriyle XOR yaparak eksik sayıyı bul.
Python Kodu
Kod:
def findMissingNumber(nums):
    n = len(nums)
    xor_all = 0
    for i in range(1, n + 1):
        xor_all ^= i
   
    xor_array = 0
    for num in nums:
        xor_array ^= num
   
    return xor_all ^ xor_array
# Test
nums = [4, 3, 2, 7, 8, 2, 3, 1]
print(findMissingNumber(nums))  # Çıktı: 5
Çözümün Açıklaması
  • Adım 1: xor_all, 1'den n'e kadar olan sayıların XOR'unu tutar. Örneğin, n=8 için 1^2^3^4^5^6^7^8 hesaplanır.
  • Adım 2: xor_array, dizideki tüm sayıların XOR'unu tutar. Örneğin, [4,3,2,7,8,2,3,1] için 4^3^2^7^8^2^3^1 hesaplanır.
  • Adım 3: xor_all ^ xor_array işlemi, aynı sayıların birbirini sıfırlaması nedeniyle yalnızca eksik sayıyı döndürür.
Zaman ve Uzay Karmaşıklığı
  • Zaman Karmaşıklığı: O(n), çünkü diziyi ve 1'den n'e kadar olan sayıları birer kez tarıyoruz.
  • Uzay Karmaşıklığı: O(1), çünkü yalnızca birkaç değişken kullanıyoruz.
Bu çözüm, hem verimli hem de kolay anlaşılır bir yaklaşımdır. XOR işlemi sayesinde ek veri yapısına ihtiyaç duymadan eksik sayıyı bulabiliriz.
Yorum Yorum Yok
Yazar: admin
Öğrenci Notunu Tahmin Etme 

Kodlar.tr için bir örnekle başlayacağız. Elimizde bir grup öğrencinin sınav öncesinde çalıştığı saatler ve aldıkları sınav notları var. Amacımız, yeni bir öğrencinin çalışma saatini bildiğimizde, bu öğrencinin sınav notunu tahmin edebilecek basit bir makine öğrenmesi modeli oluşturmak.
Veri:
Aşağıdaki gibi basit bir veri setimiz olduğunu varsayalım:


Kod:
Python

import numpy as np

# Çalışma saatleri (saat)
calisma_saatleri = np.array([2, 3, 5, 7, 8, 10])

# Sınav notları
sinav_notlari = np.array([60, 75, 82, 90, 93, 98])
Çözüm:
Bu basit doğrusal ilişkiyi modellemek için doğrusal regresyon (Linear Regression) algoritmasını kullanabiliriz. Python'da bu algoritmayı uygulamak için
Kod:
scikit-learn
kütüphanesini kullanacağız.

Kod:
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt

# Doğrusal regresyon modelini oluştur
model = LinearRegression()

# Modeli verilere göre eğit
model.fit(calisma_saatleri.reshape(-1, 1), sinav_notlari)

# Yeni bir çalışma saati için not tahmini yap
yeni_calisma_saati = 6
tahmin_edilen_not = model.predict([[yeni_calisma_saati]])
print(f"{yeni_calisma_saati} saat çalışan bir öğrencinin tahmini notu: {tahmin_edilen_not[0]:.2f}")

# Veri noktalarını ve regresyon çizgisini görselleştir
plt.scatter(calisma_saatleri, sinav_notlari, color='blue', label='Gerçek Notlar')
plt.plot(calisma_saatleri, model.predict(calisma_saatleri.reshape(-1, 1)), color='red', label='Doğrusal Regresyon Çizgisi')
plt.scatter(yeni_calisma_saati, tahmin_edilen_not, color='green', marker='x', s=100, label='Tahmin Edilen Not')
plt.xlabel('Çalışma Saatleri')
plt.ylabel('Sınav Notları')
plt.title('Çalışma Saatleri ve Sınav Notları İlişkisi')
plt.legend()
plt.grid(True)
plt.show()
  1. Veri İçe Aktarma:
    Kod:
    numpy
    kütüphanesini kullanarak çalışma saatleri ve sınav notlarını içeren NumPy dizileri oluşturduk.
  2. Model Oluşturma:
    Kod:
    sklearn.linear_model
    modülünden
    Kod:
    LinearRegression
    sınıfını kullanarak bir doğrusal regresyon modeli nesnesi oluşturduk.
  3. Modeli Eğitme:
    Kod:
    fit()
    metodu ile modelimizi mevcut çalışma saatleri ve sınav notları verileriyle eğittik.
    Kod:
    reshape(-1, 1)
    ifadesi,
    Kod:
    scikit-learn
    'ün beklentisi doğrultusunda tek özellikli (çalışma saatleri) veriyi iki boyutlu bir diziye dönüştürmek için kullanılır.
  4. Tahmin Yapma: Eğitilmiş modeli kullanarak yeni bir çalışma saati (örneğimizde 6 saat) için sınav notu tahmini yaptık.
    Kod:
    predict()
    metodu, girdi olarak iki boyutlu bir dizi beklediği için
    Kod:
    [[yeni_calisma_saati]]
    şeklinde bir girdi verdik.
  5. Görselleştirme:
    Kod:
    matplotlib.pyplot
    kütüphanesi ile gerçek veri noktalarını, elde edilen doğrusal regresyon çizgisini ve tahmin edilen notu bir grafik üzerinde gösterdik. Bu, modelin veriye ne kadar iyi uyduğunu görsel olarak anlamamıza yardımcı olur.
Bu basit örnek, Python'da
Kod:
scikit-learn
kütüphanesi kullanılarak temel bir makine öğrenmesi görevinin (regresyon) nasıl gerçekleştirilebileceğini göstermektedir. Gerçek dünya problemleri genellikle daha karmaşık veri setleri ve daha gelişmiş algoritmalar gerektirse de, bu örnek temel prensipleri anlamak için iyi bir başlangıç noktasıdır.
Yorum Yorum Yok
Yazar: admin
PHP String İçinde Arama Örneği




PHP ile ilgili yaygın bir senaryo ve çözümünü içeren bir kod parçacığı örneği hazırlayacağım.
Bu örnekte, bir metin (string) içerisinde belirli bir kelimenin veya karakter dizisinin (substring) olup olmadığını nasıl kontrol edebileceğimizi göstereceğim. Bu, web geliştirmede sıkça karşılaşılan bir durumdur; örneğin kullanıcı girdilerini doğrulamak, metin analizi yapmak veya belirli anahtar kelimeleri aramak için kullanılabilir.
Aşağıdaki kodda,
Kod:
str_contains()
(PHP 8+) ve
Kod:
strpos()
(eski PHP versiyonları için de geçerli) fonksiyonlarını kullanarak bu kontrolün nasıl yapıldığını göreceksiniz.

Bu PHP kodu, bir metin içerisinde belirli bir alt dizinin varlığını kontrol etmenin iki yaygın yolunu göstermektedir:
  1. Kod:
    str_contains()
    : PHP 8.0 ve sonrasında sunulan, okunabilirliği yüksek ve doğrudan bu amaç için tasarlanmış bir fonksiyondur.
  2. Kod:
    strpos()
    : Daha eski PHP sürümlerinde de çalışan bu fonksiyon, alt dizinin metin içindeki ilk konumunu döndürür. Eğer alt dizi bulunamazsa
    Kod:
    false
    değeri döndürür. Bu fonksiyonu kullanırken, bulunan konum
    (yani metnin en başı) olabileceği için
    Kod:
    false
    ile katı karşılaştırma (
    Kod:
    !==
    ) yapmak önemlidir. Ayrıca, büyük/küçük harf duyarlılığını göz ardı ederek arama yapmak için
    Kod:
    stripos()
    fonksiyonunun nasıl kullanılacağı da gösterilmiştir.




<?php

// Aranacak ana metin
$anaMetin = "Merhaba dünya, bu bir PHP örneğidir.";

// Aranacak kelime veya karakter dizisi
$arananKelime = "dünya";
$aranmayanKelime = "javascript";

echo "Ana Metin: '" . $anaMetin . "'\n\n";

// --- Çözüm 1: str_contains() fonksiyonu (PHP 8.0 ve üzeri için önerilir) ---
echo "--- str_contains() ile Kontrol ---\n";

if (str_contains($anaMetin, $arananKelime)) {
    echo "'" . $arananKelime . "' kelimesi metin içinde bulundu.\n";
} else {
    echo "'" . $arananKelime . "' kelimesi metin içinde bulunamadı.\n";
}

if (str_contains($anaMetin, $aranmayanKelime)) {
    echo "'" . $aranmayanKelime . "' kelimesi metin içinde bulundu.\n";
} else {
    echo "'" . $aranmayanKelime . "' kelimesi metin içinde bulunamadı.\n";
}

echo "\n";

// --- Çözüm 2: strpos() fonksiyonu (Tüm PHP versiyonları ile uyumlu) ---
// strpos() fonksiyonu, bulunan kelimenin başlangıç pozisyonunu döndürür.
// Eğer kelime bulunamazsa false döndürür.
// Dikkat: Pozisyon 0 (sıfır) olabileceğinden (metnin başında bulunursa),
// katı karşılaştırma (=== veya !==) kullanmak önemlidir.
echo "--- strpos() ile Kontrol ---\n";

if (strpos($anaMetin, $arananKelime) !== false) {
    echo "'" . $arananKelime . "' kelimesi metin içinde bulundu.\n";
} else {
    echo "'" . $arananKelime . "' kelimesi metin içinde bulunamadı.\n";
}

if (strpos($anaMetin, $aranmayanKelime) !== false) {
    echo "'" . $aranmayanKelime . "' kelimesi metin içinde bulundu.\n";
} else {
    echo "'" . $aranmayanKelime . "' kelimesi metin içinde bulunamadı.\n";
}

echo "\n";

// Büyük/küçük harf duyarsız arama için stripos() kullanılabilir
$anaMetinKucukBuyuk = "Merhaba Dünya, bu bir PHP örneğidir.";
$arananKelimeKucuk = "dünya";

echo "--- stripos() ile Büyük/Küçük Harf Duyarsız Kontrol ---\n";
echo "Ana Metin (Büyük/Küçük Karışık): '" . $anaMetinKucukBuyuk . "'\n";
echo "Aranan Kelime (Küçük Harf): '" . $arananKelimeKucuk . "'\n";

if (stripos($anaMetinKucukBuyuk, $arananKelimeKucuk) !== false) {
    echo "'" . $arananKelimeKucuk . "' kelimesi (büyük/küçük harf duyarsız) metin içinde bulundu.\n";
} else {
    echo "'" . $arananKelimeKucuk . "' kelimesi (büyük/küçük harf duyarsız) metin içinde bulunamadı.\n";
}

/*
Çıktı Nasıl Olacak:

Ana Metin: 'Merhaba dünya, bu bir PHP örneğidir.'

--- str_contains() ile Kontrol ---
'dünya' kelimesi metin içinde bulundu.
'javascript' kelimesi metin içinde bulunamadı.

--- strpos() ile Kontrol ---
'dünya' kelimesi metin içinde bulundu.
'javascript' kelimesi metin içinde bulunamadı.

--- stripos() ile Büyük/Küçük Harf Duyarsız Kontrol ---
Ana Metin (Büyük/Küçük Karışık): 'Merhaba Dünya, bu bir PHP örneğidir.'
Aranan Kelime (Küçük Harf): 'dünya'
'dünya' kelimesi (büyük/küçük harf duyarsız) metin içinde bulundu.

*/

?>
Forum: PHP
Yorum Yorum Yok
Yazar: Birpay
SQL Injection ve Çözümü

Kod yazarken sadece işlevselliğe değil, güvenliğe de dikkat etmek gerekir. Özellikle veritabanı ile çalışan uygulamalarda, kullanıcıdan gelen verilerin doğrudan işlenmesi çok ciddi güvenlik açıklarına neden olabilir. Bu yazıda en yaygın güvenlik açıklarından biri olan SQL Injection'ı inceleyecek ve güvenli kodlama yöntemlerini örneklerle göstermeye çalışacağım.

- Sorun: SQL Injection Nedir?
SQL Injection (SQL Enjeksiyonu), kötü niyetli kullanıcıların, SQL sorgularına müdahale ederek veritabanı üzerinde yetkisiz işlemler yapabilmesini sağlayan bir güvenlik açığıdır.

- Örnek: Güvensiz Kod
Aşağıdaki örnek, kullanıcıdan alınan "kullanici_adi" ve "sifre" ile giriş yapılmaya çalışılan bir Python (SQLite) kod parçasıdır:

Kod:
import sqlite3

conn = sqlite3.connect('veritabani.db')
cursor = conn.cursor()

kullanici_adi = input("Kullanıcı adınızı girin: ")
sifre = input("Şifrenizi girin: ")

query = f"SELECT * FROM kullanicilar WHERE kullanici_adi = '{kullanici_adi}' AND sifre = '{sifre}'"
cursor.execute(query)

sonuc = cursor.fetchone()

if sonuc:
    print("Giriş başarılı!")
else:
    print("Hatalı kullanıcı adı veya şifre.")
- Sorun Nerede?
Bu kodda kullanıcıdan alınan veriler doğrudan SQL sorgusunun içine yerleştirilmiş. Bu durum kötü niyetli biri tarafından şu şekilde kullanılabilir:

Kod:
Kullanıcı adı: ' OR '1'='1
Şifre: ' OR '1'='1
Oluşan sorgu şöyle olur:

Kod:
SELECT * FROM kullanicilar WHERE kullanici_adi = '' OR '1'='1' AND sifre = '' OR '1'='1'
Bu sorgu daima doğru döner ve sisteme giriş yapılır. Bu, veri sızıntısına, yetkisiz erişime ve sistemin ele geçirilmesine neden olabilir.

- Çözüm: Parametreli Sorgular Kullanın
SQL Injection’a karşı en etkili yöntem parametreli sorgular kullanmaktır. Böylece kullanıcıdan gelen veri, doğrudan SQL’e yerleştirilmeden işlenir ve zararlı kod olarak algılanmaz.

Güvenli Kod Örneği
Kod:
import sqlite3

conn = sqlite3.connect('veritabani.db')
cursor = conn.cursor()

kullanici_adi = input("Kullanıcı adınızı girin: ")
sifre = input("Şifrenizi girin: ")

query = "SELECT * FROM kullanicilar WHERE kullanici_adi = ? AND sifre = ?"
cursor.execute(query, (kullanici_adi, sifre))

sonuc = cursor.fetchone()

if sonuc:
    print("Giriş başarılı!")
else:
    print("Hatalı kullanıcı adı veya şifre.")
- Neden Güvenli?
Bu yöntemde,

karakterleri yer tutucudur ve kullanıcıdan gelen veri bu yer tutuculara bağlanarak (binding) eklenir. Bu da verilerin yalnızca değer olarak algılanmasını sağlar, komut olarak değil.

Ekstra Önlemler
  1. Veritabanı kullanıcılarına minimum yetki verin.
    Uygulamanız sadece gerekli izinlerle çalışmalı (örneğin sadece SELECT/INSERT).
  2. Şifreleri veritabanında düz metin olarak saklamayın.
    SHA-256, bcrypt gibi şifreleme algoritmaları kullanın.
  3. Giriş denemelerine sınırlama koyun.
    Brute-force saldırılarına karşı korunmak için başarısız girişlerde süre limiti uygulayın.
  4. Kapsamlı loglama ve saldırı tespiti uygulayın.
Yorum Yorum Yok

Hoşgeldin, Ziyaretçi

Sitemizden yararlanabilmek için kayıt olmalısınız.

Forumda Ara

Forum İstatistikleri

Toplam Üyeler 6
Son Üye Seso Başkan
Toplam Konular 47
Toplam Yorumlar 49

Kimler Çevrimiçi

Şu anda 2 aktif kullanıcı var.
(0 Üye - 2 Ziyaretçi)

Son Yazılanlar

Kodlama Tes Günü İpuçları

Son Yorum: admin 11-04-2025, 08:28 PM

Kodlama Testlerinde Prati...

Son Yorum: admin 11-04-2025, 08:24 PM

Kodlama testleri

Son Yorum: admin 11-04-2025, 08:22 PM

Kod Çözücülerin İlacı mı,...

Son Yorum: Gets 07-10-2025, 09:42 AM

Yeni Başlayanlar için Pro...

Son Yorum: admin 06-29-2025, 08:12 AM

Kodlamaya Başlayanlar içi...

Son Yorum: admin 06-29-2025, 08:09 AM

Kodlamaya Yeni Başlayanla...

Son Yorum: admin 06-29-2025, 08:08 AM

Bol Bol Pratik Yapın Kodl...

Son Yorum: admin 06-29-2025, 08:07 AM

Küçük Başlayın ve Adım Ad...

Son Yorum: admin 06-29-2025, 07:45 AM

Doğru Programlama Dilini ...

Son Yorum: admin 06-29-2025, 07:44 AM