• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
تایید اطلاعات در صفحه فرم
#1
سلام من مبتدی هستم هم تو پی اچ پی و هم فروم. چند تا سوال دارم.
وقتی که توی یه فرم ساخته شده با html اطلاعات وارد میشه و مثلا تو قسمت ایمیل. چطوری باید مطمئن شد که طرف حتما ایمیل رو درست وارد کرده. یعنی حتما توش از علامت @ استفاده کرده؟؟ و یا اگر درست ایمیل رو وارد نکرده پیام هشدار براش ظاهر بشه. ایا از تابع استفاده میشه ؟

و سوال بعد اینکه print با echo چه فرقی داره ؟
  پاسخ
تشکر شده توسط :
#2
یه مثال ساده اعتبارسنجی به وسیله جاوا اسکریپت
کد:
<script type="text/javascript">

function validate(id)
{
return document.getElementById(id);
}

function testfill()
{

var name= document.getElementById("name").value;
    if(name== ""){
    alert("لطفا نام و نام خانوادگی را وارد کنید");
     document.getElementById("name").focus();
    return false;
    }

   var email = document.getElementById("email").value;
    if(email == ""){
    alert("لطفا ایمیل را وارد کنید");
     document.getElementById("email").focus();
    return false;
    }

var atpos=email.indexOf("@");
var dotpos=email.lastIndexOf(".");
if (atpos<1 || dotpos<atpos+2 || dotpos+2>=email.length)
  {
  alert("ایمیل وارد شده معتبر نیست");
  return false;
  }
}
</script>

کافیه توی تگ فرم هم این عبارت رو اضافه کنی:
کد:
onSubmit="return testfill()"
print و echo هم به نظر من فرق خاصی ندارن....البته به صورت تخصصی اگه فرقی دارن دوستان شاید بهتر بتونن راهنمایی کنن...
بنده طعم ايمان را نمي چشد، تا اينكه دريابد آنچه اتفاق نيفتاده است نمي شد كه اتفاق بيفتد؛و آنچه شده و اتفاق افتاده است,نمي شد كه نشود و اتفاق نيفتد....حضرت علي(ع)
  پاسخ
تشکر شده توسط : takphp esak
#3
اون جوری که من خوندم....
print یک مقدار بازگشتی هم داره که echo نداره.
و می گن سرعت echo بیشتر از print.
من که خودم با echo کار می کنم .Tongue
  پاسخ
تشکر شده توسط : hamid_80386
#4
این اعتبار سنجی با تابع preg_match خود php هست و برای اعتبار سنجی ایمیل هایی که انگلیسی هست آدرسشون بکار میره، اگه درست باشه true رو برمیگردونه، اگه نه که false رو
کد پی‌اچ‌پی:
<?php 
function email_valid($temp_email) { 
######## Three functions to HELP ######## 
        
function valid_dot_pos($email) { 
            
$str_len strlen($email); 
            for(
$i=0$i<$str_len$i++) { 
                
$current_element $email[$i]; 
                if(
$current_element == "." && ($email[$i+1] == ".")) { 
                    return 
false
                    break; 
                } 
                else { 

                } 
            } 
            return 
true
        } 
        function 
valid_local_part($local_part) { 
            if(
preg_match("/[^[email protected]!#$%&'*\/+=?^`{\|}~]/"$local_part)) { 
                return 
false
            } 
            else { 
                return 
true
            } 
        } 
        function 
valid_domain_part($domain_part) { 
            if(
preg_match("/[^[email protected]#\[\].]/"$domain_part)) { 
                return 
false
            } 
            elseif(
preg_match("/[@]/"$domain_part) && preg_match("/[#]/"$domain_part)) { 
                return 
false
            } 
            elseif(
preg_match("/[\[]/"$domain_part) || preg_match("/[\]]/"$domain_part)) { 
                
$dot_pos strrpos($domain_part"."); 
                if((
$dot_pos strrpos($domain_part"]")) || (strrpos($domain_part"]") < strrpos($domain_part"["))) { 
                    return 
true
                } 
                elseif(
preg_match("/[^0-9.]/"$domain_part)) { 
                    return 
false
                } 
                else { 
                    return 
false
                } 
            } 
            else { 
                return 
true
            } 
        } 
        
// trim() the entered E-Mail 
        
$str_trimmed trim($temp_email); 
        
// find the @ position 
        
$at_pos strrpos($str_trimmed"@"); 
        
// find the . position 
        
$dot_pos strrpos($str_trimmed"."); 
        
// this will cut the local part and return it in $local_part 
        
$local_part substr($str_trimmed0$at_pos); 
        
// this will cut the domain part and return it in $domain_part 
        
$domain_part substr($str_trimmed$at_pos); 
        if(!isset(
$str_trimmed) || is_null($str_trimmed) || empty($str_trimmed) || $str_trimmed == "") { 
            
$this->email_status "You must insert something"
            return 
false
        } 
        elseif(!
valid_local_part($local_part)) { 
            
$this->email_status "Invalid E-Mail Address"
            return 
false
        } 
        elseif(!
valid_domain_part($domain_part)) { 
            
$this->email_status "Invalid E-Mail Address"
            return 
false
        } 
        elseif(
$at_pos $dot_pos) { 
            
$this->email_status "Invalid E-Mail Address"
            return 
false
        } 
        elseif(!
valid_local_part($local_part)) { 
            
$this->email_status "Invalid E-Mail Address"
            return 
false
        } 
        elseif((
$str_trimmed[$at_pos 1]) == ".") { 
            
$this->email_status "Invalid E-Mail Address"
            return 
false
        } 
        elseif(!
preg_match("/[(@)]/"$str_trimmed) || !preg_match("/[(.)]/"$str_trimmed)) { 
            
$this->email_status "Invalid E-Mail Address"
            return 
false
        } 
        else { 
            
$this->email_status ""
            return 
true
        } 

?>
هر که با مرغ هوا دوست شود - خوابش آرامترین خواب جهان خواهد بود.
  پاسخ
تشکر شده توسط : esak
#5
شباهتها
هر دو تابع نیستن Smile جزئی از ساختار زبانی هستن. یعنی میشه بدون پرانتز فراخوانیشون کرد ولی استفاده از توابعی مثل call_user_func و call_user_func_array براشون جواب نمیده (البته به صورت مستقیم، وگرنه اگه تو یه تابع باشن و اون یه تابع فراخوانی بشه بصورت غیر مستقیم میشه.).
پس :
کد پی‌اچ‌پی:
//Call them like functions:
print ("This is a test<br />");
echo (
"This is a test<br />");
 
// No parenthesis:
print "This is a test<br />";
echo 
"This is a test<br />"

هر دو درستن. بدون پرانتز و با پرانتز.
تفاوتها

تابع print بازگشتی داره و همیشه هم بازگشتیش یکه.اما echo بازگشتی نداره!!خوب این یعنی چی؟ مثلا :

کد پی‌اچ‌پی:
($x)? print "True" : print "False"

کاملا درسته، ولی
کد پی‌اچ‌پی:
($x)? echo "True" : echo "False"

کاملا غلط و اجرا نمیشه.
اپراتور @ روی echo کار نمیکنه. یعنی در:

کد پی‌اچ‌پی:
@print 10/

اپراتور درست عمل میکنه، خطای پیش آمده (که تقسیم بر صفر باشه) رو خفه میکنه. منتها :

کد پی‌اچ‌پی:
@echo 10/

اصلا اجرا نمیشه. تا به حال دو بر هیچ به نفع print !!
خوب تفاوت بعدی به نفع echo هستش.
print فقط و فقط یه آرگومان میگیره، ولی echo هر چند آرگومان رو میتونه قبول کنه :

کد پی‌اچ‌پی:
echo '$x = '$x ,'$y=',$y

البته این یه جورایی خیلی کنده Smile همین خروجی با print تولید نمیشه مگه با کمک اپراتور نقطه (که با echo هم میشه ) :

کد پی‌اچ‌پی:
print '$x = '$x .'$y='.$y

تو PHP میشه از رشته که با ” نوشته شده استفاده کرد و متغیر رو داخلش نوشت، ولی کندتره، به عبارتی معادل این دو تا خط بالا میشه نوشت :
کد پی‌اچ‌پی:
echo "\$x = $x \$y=$y"

منظور نوع رشته هست، با print و echo هیچ فرقی نداره.
در کل میگن که echo سریعتره. من از یه چیزی مشابه این کد استفاده کردم و فهمیدم که راست میگن، منتها تفاوت خیلی نیست. همیشه، متوسط حالتی که از echo استفاده کردم از حالتی که به جاش print گذاشتم کمتر بود :

کد پی‌اچ‌پی:
    $mtime microtime();
   
$mtime explode(" ",$mtime);
   
$mtime $mtime[1] + $mtime[0];
   
$starttime $mtime;
 
    for (
$i=0;$i<1000000;$i++)
        print 
$i;
 
   
$mtime microtime();
   
$mtime explode(" ",$mtime);
   
$mtime $mtime[1] + $mtime[0];
   
$endtime $mtime;
   
$totaltime = ($endtime $starttime);
   echo 
"This page was created in ".$totaltime." seconds"

برای این تست از cli استفاده شده نه وب، عددای بزرگ خیلی طول میکشن و علت هم حجم اطلاعات منتقل شدست، ربطی به تابع نداره. (من این تست پایینی رو انجام دادم در حقیقت، نه بالایی رو، این تو ویندوز جواب نمیده مگه اینکه تو msys یا یه چیزی مشابهش انجام بشه، بالایی میشه تو یه فایل نوشتش و انجامش داد ) :

کد پی‌اچ‌پی:
php -d implicit_flush=off -'$s=microtime(true); for($i=0;$i<1000000;$i++) echo "this is a test\n"; echo microtime(true)-$s,"\n";' tail -n 1 

و برای print :

کد پی‌اچ‌پی:
php -d implicit_flush=off -'$s=microtime(true); for($i=0;$i<1000000;$i++) print 

منبع: بیت نیمسوز
بنده طعم ايمان را نمي چشد، تا اينكه دريابد آنچه اتفاق نيفتاده است نمي شد كه اتفاق بيفتد؛و آنچه شده و اتفاق افتاده است,نمي شد كه نشود و اتفاق نيفتد....حضرت علي(ع)
  پاسخ
تشکر شده توسط : hamid_80386 Reza esak
#6
کد پی‌اچ‌پی:
<?php
$email_a 
'[email protected]';
$email_b 'bogus';

if (
filter_var($email_aFILTER_VALIDATE_EMAIL)) {
    echo 
"This (email_a) email address is considered valid.";
}
if (
filter_var($email_bFILTER_VALIDATE_EMAIL)) {
    echo 
"This (email_b) email address is considered valid.";
}
?>
  پاسخ
تشکر شده توسط : hamid_80386


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان