Nasıl benim kullanıcının veri PHP ve MySQL geçerli emin olabilirim?

5 Cevap php

Ben bir kullanıcıdan 2 dize değerleri ve 2 tamsayı değerleri alır ve bir veritabanında saklar bir web formu var.

Nasıl Bobby Tables Bana bir ziyarette ödeme kalmaması ints aslında ints ve sanitze girdi olduğundan emin olabilirim?

İşte benim formları kodu:

if(isset($_POST['submit']))
{
    $formTitle = $_POST['title'];
    $formAuthor = $_POST['author'];
    $formPagecount = $_POST["pagecount"];
    $formCurrentpage = $_POST["currentpage"];	
}

<form method="post" action="index.php">
	Title: <input type="text" size="25" maxlength="250" name="title" />
	<br/>
	Author: <input type="text" size="25" maxlength="250" name="author" />
	<br/>
	Page Count: <input type="text" size="25" maxlength="25" name="pagecount" />
	<br/>
	Current Page: <input type="text" size="25" maxlength="25" name="currentpage" />
	<br />
	<input type="submit" value="Add new book" name="submit" />
</form>

5 Cevap

Veritabanına girişleri sterilize prepared statements ile yapılabilir

Eğer çeşitli type checking functions kullanarak php veri türlerini kontrol edebilirsiniz

Eğer / yok kontrol etmek isteyebilirsiniz birkaç şey vardır:

There are frameworks that can help you with all that.
For instance :

(The more you re-use existing great code, the better for your application, I'd say : less risk to introduce bugs with your new, un-tested, code ;-) )


Once you made sure your data is OK, you can insert it into the database.
Which means you must escape it properly.
Depending on the functions / classes you're using, you'll take a look at


Finally, if the data was not successfully validated, you may want to re-echo the form, with the fields already containing what the user typed in the first time.

Orada, XSS önlemek için, HTML formatında veri kaçmak gerekir. htmlspecialchars bir göz atın

Aynı şey, btw, başka bir yerde uygulamanızda başka ekranda bu verileri görüntülemek isterseniz ...

Kullanıcı girişi verileri sadece rakamlardan oluşuyorsa kontrol etmek için tek güvenli yolu (1) düzenli ifadeler kullanmak ya da (2) ctype-extension (tercih) kullanımı vardır.

if (ctype_digit($_POST['pagecount'])) {
    // ...
}

Eğer veritabanına tamsayı değerleri eklerseniz bunları kaçmak ama onlar gerçekten (onları cast) tamsayılar emin olmak zorunda değilsiniz; dizeleri için kullanmanız gerekir mysql_real_escape_string fakat hazırlanmış ifadeler kullanmak (genellikle daha iyi ama) yanlış değildir.

By the way: Bu formu göndermek için tıklandığında ise IE <= 6 yalnızca onu gönderir, çünkü teslim butonu kontrol etmek için güvenli değil (Form enter tuşu aracılığıyla gönderilirse değilse).

Onlar ilk başta daha karmaşık bakmak bile PDO ve hazırlanan tablolar, baş ağrısı kurtaracak. Tamsayılar için sen ($ girdi) intval kullanabilirsiniz, ancak PHP aklınızda tutun - onun sonsuz bilgelik - sayısal olmayan girişini 0'a dönüşür.