Hatanın nedeni, hedef klasörünüzün doğru adlandırılmamış olması. Kodunuzda hedef klasörünüzü "upload" olarak adlandırmışsınız ancak hatanın gösterdiği klasör adı "public/uploads" şeklindedir.
Aşağıdaki kod, "public/uploads" klasöründe her bir görüntü dosyası için ayrı bir klasör oluşturur ve görüntü dosyalarını bu klasörlere kaydeder. Dosyaların kaydedilme yeri ve adlandırılması hakkında daha fazla kontrol sağlar.
$web = 'https://www.beykon.com/urunler';
$html = file_get_contents($web);
preg_match_all('/<img[^>]+src=["\']([^"\']+)["\']/i', $html, $img);
$image_urls = $img[1];
foreach($image_urls as $image_url) {
$image_data = file_get_contents($image_url);
$file_name = basename($image_url);
$folder_name = 'public/uploads/' . uniqid() . '/';
mkdir($folder_name);
$file_path = $folder_name . $file_name;
file_put_contents($file_path, $image_data);
}
Bu kodda, uniqid()
fonksiyonu her seferinde benzersiz bir klasör adı oluşturur. $folder_name
değişkeni, bu benzersiz klasör adı ile birlikte hedef klasörün tam yolu olarak tanımlanır. Sonra, mkdir()
fonksiyonu, bu klasörü oluşturur. Dosya adı ve yolu, `$file_path
değişkeninde tanımlanır ve file_put_contents()
fonksiyonu kullanılarak görüntü dosyası kaydedilir.
Metunica API'leri hakkında bir bilgim yok ancak PHP için domain kaydı API'leri mevcuttur. Örneğin, Namecheap, Godaddy, Enom ve Nominet gibi birçok popüler domain kaydı sağlayıcısı, PHP desteği olan API'ler sunmaktadır.
Namecheap API'leri hakkında daha fazla bilgi için https://www.namecheap.com/support/api/ adresini ziyaret edebilirsiniz.
Godaddy API'leri hakkında daha fazla bilgi için https://developer.godaddy.com/docs/api/overview adresini ziyaret edebilirsiniz.
Enom API'leri hakkında daha fazla bilgi için https://www.enom.com/api/docs/index.htm adresini ziyaret edebilirsiniz.
Nominet API'leri hakkında daha fazla bilgi için https://registrars.nominet.uk/namespace/register/technical-details/ adresini ziyaret edebilirsiniz.
Ayrıca, Postman veya Insomnia gibi bir REST API test aracı kullanarak bu API'leri test edebilirsiniz. Bu araçlar, birçok API'yi desteklemektedir ve HTTP isteklerini kolayca göndermenize ve yanıtları gözlemlemenize olanak tanır.
C# .NET ile masaüstü uygulamalarında oturum kontrolü, web uygulamalarında olduğu gibi bazı temel kavramları içerir. Genellikle, bir kullanıcının kimlik doğrulaması yapılır ve daha sonra kullanıcının etkinliği için bir oturum açılır. Kullanıcının işlem yapabilmesi için, uygulamanın her sayfasında veya formunda bu oturum bilgileri kontrol edilir.
Öncelikle, kullanıcının kimlik bilgilerinin doğrulanması gerekiyor. Bu, kullanıcının adı ve soyadının veritabanında doğrulanmasıyla başlayabilir. Veritabanındaki doğrulama işlemi tamamlandıktan sonra, kullanıcının kimliği ile ilişkili bir oturum açılabilir. Bu oturum, kullanıcının kimliğini ve bazı ek bilgileri içerebilir (örneğin, kullanıcının yetkileri).
Bir oturum açıldıktan sonra, uygulama kullanıcının etkinliğini kontrol edebilir. Örneğin, her bir form veya sayfa yüklendiğinde, kullanıcının oturum bilgileri kontrol edilebilir. Eğer oturum bilgileri geçerliyse, kullanıcının sayfaya veya forma erişimi sağlanabilir.
Masaüstü uygulamalarında oturum kontrolü için ASP.NET gibi hazır bir çözüm yoktur. Bunun yerine, .NET Framework'ün System.Security.Principal ve System.Threading.Thread sınıfları gibi bazı temel sınıflarını kullanabilirsiniz. Bu sınıflar, kullanıcının kimliğini doğrulamak ve oturum açmak için kullanılabilir. Ayrıca, bazı .NET kütüphaneleri (örneğin, Microsoft.IdentityModel.Clients.ActiveDirectory) kullanıcının kimliğini doğrulamak ve oturum açmak için daha yüksek düzeyde bir çözüm sunabilir.
Özetle, C# .NET ile masaüstü uygulamalarında oturum kontrolü, kullanıcının kimliğinin doğrulanması ve bir oturum açılması ile başlar. Daha sonra, uygulamanın her sayfasında veya formunda bu oturum bilgileri kontrol edilir. .NET Framework'ün bazı temel sınıfları kullanılarak bu işlem gerçekleştirilebilir.
react-qr-reader
: QR kodlarını okumak için bir kütüphane.
react-barcode-reader
: barkodları okumak için bir kütüphane.
react-native-camera
: barkod ve QR kodlarını okumak için bir kütüphane. Bu kütüphane, React Native ile yazılmış mobil uygulamalarda kullanılmak üzere tasarlanmıştır.
zxing-js/library
: barkod ve QR kodları için bir JavaScript kütüphanesi. Bu kütüphane, React uygulamalarında kullanılabilir ve Quagga ve Dynamosoft gibi kütüphanelere alternatif olarak düşünülebilir.
React ve Redux kullanarak bir select boxtan aldığınız değere göre, Redux store'da bulunan API linkini güncellemek için şu adımları takip edebilirsiniz:
Öncelikle, select boxtan değer seçildiğinde tetiklenecek bir Redux action oluşturmanız gerekiyor. Bu action, seçilen değeri ve yeni API linkini Redux store'a gönderecektir.
export const updateApiLink = (selectedValue) => ({
type: 'UPDATE_API_LINK',
payload: selectedValue,
});
Daha sonra, Redux reducer'ınızda yeni bir case belirleyerek bu action'a yanıt verebilirsiniz. Bu case, Redux store'da bulunan API linkini güncelleyecektir.
const initialState = {
apiLink: 'https://example.com/api/v1/',
};
const reducer = (state = initialState, action) => {
switch (action.type) {
case 'UPDATE_API_LINK':
return {
...state,
apiLink: `https://example.com/api/v1/${action.payload}/`,
};
default:
return state;
}
};
Güncellenmiş Redux store'ınızı kullanarak, API isteklerinizi yürütmek için yeni bir fonksiyon oluşturabilirsiniz. Bu fonksiyon, Redux store'dan API linkini alacak ve güncellenmiş linki kullanarak API isteğinde bulunacaktır.
import { useSelector } from 'react-redux';
const MyComponent = () => {
const apiLink = useSelector((state) => state.apiLink);
const fetchData = async () => {
const response = await fetch(apiLink);
const data = await response.json();
// ...
};
// ...
};
Bu adımları takip ederek, select box'tan aldığınız değere göre, Redux store'da bulunan API linkini güncelleyebilirsiniz. Bu sayede, farklı değerlere göre farklı API linkleri kullanarak dinamik bir şekilde verilerinizi alabilirsiniz.
Kolonların yerlerinin nasıl değiştirileceğine dair örnek bir kod parçası aşağıdadır:
ALTER TABLE table_name MODIFY COLUMN column_name column_definition AFTER column_to_move_after;
Merhaba,
Sliderı özelleştirmek için şu adımları takip edebilirsiniz:
HTML kodunuzda bir div etiketi oluşturun ve bunu sliderın yerleştirileceği alan olarak belirleyin.
Bu div etiketine bir background-image özelliği atayarak, yumuşak kenarlı bir yuvarlak veya oval slider arka planı oluşturabilirsiniz.
Sliderınızın içerik alanı için bir başka div etiketi oluşturun ve bu div etiketine gerekli stil özelliklerini (genişlik, yükseklik, position, z-index vs.) atayarak içeriği bu divin içine yerleştirin.
Slider, dönüş animasyonunu CSS anahtar çerçeveleri (keyframes) kullanarak yapabilirsiniz. İlk adımda, slider için bir keyframe adı oluşturun (örneğin “sliding”) ve başlangıç konumunu belirleyin. Ardından, ilerleme süresi boyunca slider’ı döndürmek için bir başka keyframe (örneğin “sliding-end”) tanımlayın ve son konumu belirleyin. Daha sonra, bu keyframe’leri animation özelliği ile birlikte slidera atayabilirsiniz.
Coffee bean’lerini PNG olarak slider etrafına yerleştirebilirsiniz. Ancak, içerik alanının üzerinde slider yerleştirildiğinde, Coffee bean’lerini içerik alanının içinde yerleştirmeniz gerekir. Bunu sağlamak için, Coffee bean’leri içerik alanının altındaki bir başka div etiketine yerleştirebilirsiniz. Bu div etiketi için, position, z-index ve diğer stil özelliklerini doğru bir şekilde ayarlamayı unutmayın.
Örnek bir HTML ve CSS kod yapısı:
<div class="slider-container">
<div class="slider"></div>
<div class="content">
<h1>Bu alana ilgili içerik girilecek</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
</div>
</div>
.slider-container {
position: relative;
display: flex;
justify-content: center;
margin-top: 50px;
}
.slider {
width: 400px;
height: 400px;
background-image: url(slider-bg.png);
background-repeat: no-repeat;
background-size: contain;
animation: sliding 5s infinite;
position: absolute;
z-index: 1;
}
@keyframes sliding {
from {transform: rotate(0deg);}
to {transform: rotate(360deg);}
}
.content {
width: 300px;
height: 300px;
background-color: gray;
position: relative;
z-index: 2;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
border-radius: 50%;
}
Bu kodları kullanarak slider’ınızı özelleştirebilirsiniz. Umarım yardımcı olmuşumdur.
Anladığım kadarıyla, anlaşmalı şekilde sisteme giriş yaparak başka kişilerin kaydını oluşturmalarını engellemek istiyorsunuz. Bu durumu engellemek için aşağıdaki önlemler alınabilir:
- Kullanıcılara yalnızca kendi telefon numarası ve şifreleriyle giriş yapmaları gerektiği hatırlatılmalıdır. Bu hatırlatma, kayıt olduğu sırada ve giriş yaptıklarında ekrana çıkacak şekilde tasarlanabilir.
- Kullanıcılara yalnızca kendi telefonlarından QR kodu okutmaları gerektiği belirtilmelidir. Bu, kullanıcılara sisteme kayıt olurken sağlanacak bir numaralandırma sistemi ile gerçekleştirilebilir. Her kullanıcı için sisteme özgün bir numara verilir ve bu numara, kaydını yapan kullanıcının telefonu için geçerlidir. Başka birinin telefonundan girilen numaralar sistem tarafından tanınmaz ve hata mesajı verilir.
- Kullanıcılar QR kodu okutma işlemi sırasında fotoğraf çekmenin engellenmesi gerekiyor. Bu önlem, QR kodu tarayıcısı uygulaması tarafından sağlanabilir.
- Sisteminizde kullanılan veri tabanı, her kayıt işlemi için tarih ve saat bilgisi içerebilmelidir. Bu sayede, bir kullanıcının aynı anda birden fazla kayıt işlemi yapması halinde, kaydedilen tarih/saat bilgileri incelenerek doğru kayda hangi kullanıcının eriştiği tespit edilebilir.
Yukarıdaki önlemler, kullanıcıları güvenli bir şekilde sisteminize kaydettikten sonra, yanlış kullanımlara ve kötü niyetli davranışlara karşı korumanıza yardımcı olabilir.
Anladım. Sayfa yenilendiğinde modal kapanacağı için sayfa yenilenmeden sadece tablo içeriğini yenilemek istiyorsun. Bu durumda, modal gösterildiğinde jQuery $.ajax yöntemini kullanarak tablo verilerini alabilir ve ardından modal içindeki tabloyu güncelleyebilirsiniz.
Örnek olarak aşağıdaki kod yapısını kullanabilirsiniz:
<!-- Modal açma butonu -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal">
Modal Aç
</button>
<!-- Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Tablo İçeriği</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body" id="table-content">
<!-- Tablo içeriği bu kısımda olacak -->
</div>
</div>
</div>
</div>
$(function() {
$("#exampleModal").on("show.bs.modal", function() {
// Tablo içeriği modal gösterilmeden önce yeniden yüklenir
$.ajax({
type: "POST",
url: "yenitablo.php", // yenitablo.php dosyası içinde tablo verileri oluşturulabilir
success: function(response) {
$("#table-content").html(response); // Gelen veriler modal içindeki tabloya eklenir
}
});
});
$("#table-refresh").click(function() {
// Tablo yenile butonuna tıklandığında modal içeriği yeniden yüklenir
$.ajax({
type: "POST",
url: "yenitablo.php", // yenitablo.php dosyası içinde tablo verileri oluşturulabilir
success: function(response) {
$("#table-content").html(response); // Gelen veriler modal içindeki tabloya eklenir
}
});
});
});
Yukarıdaki örnek kodda, $("#exampleModal").on("show.bs.modal", function() {...}); kod bloğu, modal gösterilmeden önce çalıştırılacak kodları içerir. Burada $.ajax yöntemi kullanarak yenitablo.php dosyasından tablo verileri alınır ve modal içindeki tablo güncellenir.
Daha sonra, $("#table-refresh").click(function() {...}); kod bloğu, tablo yenile butonuna tıklandığında çalışacak kodları içerir. Bu kod bloğunda da $.ajax yöntemi kullanarak yenitablo.php dosyasından tablo verileri alınır ve modal içindeki tablo güncellenir.
Tablo yenileme butonunu HTML koduna ayrıca eklemeniz gerekecektir. Örneğin, yukarıdaki örnekte butonun açıklaması “Tabloyu Yenile” olarak düzenlenmiş ve id="table-refresh" özelliği eklenmiştir.
Bu sayede, modal açıkken tablo yenileme butonuna tıkladığınızda sadece tablo içeriği yenilenir ve modal kapanmaz. @resat
Kısaca, normal sayfaların oturum verilerini kaydetmek için ayrı bir klasör oluşturmanız gerekiyor. Öncelikle normal sayfaların oturum dosyalarını saklamak için ayrı bir klasör oluşturmanız, bu klasörün adı normalpage-sessions olabilir. Bu klasör oluşturulduğunda, PHP oturum kaydı işlevini kullanarak oturum verilerinin yeni klasöre kaydedilmesini sağlayın.
Örnek kod şöyle yazılabilir:
// Normal sayfalara özel bir klasör oluşturarak, oturum dosyalarının bu klasör içinde tutulmasını sağlayın
$normalPageSessionPath = $_SERVER['DOCUMENT_ROOT'] . '/normalpage-sessions';
if(!file_exists($normalPageSessionPath)) {
mkdir($normalPageSessionPath);
}
session_save_path($normalPageSessionPath);
// CMS için oturum verileri ayrı bir klasöre kaydedilmiş, bu saklanacak
session_name('cms_session');
session_save_path($_SERVER['DOCUMENT_ROOT'].'/cms/sessions');
session_start();
Yukarıdaki kodda, session_save_path işlevi kullanılarak normal sayfaların oturum verileri normalpage-sessions klasörüne kaydedilirken, CMS için ayrı bir klasör (cms/sessions) kullanılır. Böylece, normal sayfalarda açılan oturumlar CMS tarafından açılan oturumlarla karışmaz ve sorun çözülür.