Bir url zaten php veritabanında teslim olup olmadığını kontrol etme

4 Cevap php

I url zaten php kullanarak veritabanında ibraz edildiği takdirde denetliyor yapılması gerekenler.

I have a database table where i store URLS submitted by users. But i want to check if the urls are already submitted or not in the database before inserting it to the database. For example, URLS like http://www.example.com, http://www.example.com/, http://example.com and http://example.com/ should return false if any one of them is already inserted in database as they all are same urls. I think we can get this done by using regular expression.But i am a little weak in regex so need your help. thank you

Edited

Merhaba, adresler sadece net yapmak için dizi değil veritabanında ise en varsayalım. Ben veritabanından sonucu ile benzersiz anahtarı ve eşleştirme url biliyorum. Ama burada i var

farklı bir soru Eğer dikkatlice bakarsanız.

$ Urls = array ('http://www.example.com/newpage.html', 'http://www.example.com/newpage.html');

case A user submits a url. suppose http://example.com/newpage.html

Şimdi bir url olarak bu yüzden kontrol ve yanlış dönmek için bir işlev gerekir http://www.example.com/newpage.html $ adresler dizide mevcuttur ve http://www.example.com/newpage.html ve http://example.com/newpage.html(userinput www olmadan) aynı sayfadır url dizide varsa. Ben şimdi kendime açıklık umuyoruz.

Yani url alan için ben bugüne kadar düşündüğünüz bir alan kontrol veya mysql tabloda benzersiz bir anahtar yapmıyor. Ben bunun için Regexp kullanmanız gerekir düşünüyorum. Herhangi bir yardım?

4 Cevap

Net değil söz ne URL'ler tüm hakkında. URL'ler kaynaklardır. Eğer bir veritabanına kaydedilir bir GET metodu ile gönderilen HTTP değişkenleri göndererek demek ise, veritabanında arama için bir birincil anahtar olarak bu değişkenlerin birinin değerini kullanabilirsiniz.

Veritabanı uygulaması farklı bir tabakadır. Eğer resultset üzerinde Regex kullanabilmek için ilk veritabanı içinde ne olduğunu kontrol etmek gerekir, çünkü Regex, burada yardımcı olmayacaktır.

Ancak, sadece URL'leri UNIQUE depolamak sütun yapabilir ve kullanımı INSERT IGNORE.

MySql manuel

Eğer IGNORE anahtar kelime kullanırsanız, INSERT deyimi yürütülürken oluşan hatalar yerine uyarı olarak kabul edilir. GÖRMEZDEN olmadan Örneğin, tabloda varolan bir benzersiz dizin veya birincil anahtar değerini çoğaltan bir satır bir yinelenen anahtar hata neden olur ve deyim iptal edilir. IGNORE ile, satır hala takılı değil, ama hiçbir hata verilir.

Bu hala example.com takın ve www.example.com gerçekten farklı dizeleri gibi olsa. Olur Sen yerleştirmeden önce onları kontrol etmek ve hazırlamak için parse_url kullanabilirsiniz.

İlgili:

Belki alan "eşsiz" bu şekilde mysql değerini kontrol yardımcı olacaktır yapıyor. Eğer 1062 bir dönüş kodu alırsanız o zaman anlarsınız onun zaten veritabanında.

Hesaplar ve çok sayıda varsa tabii ki iyi bir fikir olmayabilir. Ve sen hep aynı şekilde onları eklemek php ile URL'yi kontrol etmelisiniz. ('Http://' veya www ekleme veya kaldırma gibi)

Ben diyor James gibi, www.example.com ve example.com aynı değildir. Ayrıca URL sizin anlamı biraz muğlak.

Ama example.com zaten var olmadığını kontrol etmek istiyorsanız. Sadece gibi seçeneği ile veritabanı üzerinde bir sayım yapın:

select count(*) from table where url like '%.example.com%'

Example.com tam url çıkarılır nerede. Sayısı> 0 ise, etki alanı veritabanında zaten. Bu çözüm finetune zorunda kalacak, ama ben böyle bir şey kullanmak gerekir.