kullanıcı girişi etiketleri doğrulanırken

4 Cevap

Bu soru biraz sevimsiz gelebilir biliyorum ama bu benim proje sitelerden birine bir "etiketleme" özelliği uygularken am ilk kez ve ben her şeyi doğru yapmak emin olmak istiyorum.

(-) Kombine birden fazla kelime Sağ şimdi, ben SO .. uzay ayrılmış, çizgi olarak çok aynı etiketleme sistemi kullanıyorum. Ben bir kullanıcı girişi etiketi alan doğrulama olduğumda ben kontrol ediyorum

  1. Boş bir dize (boş olamaz)
  2. Dize belirli harfleri içermediğinden emin olun (önerileri burada welcommed edilir ..)
  3. En az bir kelime
  4. bir boşluk varsa (birden fazla kelime vardır) dize bölmek
  5. Her parçalı için, db takın

Ben burada bir şey eksik? veya bu kabaca ok?

4 Cevap

Ben bir etiketleme sistemini uygulamaya, ama ben üzerinde çalışıyorum bir proje için çok yakında yapmak için muhtemel hiç. Ben öncelikle bir veritabanı biriyim ve bunun bir çözünürlük tablosu aracılığıyla etiketi anahtar kelime ile etiketlenmiş varlıkları ilişkilendirmek iyi olabilir performans nedenlerle bana öyle oluşur. Yani, örneğin, örneğin, tablo ile örneğin,

TechQuestion
TechQuestionID (pk)
SubjectLine
QuestionBody

TechQuestionTag
TechQuestionID (pk)
TagID (pk)
Active (indexed)

Tag
TagID (pk)
TagText (indexed)

-Daha önce hiç kullanılan etiketler kullanılabilir zaman ... sadece yeni Tag tablosu girdilerini eklemek istiyorum. Yeniden ilişkilendirmek önceden TechQuestionTag tablo girişi üzerinden etiketleri temin ederim. Ve belirli bir etiketiyle ilgili TechQuestions çekmek için sorgu gibi görünecektir:

SELECT
q.TechQuestionID,
q.SubjectLine,
q.QuestionBody
FROM
Tag t INNER JOIN TechQuestionTag qt
ON t.TagID = qt.TagID AND qt.Active = 1
INNER JOIN TechQuestion q
ON qt.TechQuestionID = q.TechQuestionID
WHERE
t.TagText = @tagText

... Ya da ne var. Ben alternatif (gereksiz, endeksli, metin etiketi girişleri) olarak sorgulamak olmaz inanmıyorum çünkü ... Ben belki de bu zaten herkese açıktı, bilmiyorum, ama ben oraya koymak düşündüm verimli.

" ", onlar beklentilerinize uygun olduğundan emin olun, parçalar üzerinde yineleme de dize bölmek. Eğer öyleyse, DB içine koydu.

Örneğin, tek tek parçaları kontrol etmek için bu regex kullanabilirsiniz:

^[-\w]{2,25}$

Bu 2 ("\w" gibi "-" bunun için istedi çünkü parçası olan, ve "_") alphanumerics ardışık dizeleri izin girişini sınırlamak istiyorum .. 25 karakter uzunluğunda. Bu aslında size dönük olabilecek kod enjeksiyon tehdit kaldırır.

EDIT: "\w" yerine, herhangi daha yakından tanımlanmış range of characters, sadece basitlik için seçti almak için ücretsizdir.

Algoritmanızın hiçbir sorun ile lider / sondaki / ekstra boşluk işleyebilir emin olun =)

Ayrıca değer düşünme hakkında uygunsuz etiketleri (örneğin, küfür) için bir etiket kara liste olabilir.

Ben enjeksiyon saldırılarına karşı olağan koruma yapıyoruz umut - belki # 2 altında yer oluyor.

PHP, addslashes ve htmlentities bu konuda size yardımcı olabilir gibi işlevleri - En azından, sen alıntı karakterler kaçış ve gömülü HTML zararsız hale istediğiniz gidiyoruz. Bir etiketleme sistemi için olduğu göz önüne alındığında, benim tahminim sadece alfanümerik karakterler izin isteyeceksiniz olduğunu. Bunu başarmak için en iyi yolu belki de düzenli ifadeler kullanarak, ne olduğundan emin değilim.