"Hayalet"

3 Cevap php

Ben PHP kullanarak bir bölümü 3 kayıt formu var:

page 1 : collects info - has client & server side validation (for blank and invalid fields)
page 2 : collect more info - has server side validation (for blank and invalid fields)
page 3 : saves (db) and sends (email) the registration information

Daha fazla bilgi:

page 1 : saves all form information into session[registration] before going to page 2
page 2 : redirects to page 1 if session[registration][email] is blank
page 3 : redirects to page 1 if session[registration][email] is blank; destroys session after registration is successful

25 civarında e-postalar her biri için birkaç saniye arayla, bana gönderilen bu düne kadar son aylarda için çalışma para cezası olmuştur. Ben de veritabanını kontrol ve bu kayıtları kaydedildi. Ve kayıt bilgileri (DATE_ADDED gibi auto oluşturulan alanlar hariç) tüm BOŞ vardır

E-posta gönderme ve db tasarrufu nedeniyle yeniden yönlendirme çalışması gerekiyordu çünkü ben şaşkın değilim.

Sadece ne gibi bir fikrin var mı?

Teşekkürler

3 Cevap

Sorun, sayfa 3 kesinlikle. Eğitimli bir tahmin olarak ben kusurlu eğer "boş" kontrol olduğunu söyleyebilirim.

Sen yani kullanmalısınız. E-posta geçerli olup olmadığını test etmek ve alanların uzunluğunu kontrol etmeden önce boşluk kaldırmak için emin olmak için iyi bir sıradanifade (yani - bir boşluk boş / boş alan olarak aynı değildir)

Nasıl veri alanları db içine koymadan önce boş olmadığını kontrol ediyoruz. Alanının boş olduğunu kontrol etmek için boş () kullandığınızdan emin olun. $ Str değeri, vb sahte boş, 0 ise (($ str! = "") If yani), beklenmedik sonuçlara neden olabilir Eğer dizge karşılaştırma operatörünü kullanarak ediyorsanız ..

Edit: empty() description from manual: http://us.php.net/manual/en/function.empty.php Return Values

Var olmayan bir boş ve sıfır değeri varsa YANLIŞ döndürür.

Aşağıdakiler boş olarak kabul edilir:

* "" (an empty string)
* 0 (0 as an integer)
* "0" (0 as a string)
* NULL
* FALSE
* array() (an empty array)
* var $var; (a variable declared, but without a value in a class)

edit2:

isset () Yalnızca çek bir değişken bir değer atandı eğer. Değişkeni boş bir dize içeriyorsa bile boş bir dize ('\ 0' php bir dize sonunu) bir değeri vardır çünkü, isset (), true dönecektir.

isset() description from manual : http://us3.php.net/manual/en/function.isset.php

NULL için ayarlanmış olan bir değişken test varsa isset () FALSE döndürür. Ayrıca, bir NULL byte ("\ 0") PHP NULL sabiti eşdeğer olmadığını unutmayın.

comment from manual :

isset doesn't reliably evaluate variables with blank strings (not necessarily NULL). i.e. $blankvar = ""; // isset will return true on this.

Script boş metin alanlarını dönmek HTML formları işlerken Bu çok yaygın bir tuzak olduğunu. Bunu yapmanın daha iyisin:

if ($var != "") return true; else return false;

Bir programlama uygulama ziyade işlevin eksiklikleri bu daha. Eğer (isset sorun haline çalıştırmak olasıdır başlatılıyor değişkenlerin) bir alışkanlığı var ise kodunuzu veya php proje çok büyük hale gelirse.

Tüm bu e-postaları sitenizi tararken bir bot tarafından oluşturmak olduğunu mümkün mü?

Eğer herhangi bir sayfadaki kıvrılmasını arayarak sorunu yeniden miyim?

Herhangi bir eylem, bir POST gerektirir, yoksa bir GET ile harekete alıyor?