Şu vea PHP bir bina topluluk web sitesi üzerinde çalışıyorum. Bu kullanıcının diğer işlevsellik sürü kayıt sağ doldurabilirsiniz formlarını içerir. Ben bir nesne yönelimli bir adam değilim, bu yüzden çoğu zaman benim uygulama işlemek için işlevleri kullanıyorum. Ben OOPS öğrenmek zorunda biliyorum, ama şu vea bu web sitesi geliştirmek ve yakında çalışan almak gerekiyor.
Anyway, here's a sample of what I let my app. do: Consider a page (register.php) that has a form where a user has 3 fields to fill up, say: First Name, Last Name ve Email. Upon submission of this form, I want to validate the form ve show the corresponding errors to the users:
<form id="form1" name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<label for="name">Name:</label>
<input type="text" name="name" id="name" /><br />
<label for="lname">Last Name:</label>
<input type="text" name="lname" id="lname" /><br />
<label for="email">Email:</label>
<input type="text" name="email" id="email" /><br />
<input type="submit" name="submit" id="submit" value="Submit" />
</form>
Bu form aynı sayfaya bilgi yayınlayacağız. Yani burada POST'ed bilgi işleyecek kod:
<?php
require("functions.php");
if( isset($_POST['submit']) )
{
$errors = fn_register();
if( count($errors) )
{
//Show error messages
}
else
{
//Send welcome mail to the user or do database stuff...
}
}
?>
<?php
//functions.php page:
function sql_quote( $value )
{
if( get_magic_quotes_gpc() )
{
$value = stripslashes( $value );
}
else
{
$value = addslashes( $value );
}
if( function_exists( "mysql_real_escape_string" ) )
{
$value = mysql_real_escape_string( $value );
}
return $value;
}
function clean($str) {
$str = strip_tags($str, '<br>,<br />');
$str = trim($str);
$str = sql_quote($str);
return $str;
}
foreach ($_POST as &$value)
{
if (!is_array($value))
{
$value = clean($value);
}
else
{
clean($value);
}
}
foreach ($_GET as &$value)
{
if (!is_array($value))
{
$value = clean($value);
}
else
{
clean($value);
}
}
function validate_name( $fld, $min, $max, $rule, $label ) {
if( $rule == 'required' )
{
if ( trim($fld) == '' )
{
$str = "$label: Cannot be left blank.";
return $str;
}
}
if ( isset($fld) && trim($fld) != '' )
{
if ( isset($fld) && $fld != '' && !preg_match("/^[a-zA-Z\ ]+$/", $fld))
{
$str = "$label: Invalid characters used! Only Lowercase, Uppercase alphabets ve Spaces vardır allowed";
}
else if ( strlen($fld) < $min or strlen($fld) > $max )
{
$curr_char = strlen($fld);
$str = "$label: Must be atleast $min character & less than $max char. Entered characters: $curr_char";
}
else
{
$str = 0;
}
}
else
{
$str = 0;
}
return $str;
}
function validate_email( $fld, $min, $max, $rule, $label ) {
if( $rule == 'required' )
{
if ( trim($fld) == '' )
{
$str = "$label: Cannot be left blank.";
return $str;
}
}
if ( isset($fld) && trim($fld) != '' )
{
if ( !eregi('^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.([a-zA-Z]{2,4})$', $fld) )
{
$str = "$label: Invalid format. Please check.";
}
else if ( strlen($fld) < $min or strlen($fld) > $max )
{
$curr_char = strlen($fld);
$str = "$label: Must be atleast $min character & less than $max char. Entered characters: $curr_char";
}
else
{
$str = 0;
}
}
else
{
$str = 0;
}
return $str;
}
function val_rules( $str, $val_type, $rule='required' ){
switch ($val_type)
{
case 'name':
$val = validate_name( $str, 3, 20, $rule, 'First Name');
break;
case 'lname':
$val = validate_name( $str, 10, 20, $rule, 'Last Name');
break;
case 'email':
$val = validate_email( $str, 10, 60, $rule, 'Email');
break;
}
return $val;
}
function fn_register() {
$errors = array();
$val_name = val_rules( $_POST['name'], 'name' );
$val_lname = val_rules( $_POST['lname'], 'lname', 'optional' );
$val_email = val_rules( $_POST['email'], 'email' );
if ( $val_name != '0' ) { $errors['name'] = $val_name; }
if ( $val_lname != '0' ) { $errors['lname'] = $val_lname; }
if ( $val_email != '0' ) { $errors['email'] = $val_email; }
return $errors;
}
//END of functions.php page
?>
OK, now it might look like there's a lot, but lemme break it down target wise: 1. I wanted the foreach ($_POST as &$value) ve foreach ($_GET as &$value) loops to loop through the received info from the user submission ve strip/remove all malicious input.
Yukarıda belirtildiği gibi hedefe ulaşmak için ilk girişi temiz adında bir işlevi arıyorum. Bu fonksiyon Ayrı alan değerlerinin hatta diziler ve sadece
etiketleri izin ve her şeyi kaldırmak olsun, girişin her işleyecek. Bunun dinlenme açıktır.Bu olunca, yeni / temizlenmiş değerleri fn_register () fonksiyonu tarafından işlenir ve doğrulama sonra geri değerlere dayalı olacaktır, biz (geçerliyse) ilgili hataları veya null değerleri olsun.
So here's my questions: 1. This pretty much makes me feel secure as I am forcing the user to correct malicious data ve won't process the final data unless the errors vardır corrected. Am I correct?
- (Ben fonksiyonları çok ve bunlara karşılık gelen çağrıları kullanıyorum gibi) takip yöntemi hızını garanti mi? Hala ediliyor form alanları farklıdır ve ben herhangi bir şekilde zaman herhangi bir noktada olabilir alanların asgari sayısı 3 olabilir ve 100 (veya daha fazla, ben web sitesi olarak emin değilim gibi yüksek kadar gidebilir ) geliştirdi. Yukarıdaki şekilde 100 alanları bulunuyor ve doğrulama sahip, uygulama hızını azaltacaktır (yarım milyon kadar, kullanıcıların aynı vea web sitesine erişim söylüyorlar?). Ne ben (eğer mümkünse) hızını artırmak ve işlev çağrıları azaltmak için ne yapabilirim?
3, ben doğrulama geçerli yollarını iyileştirmek için bir şey yapabilir miyim?
Ben nesne yönelimli yaklaşımı kapalı tutarak ve sonrası için PHP FİLTRELERİNİN kullanıyorum. Yani, hepiniz bana / geliştirmek akım yollarını çimdik ve komut savunmasız veya Canlı üretim ortamında kullanılabilecek kadar güvenli olup olmadığını bana önermek yol önermek isteyiniz. Eğer değilse, ne canlı kullanmak mümkün için ne yapabilirim?
Şimdiden teşekkür ederim.