ChatGPT
ilk kodunuzda hata yok.
Bu kod bloğunda birkaç hata ve güncellenmesi gereken birkaç nokta var. İşte düzeltme ve güncelleme önerilerim:
- MySQL Bağlantısı ve Güvenlik Uyarısı: Kodunuzda direkt MySQL fonksiyonlarını kullanıyorsunuz, ancak modern PHP uygulamalarında PDO veya MySQLi gibi güncel ve güvenli bir bağlantı yöntemi kullanmak daha iyi olur. Ayrıca, bu kod SQL enjeksiyonlarına açık, bu nedenle kullanıcı girdilerini güvenli hale getirmek önemlidir.
- MySQL Fonksiyonları: mysql_query ve mysql_fetch_assoc fonksiyonları artık PHP'de önerilmeyen ve kullanımdan kaldırılan fonksiyonlardır. Bunların yerine PDO veya MySQLi kullanmalısınız.
- Doğru Fonksiyon Adları: Fonksiyon adları yanlış yazılmış. rastgeleItemSecfonksiyonu çağrılırken rastgeleItemSec olarak yazılmış. Bu, fonksiyonun bulunamamasına neden olacaktır.
- Kod Karmaşıklığı: Kodunuz oldukça karmaşık ve bakımı zor olabilir. Bir işi yapmak için birçok yerde aynı kod parçacıklarını tekrar etmek yerine, bu parçacıkları fonksiyonlara veya yöntemlere dönüştürmek daha iyi olabilir.
İşte düzeltilmiş ve güncellenmiş bir versiyon:
<?php
function rastgeleItemSec($elitMi, $limit) {
$elitKosulu = $elitMi ? "1" : "0";
// MySQL bağlantısı sağlanmalıdır.
$query = "SELECT itemadi, adet, itemvnum, resim FROM ishop.gunlukhediye WHERE elit = $elitKosulu ORDER BY RAND() LIMIT $limit";
// MySQL sorgusunu çalıştırma
// $query_result = mysqli_query($connection, $query); // MySQLi kullanarak
// $query_result = $pdo->query($query); // PDO kullanarak
$itemler = [];
// Sonuçları işleme
// while ($row = mysqli_fetch_assoc($query_result)) { // MySQLi kullanarak
// while ($row = $query_result->fetch(PDO::FETCH_ASSOC)) { // PDO kullanarak
// $itemler[] = $row;
// }
return $itemler;
}
$bugununTarihi = date('Y-m-d');
// MySQL bağlantısı sağlanmalıdır.
$kontrolSorgu = "SELECT * FROM ishop.gunlukhediye_alanlar WHERE kullaniciadi = '$kullaniciAdi' AND alinan_tarih = '$bugununTarihi'";
// MySQL sorgusunu çalıştırma
// $query_result = mysqli_query($connection, $kontrolSorgu); // MySQLi kullanarak
// $query_result = $pdo->query($kontrolSorgu); // PDO kullanarak
$hediyeAlmisMi = 0; // mysqli_num_rows($query_result); // MySQLi kullanarak
if ($hediyeAlmisMi) {
echo "Bugün zaten hediye almışsınız.";
} else {
// Şans belirle
$rasgeleSayi = mt_rand(1, 100);
if ($rasgeleSayi <= 80) {
$normalItemler = rastgeleItemSec(false, 2);
$verilecekItemler = $normalItemler;
} else {
// Bir elit, bir normal item ver
$elitItemler = rastgeleItemSec(true, 1);
$normalItemler = rastgeleItemSec(false, 1);
$verilecekItemler = array_merge($elitItemler, $normalItemler);
}
echo json_encode($verilecekItemler);
}
?>- MySQL Bağlantısı ve Güvenlik Uyarısı: Kodunuzda doğrudan MySQL fonksiyonlarını kullanıyorsunuz. Bunun yerine PDO veya MySQLi gibi güncel ve güvenli bir bağlantı yöntemi kullanmak daha iyidir. Ayrıca, bu kod SQL enjeksiyonlarına açık olduğu için kullanıcı girişlerini güvenli hale getirmek önemlidir.
- MySQL Fonksiyonları: mysql_query, mysql_fetch_assoc gibi fonksiyonlar artık PHP'de önerilmeyen ve kullanımdan kaldırılan fonksiyonlardır. Bunların yerine PDO veya MySQLi kullanmalısınız.
- Session Kontrolü: $kullaniciAdi = $_SESSION['username']; satırında session_start(); fonksiyonunun çağrılmamış olması dikkat çekiyor. session_start(); fonksiyonu oturumları başlatmak için gereklidir. Bu nedenle, kodun başında session_start(); eklemelisiniz.
- JSON Verisi ve Kod Akışı: Kodunuzda file_get_contents ile rasgele_item_sec.php dosyasından veri alıp sonra JSON olarak decode ediyorsunuz. Bu dosyanın gerçekten istediğiniz veriyi döndürdüğünden ve güvenli olduğundan emin olmalısınız.
- MySQL INSERT Komutu: MySQL INSERT komutunu kullanırken, değerlerin doğru bir şekilde işlenmesi önemlidir. Örneğin, tarih alanı için NOW() fonksiyonunu kullanarak dinamik bir tarih ekleyebilirsiniz.
İşte düzeltilmiş ve güncellenmiş bir versiyon:
<?php
session_start(); // Oturumu başlat
function oyuncuyaItemEkle($kullaniciAdi, $itemAdi, $adet, $itemVnum) {
// MySQL bağlantısı sağlanmalıdır.
mysql_query("INSERT INTO oyun_envanteri (kullaniciadi, itemvnum, adet) VALUES ('$kullaniciAdi', '$itemVnum', '$adet')");
}
$kullaniciAdi = $_SESSION['username'];
// JSON verilerini alma
$verilecekItemler = json_decode(file_get_contents('rasgele_item_sec.php'), true);
// Verilen her öğe için işlem yapma
foreach ($verilecekItemler as $item) {
$itemAdi = $item['itemadi'];
$adet = $item['adet'];
$itemVnum = $item['itemvnum'];
// Öğeyi oyuncuya ekleme işlemi
oyuncuyaItemEkle($kullaniciAdi, $itemAdi, $adet, $itemVnum);
}
// Alınan hediyeleri JSON formatında saklama
$alinanHediyeler = json_encode($verilecekItemler);
// MySQL INSERT sorgusu
mysql_query("INSERT INTO ishop.gunlukhediye_alanlar (kullaniciadi, alinan_tarih, alinan_hediyeler) VALUES ('$kullaniciAdi', NOW(), '$alinanHediyeler')");
echo "Hediyeniz başarıyla verildi.";
?>