Nasıl çift entrys mySQL önlemek mi?

6 Cevap php

Sitemde, ben kullanıcıların üye olmak için doldurmanız bir form var. Onlar gönderin tıklayın Sonra, veri mySQL içine alır vb adını, bday, e-posta, doldurun. Bir kullanıcı tıkladığında birçok kez göndermek veya sayfayı yeniler Ama bazen, veri birden fazla veritabanı için girilen alır. Bunu nasıl yanlışlıkla gönderilmesini engellemek mi? Ben sadece tek bir veri kümesi veritabanına izin için kullanabileceğiniz bir kod var mı?

Bu da benim yorum bölümünde bir sorundur. Ben kullanan insanların profilleri üzerine yorum koymak için izin. Onlar refresh düğmesine istismar veya Gönder düğmesini Ama, ben aynı yorumların 10 gibi olsun. Kullanıcıların yanlışlıkla iki kez bir yorum göndererek önlemeye çalışıyorum.

Teşekkürler.

6 Cevap

Birinci durumda muhtemelen sadece e-posta adresi benzersiz bir dizin eklemek ve bu kullanıcı için bir profil oluşturmak için kullanmak istiyorum.

İkinci durumda, anladığım kadarıyla, tamamen veri iki kez teslim önlemek için değil, yanlışlıkla iki kez veri göndererek kullanıcıların önlemek için çalışıyoruz. Muhtemelen aynı sayfada iki defa aynı yorum yazma engellemek istemiyorum. Birisi "Bugün dünkü gibi oldu!" Yazıyor ise, ertesi gün geri geliyor ve yazma engel istemiyoruz "dün gibiydi Bugün!" tekrar. Bu doğal olmayan olurdu ve çok veri indeksleme gerektirecek gibi onay pahalı olabilir. Ben ne olursa olsun veri aynı olup olmadığını iki kez, aynı form göndererek birini engellemek istiyorum düşünüyorum.

Yani ikinci bir örnek çözüm benzersiz olarak tanımlayan şeklinde bir gizli alan eklemektir. Bu formu gönderdiğinizde, kullanılan gizli bir alanda değerini işaretleyin. Birisi daha sonra gizli bir alanda aynı değere sahip bir form gönderdiğinde, bunu reddetmek.

Bir UNIQUE sınırlamasıyla oluşturun:

CREATE UNIQUE INDEX name_of_youw_index ON tablename(columnname);

Insert'ler şimdi çift verileri ile başarısız olur.

Sunucu tarafı: azaltma uygulamak. Sadece 1 Gönderme her 10 saniye kadar bekleyin.

Update: When you accept a form submission, record the timestamp you made the submission in $_SESSION. When you accept another (or rather, every) form submission, check if the value stored in $_SESSION is older than 10 seconds. If it is, continue. If it isn't, don't do any more work.

You could do it with just some database stuff to I guess, but $_SESSION is much simpler.

İstemci tarafı: form gönderildiğinde JavaScript ile Gönder düğmesini devre dışı bırakın.

Ona benzersiz bir dizin ekleyerek, sizin veritabanında "benzersiz" in e-mail alanını olun.

Veritabanı zaten kullanılmakta olan bir e-posta ile başka giriş alırsa o zaman MySQL bir hata atar - hata numarası 1062 olduğunu.

O zaman diğerlerinden farklı bu hatayı ele verebilir istedim.

mysql_errno ()

http://www.php.net/manual/en/function.mysql-errno.php

Veritabanı çiftleri durumunda, alanında benzersiz bir kısıtlama koydu.

Birden gönderimleri önlemek için basıldıktan sonra veritabanı çiftleri ve yinelenen yorumların her ikisi için 2-3 saniye için Gönder düğmesini devre dışı bırakın.

Kendi hesap oluşturma / doğrulama mekanizması inşa etmeyin. Bu daha önce 10000 kez yapılmıştır. Test edilmiş ve hatasız olan başka bir önceden var olan birini kullanın. Bunu yapmanın tek nedeni bir giriş sisteminin bir üretim uygulaması nasıl geliştiği deneyim / anlaşılması içindir. Ve gerçekten, size bir uzman olmak istiyorum ne olduğunu, ya da üzerinde çalıştığınız sorunun etki odaklanmak istersiniz?