Merhaba,
"Misdirected Request" hatası, web sunucusunun isteğinizi yanlış bir yere yönlendirdiğini belirten bir hatadır. Bu genellikle SSL (Güvenli Yuva Katmanı) sertifikasıyla ilgilidir. SSL sertifikası, web sitenizin güvenliğini sağlamak için kullanılır ve özellikle mobil cihazlar gibi çeşitli cihazlardan gelen istekleri doğru şekilde yönlendirmek için gereklidir.
Siz de belirttiğiniz gibi, ana web siteniz ve kullanıcı paneliniz farklı alan adlarında bulunuyor ve SSL sertifikaları farklı olabilir. Bu durumda, mobil cihazlarınızda bir sorun olabilir ve istekler doğru şekilde yönlendirilemeyebilir.
Bu hatayı çözmek için aşağıdaki adımları deneyebilirsiniz:
* SSL sertifikalarınızı kontrol edin ve doğru şekilde yapılandırıldığından emin olun. SSL sertifikaları doğru yapılandırılmadığında, istekler doğru şekilde yönlendirilemeyebilir.
* Yönlendirme kodunuzu ve ana web sitenizdeki bağlantıları kontrol edin. Yönlendirme kodunuzda bir hata olabilir veya ana web sitenizdeki bağlantılar yanlış olabilir.
* Mobil cihazlarınızda tarayıcı önbelleğini temizleyin ve yeniden başlatın. Bazı durumlarda, tarayıcı önbelleğindeki geçersiz veriler istekleri yanlış yönlendirebilir.
* Mobil cihazınızda farklı bir tarayıcı kullanarak deneyin. Belki de sorun yalnızca belirli bir tarayıcıda ortaya çıkıyordur.
Umarım bu adımlar sorunu çözmenize yardımcı olur. Ancak sorun devam ederse, web sitenizde bir uzmanla çalışmanızı öneririm.
Hatanın sebebi, InstallationInstructions
modelinin Customs
modeli ile iki kez ilişkilendirilmesi ve her ilişkilendirme için aynı isimlendirme alias'ı CustomsExitUpAd
kullanılmasıdır. Bu durum, iki kez ilişkilendirilen modellerin ayırt edilmesini zorlaştırdığı için Sequelize tarafından hata olarak algılanmaktadır.
Bu hatayı düzeltmek için, her ilişkilendirme için farklı bir alias ismi kullanmanız gerekiyor. Örneğin:
InstallationInstructions.belongsTo(Customs, {as: "CustomsExitUpAd", foreignKey: 'customs_of_exit_id'});
InstallationInstructions.belongsTo(Customs, {as:"CustomsGateUpAd", foreignKey: 'exit_customs_gate_id'});
yerine
InstallationInstructions.belongsTo(Customs, {as: "CustomsExitUpAd", foreignKey: 'customs_of_exit_id'});
InstallationInstructions.belongsTo(Customs, {as:"CustomsGateUpAd2", foreignKey: 'exit_customs_gate_id'});
gibi farklı bir alias kullanarak aynı modeli iki kez ilişkilendirebilirsiniz.
Daha fazla bilgi için Sequelize belgelerindeki (https://sequelize.org/docs/v6/core-concepts/assocs/#aliases) Associations - Aliases bölümüne bakabilirsiniz.
Anladığım kadarıyla, istediğiniz sonuç her özellik başlığı için, o özellik başlığına sahip olan kaç tane aktif ürün olduğunu gösteren bir liste. Bunu elde etmek için şöyle bir sorgu yazabilirsiniz:
SELECT p1.ozellik_baslik, COUNT(DISTINCT u.id) as urun_sayisi
FROM urun_ozellik p1
INNER JOIN urun_ozellik p2 ON p1.id = p2.altID
INNER JOIN urun u ON u.ozellikID = p2.id
WHERE p1.altID = 0 AND p2.durum = 1
GROUP BY p1.ozellik_baslik
Bu sorgu, önce urun_ozellik tablosunu iki kere JOIN ederek, her bir özellik başlığına sahip olan ürünleri listeleyecek. `p1.altID = 0
koşulu, sadece özellik başlıklarını seçmenizi sağlar (yani altID'si 0 olan özellikleri). p2.durum = 1
koşulu, sadece aktif özellikleri seçmenizi sağlar. Son olarak, GROUP BY
ifadesi, her bir özellik başlığı için ayrı ayrı sonuçlar elde etmenizi sağlar.
Bu sorguyu çalıştırdıktan sonra, her özellik başlığı için, o özellik başlığına sahip olan kaç tane aktif ürün olduğunu gösteren bir liste alabilirsiniz.
contextMenuHandler fonksiyonunda event.preventDefault() çağrısının yapılması, contextmenu eventinin varsayılan davranışını engelleyecektir. Bu nedenle, pageX ve pageY değerleri doğru bir şekilde ayarlanamayacaktır. Bu davranışın özellikle mobil cihazlar için farklı olabileceğini unutmayın.
Bu sorunu çözmek için, contextMenuHandler fonksiyonunda event.preventDefault() çağrısını kaldırabilirsiniz. Ancak bu durumda, varsayılan davranış (yani sağ tık menüsü) gerçekleşecektir. Eğer bu davranışı engellemek istiyorsanız, event.stopPropagation() çağrısını kullanabilirsiniz. Bu yöntem, event'in hedefe (target) ulaşmasını engelleyecek ve varsayılan davranışı engelleyecektir.
Ayrıca, useState hook'unda x ve y değerlerinin String tipinde tanımlanması da bir soruna neden olabilir. Bunun yerine, number tipinde tanımlayabilirsiniz. Örneğin:
const [x, setX] = useState<number>(0);
const [y, setY] = useState<number>(0);
Merhaba,
Kodunuzda öncelikle $categories
değişkeninde tüm kategorileri alıyorsunuz. Daha sonra ise `$id
değişkeniyle belirtilen bir kategorinin adını ve o kategoriye ait verileri çekiyorsunuz.
İstenilen sonucu elde etmek için ise öncelikle tüm kategorilerin ID'lerini tek bir değişkende toplamanız gerekiyor. Bu işlemi $category_ids
adında bir dizi oluşturarak yapabilirsiniz:
$category_ids = array_column($categories, 'id');
Daha sonra, bu ID'leri içeren 5 farklı kategoriye ait verileri çekebilirsiniz. Bunun için, `$category_ids
dizisinden her seferinde bir ID seçerek o kategoriye ait verileri çekebilirsiniz. Bu işlemi foreach döngüsü kullanarak yapabilirsiniz:
$limit = 5;
$result = [];
foreach (array_slice($category_ids, 0, $limit) as $id) {
$sorgu = $db->prepare('SELECT * FROM categories WHERE id = ?');
$sorgu->execute([$id]);
$category = $sorgu->fetch(PDO::FETCH_ASSOC);
if ($category) {
$sorgu = $db->prepare('SELECT * FROM posts WHERE FIND_IN_SET(?, category_id) ORDER BY id DESC');
$sorgu->execute([$category['id']]);
$dersler = $sorgu->fetchAll(PDO::FETCH_ASSOC);
$result[] = [
'category_name' => $category['name'],
'dersler' => $dersler
];
}
}
Bu kod bloğu, `$result
değişkenine 5 farklı kategoriye ait verileri ekleyecektir. Sonuç olarak, `$result
değişkeninde istenilen formatta bir dizi veri olacaktır.
Bu diziyi ekranda göstermek için, örneğin aşağıdaki kodu kullanabilirsiniz:
foreach ($result as $item) {
echo '<h3>' . $item['category_name'] . '</h3>';
echo '<ul>';
foreach ($item['dersler'] as $ders) {
echo '<li>' . $ders['title'] . '</li>';
}
echo '</ul>';
}
Bu kod, öncelikle her kategori için bir başlık (<h3>
) oluşturacak ve o kategoriye ait dersleri liste (<ul>
) halinde ekrana yazdıracaktır.
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.