Merhaba,
Örnek kodlarını paylaşırsan, yardımcı olma olasılığı daha yüksektir arkadaşım.
<?php
// Katılımcı sayısını kontrol et
$stmt = $pdo->prepare("SELECT COUNT(*) FROM participants");
$stmt->execute();
$participantCount = $stmt->fetchColumn();
// Katılımcı ekleme işlemi
$message = '';
if ($_SERVER["REQUEST_METHOD"] == "POST" && $participantCount < 100) {
$name = $_POST['name'];
$email = $_POST['email'];
// Katılımcıyı veritabanına ekle
$stmt = $pdo->prepare("INSERT INTO participants (name, email) VALUES (:name, :email)");
try {
$stmt->execute([':name' => $name, ':email' => $email]);
$message = 'Başarıyla katıldınız!';
} catch (PDOException $e) {
$message = 'Katılım başarısız: ' . $e->getMessage();
}
}
// Güncel katılımcı sayısını tekrar al
$stmt->execute();
$participantCount = $stmt->fetchColumn();
?>
PHPMailer ile Mail Gönderme
PHPMailer, PHP ile mail göndermek için kullanılan popüler ve güçlü bir kütüphanedir. SMTP sunucu üzerinden güvenli bir şekilde mail göndermek için kullanabilirsiniz. İlk adım olarak PHPMailer'ı projenize dahil etmeniz gerekmektedir. Composer kullanıyorsanız, PHPMailer'ı projenize aşağıdaki komut ile ekleyebilirsiniz:
composer require phpmailer/phpmailer
Ardından, PHPMailer ile bir mail göndermek için aşağıdaki örneği kullanabilirsiniz:
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'vendor/autoload.php'; // Composer autoload dosyası
$mail = new PHPMailer(true);
try {
//Server ayarları
$mail->SMTPDebug = 0; // Hata ayıklama çıktısını etkinleştirmek için 2 yapın
$mail->isSMTP(); // SMTP kullanarak gönderim yap
$mail->Host = 'smtp.example.com'; // SMTP sunucunuzun adresi
$mail->SMTPAuth = true; // SMTP kimlik doğrulaması kullan
$mail->Username = '[email protected]'; // SMTP kullanıcı adınız
$mail->Password = 'sifre'; // SMTP şifreniz
$mail->SMTPSecure = 'tls'; // Şifreleme için 'tls' veya 'ssl' kullanın
$mail->Port = 587; // TCP portu
//Alıcılar
$mail->setFrom('[email protected]', 'Gonderen Adi');
$mail->addAddress('[email protected]', 'Alici Adi'); // Alıcı adresi ve adı (isteğe bağlı)
// İçerik
$mail->isHTML(true); // E-posta formatını HTML olarak ayarla
$mail->Subject = 'Test Maili';
$mail->Body = 'Bu bir <b>HTML mail</b> içeriğidir.';
$mail->AltBody = 'Bu bir HTML mail içeriğidir.';
$mail->send();
echo 'Mail başarıyla gönderildi';
} catch (Exception $e) {
echo "Mail Gönderimi Başarısız. Hata: {$mail->ErrorInfo}";
}
?>
Bu örnekler, basit mail gönderim işlemleri için bir başlangıç noktası sunar. Ancak, gerçek bir projede kullanmadan önce, SMTP sunucu ayarlarınızı ve güvenlik ayarlarınızı doğru şekilde yapılandırdığınızdan em
in olun. PHPMailer dokümantasyonunda daha gelişmiş özellikler ve kullanım senaryoları hakkında daha fazla bilgi bulabilirsiniz.
React ve Tailwind CSS ile geliştirdiğiniz bu kodda, arka plan renginin değişikliği için butona iki kez tıklamanız gerektiğini belirtmişsiniz. Tek tıklamayla arka plan rengini değiştirmek istiyorsanız, problemin muhtemelen React'in state yönetimi veya Tailwind CSS'in dinamik sınıflarının kullanımıyla ilgili olduğunu düşünebiliriz.
Kodunuzda doğrudan bir arka plan rengi değişikliği ile ilgili bir işlem göremiyorum, ancak genel bir çözüm önerisi sunabilirim. Eğer arka plan rengini dinamik olarak değiştirmek istiyorsanız, React'te bir state kullanarak bu işlemi yönetebilirsiniz. Örneğin, bir butona tıkladığınızda arka plan rengini değiştiren basit bir örnek:
import React, { useState } from "react";
import { NavLink, useNavigate } from "react-router-dom";
import { useModal } from "../ModalContext";
import "./aside.css";
function Aside() {
const { openModal } = useModal();
const navigate = useNavigate();
// Arka plan rengini kontrol etmek için bir state tanımlayın
const [bgColor, setBgColor] = useState("bg-blue-500"); // Başlangıç rengi
const handleNewPostClick = () => {
openModal();
};
const handleJournalClick = () => {
navigate('/');
// Arka plan rengini değiştir
setBgColor("bg-green-500"); // Yeni renk
};
const handleRolidClick = () => {
navigate('/rolid');
// Arka plan rengini değiştir
setBgColor("bg-red-500"); // Yeni renk
};
return (
<div className={`fixed bottom-0 z-50 w-full -translate-x-1/2 border-t border-blue-500 left-1/2 ${bgColor}`} style={{ backgroundColor: "#1b2642" }}>
<div className="w-full">
<div className="grid max-w-xs grid-cols-2 gap-1 px-1 py-0.5 mx-auto my-1 bg-blue-200 rounded-lg dark:bg-white" role="group">
<button type="button" className="px-4 py-1 text-xs font-medium text-white-90 rounded-lg" onClick={handleJournalClick}>
Journal
</button>
<button type="button" className="px-4 py-1 text-xs font-medium text-white-90 rounded-lg" onClick={handleRolidClick}>
Rolid
</button>
</div>
</div>
</div>
);
}
export default Aside;
Bu örnekte, useState
hook'u kullanılarak bgColor
adında bir state tanımlanmış ve bu state, arka plan rengini tutmak için kullanılmıştır. Butonlara tıklama işlemleri sırasında setBgColor
fonksiyonu ile bu state güncellenir ve böylece dinamik olarak arka plan rengi değiştirilmiş olur.
Çok dilli bir sistem oluşturmak aslında düşündüğünüzden daha basit olabilir. Örneğin, bir blog yazısı eklemek istiyorsunuz ve bu yazının farklı dil versiyonları olacak. Bu durumda, başlık ve açıklamaları JSON formatında kaydedebilirsiniz. Böylece, Türkçe (TR), İngilizce (EN), Rusça (RU) gibi farklı dillerdeki versiyonlarını kolayca sorgulayabilir ve yönetebilirsiniz.
Dil desteği için gerekli olan diğer temel dosyaları ise, sabit bir PHP dosyası oluşturarak yönetebilirsiniz. Bu dosyayı düzenleyerek, uygulamanızın ihtiyaç duyduğu dil yapılandırmalarını kolayca ekleyebilir ve güncelleyebilirsiniz. Dil sistemi konusunda yaratıcılığınızı serbest bırakabilirsiniz; çünkü bu alanda uygulanabilecek çok sayıda yöntem ve mantık vardır. Her türlü yaklaşımı deneyerek, projeniz için en uygun çözümü bulabilirsiniz.
Merhaba! Emlak sitesi için kredi hesaplama özelliği eklemek gerçekten kullanışlı bir fikir. Kredi tutarı, vade ve faiz oranı gibi bilgilerle bir kredi hesaplama aracı kurmak, kullanıcılar için oldukça faydalı olacaktır. Fakat dediğiniz gibi, farklı bankaların farklı faiz oranları sunması ve bu oranların zaman içinde değişebilmesi, hesaplamaları biraz karmaşıklaştırabilir.
Bankaların güncel faiz oranlarını otomatik olarak çeken bir sistem kurmak mümkün olabilir ancak bu, bankaların API'larına erişim gerektirebilir ve bu da her zaman mümkün olmayabilir. Alternatif olarak, ortalama bir faiz oranı kullanarak temel bir hesaplama yapabilir ve kullanıcıları sonuçların sadece bir tahmin olduğunu ve kesin bilgiler için doğrudan bankalarla iletişime geçmeleri gerektiği konusunda uyarabilirsiniz.
Bir diğer seçenek olarak, kredi hesaplama sitelerine link vermek de düşünülebilir. Ancak, başka bir siteye link vermek genellikle izin gerektirmez; çünkü internetin temel bir parçasıdır ve genelde bilgi paylaşımı amaçlı yapılır. Ancak, sitenizin kullanıcı deneyimini iyileştirmek için bu tür bir yönlendirmeyi yapmadan önce, ilgili sitenin sahibiyle iletişime geçip izin almak en iyisi olabilir. Bu, herhangi bir yanlış anlaşılmayı önler ve iyi niyetinizi gösterir.
Ayrıca, sitenize bir kredi hesaplama aracı entegre etmek için çeşitli hazır çözümler ve eklentiler de bulunabilir. WordPress gibi popüler bir platform kullanıyorsanız, bu tür işlevselliği sağlayabilecek eklentiler mevcut olabilir. Bu eklentiler genellikle kullanıcıların site içinde kalmasını sağlar ve dış sitelere yönlendirme ihtiyacını azaltır.
Son olarak, eğer yazılım geliştirmede bir miktar deneyiminiz varsa veya bir geliştiriciyle çalışıyorsanız, kendi kredi hesaplama aracınızı oluşturabilirsiniz. Bu, kullanıcıların sitenizde daha fazla zaman geçirmesini sağlar ve sitenizin genel kullanıcı deneyimini artırabilir. Bu tür bir araç için basit bir formül kullanabilirsiniz:
Burada:
- (A) aylık ödeme tutarını,
- (P) kredi tutarını (ana para),
- (r) aylık faiz oranını (yıllık faiz oranı / 12),
- (n) toplam ödeme sayısını (ay cinsinden vade) temsil eder.
Bu formülü kullanarak, bir web sayfasında çalışacak basit bir JavaScript hesaplayıcı oluşturabilirsiniz. Bu, kullanıcıların farklı senaryoları hızlı bir şekilde hesaplamasına olanak tanır.
Merhaba!
JavaScript ile Resim Döndürme:
Kullanıcılar resmi yüklediğinde, JavaScript kullanarak resmin oryantasyonunu kontrol edebilir ve gerektiğinde döndürebilirsiniz. Exif.js gibi kütüphaneler, resim dosyalarının içindeki EXIF verilerini okuyarak resmin doğru oryantasyonunu bulmanıza yardımcı olabilir.Örnek kullanım (Exif.js kütüphanesi kullanarak):
<script src="https://cdn.jsdelivr.net/npm/exif-js"></script> <input type="file" id="fileInput" accept="image/*" onchange="handleFileSelect(event)"> <img id="previewImage" alt="Preview"> <script> function handleFileSelect(event) { const file = event.target.files[0]; if (file) { const reader = new FileReader(); reader.onload = function (e) { const img = new Image(); img.src = e.target.result; img.onload = function () { const orientation = EXIF.getTag(this, "Orientation"); const rotatedImage = rotateImage(img, orientation); document.getElementById("previewImage").src = rotatedImage.src; }; }; reader.readAsDataURL(file); } } function rotateImage(img, orientation) { const canvas = document.createElement("canvas"); const ctx = canvas.getContext("2d"); if (orientation > 4) { canvas.width = img.height; canvas.height = img.width; } else { canvas.width = img.width; canvas.height = img.height; } switch (orientation) { case 2: ctx.transform(-1, 0, 0, 1, img.width, 0); break; case 3: ctx.transform(-1, 0, 0, -1, img.width, img.height); break; case 4: ctx.transform(1, 0, 0, -1, 0, img.height); break; case 5: ctx.transform(0, 1, 1, 0, 0, 0); break; case 6: ctx.transform(0, 1, -1, 0, img.height, 0); break; case 7: ctx.transform(0, -1, -1, 0, img.height, img.width); break; case 8: ctx.transform(0, -1, 1, 0, 0, img.width); break; default: ctx.transform(1, 0, 0, 1, 0, 0); break; } ctx.drawImage(img, 0, 0); const rotatedImage = new Image(); rotatedImage.src = canvas.toDataURL("image/jpeg"); return rotatedImage; } </script>
PHP ile Güncelleme:
Ardından, döndürülen resmi sunucuya yüklediğinizde, PHP veya başka bir sunucu tarafı dili kullanarak resmi güncelleyebilir ve veritabanındaki ismini değiştirebilirsiniz.Örnek PHP kodu (sadece fikir vermesi açısından):
$uploadedImagePath = 'path/to/uploaded/image.jpg'; $rotatedImagePath = 'path/to/uploaded/rotated_image.jpg'; $img = imagecreatefromjpeg($uploadedImagePath); $rotatedImg = imagerotate($img, 90, 0); // 90 derece saat yönüne döndürme imagejpeg($rotatedImg, $rotatedImagePath); imagedestroy($img); imagedestroy($rotatedImg); // Veritabanında ismi güncelle // Örneğin: UPDATE images SET filename = 'rotated_image.jpg' WHERE filename = 'image.jpg';
Merhaba!
Dosyayı yükledikten sonra resmi küçülten ve ardından kaydeden bir örnek ekledim.
Bu örneği, resmi JPEG formatında kaydederek sıkıştıran ve ardından veritabanına kaydeden bir işlem içerir.
<?php
include '../../include/db.php';
$zaman = time();
if ($_FILES["resim"]) {
// ... Diğer işlemler ...
$yol = "../../uploads/";
$yuklemeYeri = $yol . $zaman . $_FILES["resim"]["name"];
$yuklenendosyaadi = $zaman . $_FILES["resim"]["name"];
if (file_exists($yuklemeYeri)) {
echo "Dosya daha önceden yüklenmiş";
} else {
if ($_FILES["resim"]["size"] > 640000000) {
echo "Dosya boyutu sınırı";
} else {
$dosyaUzantisi = pathinfo($_FILES["resim"]["name"], PATHINFO_EXTENSION);
if (!in_array($dosyaUzantisi, array("jpg", "jpeg", "png", "pdf", "tif", "tiff"))) {
echo "Sadece jpg, jpeg, png uzantılı dosyalar yüklenebilir.";
} else {
// Resmi küçültme işlemi
$kucukResim = imagecreatefromstring(file_get_contents($_FILES["resim"]["tmp_name"]));
$genislik = imagesx($kucukResim);
$yukseklik = imagesy($kucukResim);
$oran = 0.5; // Örnek olarak %50 küçültme
$yeniGenislik = $genislik * $oran;
$yeniYukseklik = $yukseklik * $oran;
$kucukResimYeni = imagecreatetruecolor($yeniGenislik, $yeniYukseklik);
imagecopyresampled($kucukResimYeni, $kucukResim, 0, 0, 0, 0, $yeniGenislik, $yeniYukseklik, $genislik, $yukseklik);
// Resmi JPEG olarak kaydetme
imagejpeg($kucukResimYeni, $yuklemeYeri);
$sonuc = true; // Burada $sonuc'u kontrol etmek yerine doğrudan devam ediyoruz.
// Diğer işlemler devam eder...
// Veritabanına kaydetme işlemi
$account_id = @$_SESSION['account_id'];
$kaydet = mysqli_query($con, "UPDATE geciskartlari SET resim = '$yuklenendosyaadi' WHERE submission_id = '$kart_id'");
echo $kaydet ? "Dosya başarıyla yüklendi" : "Hata oluştu";
}
}
}
}
header('location: ' . $_SERVER['HTTP_REFERER']);
?>
- index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Menü Örneği</title>
</head>
<body>
<!-- Sol Menü -->
<div id="solMenu">
<ul>
<li><a href="#" onclick="loadContent('sol_menu.html')">Kategori 1</a></li>
<li><a href="#" onclick="loadContent('sag_icerik.html')">Kategori 2</a></li>
<!-- Diğer kategorileri buraya ekleyebilirsiniz -->
</ul>
</div>
<!-- Sağ İçerik Alanı -->
<div id="sagIcerik">
<!-- İlk açılışta görüntülenecek içerik -->
<iframe src="sol_menu.html" width="100%" height="500px" frameborder="0"></iframe>
</div>
<script>
function loadContent(htmlDosya) {
// Sağ içerik alanına iframe üzerinden HTML dosyasını yükle
document.getElementById("sagIcerik").innerHTML = `<iframe src="${htmlDosya}" width="100%" height="500px" frameborder="0"></iframe>`;
}
</script>
</body>
</html>
Bu örnek, sol menüdeki her kategoriye tıklandığında loadContent
fonksiyonunu çağırarak sağ içerik alanındaki iframe'e ilgili HTML dosyasını yükler. Uygulamayı daha da genişletmek için kategori sayısını artırabilir ve dosya adlarını güncelleyebilirsiniz.
Bu tür bir sorunla karşılaştığınızda birkaç farklı nedene bakmanız gerekebilir. İşte sorununuzu çözmek için kontrol etmeniz gereken bazı olası nedenler:
CORS (Cross-Origin Resource Sharing) Ayarları:
- POST isteği yaparken tarayıcılar genellikle aynı kök etki alanına (origin) sahip olmalıdır. Farklı alt alanlara (subdomain) yapılan POST istekleri için CORS ayarlarını kontrol edin.
server.mydomain.com
'daki ExpressJS sunucusunda CORS başlıklarını düzenleyin. ExpressJS uygulamanızdacors
middleware kullanarak bu başlıkları ayarlayabilirsiniz.
Firewall veya Güvenlik Duvarı Ayarları:
- Sunucunuzdaki güvenlik duvarı, POST isteklerini engelliyor olabilir. Hosting sağlayıcınızın cPanel arayüzünden güvenlik duvarı ayarlarını kontrol edin.
Network Sorunları:
- Sunucunuzun network ayarlarını kontrol edin. Özellikle router ayarları ve DNS konfigürasyonlarını gözden geçirin.
HTTP ve HTTPS Sorunları:
- Farklı protokollerle (HTTP ve HTTPS) çalışan sunucular arasında da CORS sorunları yaşanabilir. İsteklerinizi aynı protokolle yapmaya çalışın. Örneğin, her iki sunucunuzu da HTTPS üzerinden çalıştırmayı deneyin.
Timeout Ayarları:
- İstek zaman aşımına (timeout) neden olabilecek sunucu veya istemci tarafındaki timeout ayarlarını kontrol edin.
Header Problemleri:
- POST isteği sırasında gönderilen başlıkları ve veriyi kontrol edin. Yanlış başlık ayarları veya eksik bilgiler, sunucunuzun isteği doğru bir şekilde işleyememesine neden olabilir.
Günlükleri Kontrol Etme:
- Sunucunuzdaki günlükleri (logları) kontrol ederek, isteğin neden zaman aşımına uğradığını veya başarısız olduğunu anlamaya çalışın.
Yukarıdaki kontrollerden sonra sorun hala çözülmezse, daha fazla bilgi edinmek ve sorunu daha iyi tanımlamak için günlükleri (logları) incelemek yararlı olabilir.
Tabii ki, işte CORS sorununu çözmek için ExpressJS uygulamanızda kullanabileceğiniz basit bir CORS yapılandırması:
- Önce, Express uygulamanızın başında
cors
middleware'ini kullanarak CORS ayarlarınızı yapılandırın.npm install cors
komutu ile önce cors middleware'ini yüklemeniz gerekebilir.
const express = require('express');
const cors = require('cors');
const app = express();
// CORS middleware'i ekleyerek tüm kaynaklara erişime izin ver
app.use(cors());
// Diğer middleware ve route tanımlamaları buraya gelecek
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
Yukarıdaki kod, tüm kaynaklardan gelen isteklere izin vererek en geniş CORS konfigürasyonunu sağlar. Daha fazla kontrol istiyorsanız, CORS middleware'inin seçeneklerini belirleyebilirsiniz.
- CORS middleware'inin özelleştirilmiş seçeneklerini kullanarak sadece belirli kaynaklardan gelen isteklere izin verme örneği:
const express = require('express');
const cors = require('cors');
const app = express();
// Sadece belirli kaynaklardan gelen isteklere izin ver
const corsOptions = {
origin: ['http://mydomain.com', 'https://mydomain.com'],
methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',
credentials: true,
optionsSuccessStatus: 204,
};
app.use(cors(corsOptions));
// Diğer middleware ve route tanımlamaları buraya gelecek
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
Bu örnekte, sadece belirli kökenlere (origin) izin veriliyor ve belirli HTTP metotları destekleniyor. credentials
seçeneği, isteğin kimlik doğrulama bilgilerini içerip içermediğini belirler.
Bu örneklerden birini ExpressJS uygulamanıza uyguladıktan sonra, CORS sorununun çözülüp çözülmediğini kontrol edebilirsiniz.