• 2 رای - 3.5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
اشکالات کد برنامه من در کجاست
#1
این کل کد برنامه منه البته توی صفحه ثبت نام.
که شاید یه جنبه آموزشی هم برای مبتدی ها داشته باشه چون توش خیلی کدهای غیر بهینه کارکردم.
شما اساتید عزیز اشکالات من رو بهم گوش زد کنین تا هم به درد مبتدی ها بخوره و همچنین من از همین ابتدای کار متد برنامه نویسیم رو درست کنم.

کد پی‌اچ‌پی:
<?php 
//include("db_config_inc.php");  
//tarifat avalie data base;
//***********************************************************************************************
$db_host="localhost";
$db_name="pooyasharif";
$db_username="root";
$db_pass="";
$db=mysql_connect($db_host,$db_username,$db_pass) or die ( " Can not connect to data base " );
$link=mysql_select_db($db_name);
//start
//***********************************************************************************************
$totalerror=0;//jam error ha
$errshsh="";//err shomare shenasname
$errni="";//err code melli
$errpc="";//error postal code
$errtel=""//erroe telephone
$errmobile="";//err mobile
$errcitycode="";//err code shahr
$un=$_POST[un];//user name
$pass=$_POST[pass];
$pass1=$_POST[pass1];
$name=$_POST[name];
$family=$_POST[family];
$father=$_POST[father];
$shsh=$_POST[shsh];//shomare shenasname
$sodoor=$_POST[sodoor];//mahal sodoor
$mtavallod=$_POST[mtavallod];
$day=$_POST[day];
$month=$_POST[month];
$year=$_POST[year];
$nationalid=$_POST[nationalid];
$gender=$_POST[gender];
$religion=$_POST[religion];
$degree=$_POST[degree];
$soldier=$_POST[soldier];//vaziat sarbazi
$citycode=$_POST[citycode];
$province=$_POST[province];
$bigcity=$_POST[bigcity];
$city=$_POST[city];
$area=$_POST[area];
$address=$_POST[address];
$postalcode=$_POST[postalcode];
$tel=$_POST[tel];
$mobile=$_POST[mobile];
$email=$_POST[email];

// check kardan sehat dade haye voroodi

if (ereg ("([0-9]{1,11}$)"$shsh$regs)) {
    echo 
"$regs[1]"."<br>";
} else {
    
$errshsh="errshsh=errshsh";
    
$totalerror+=1
}


if (
ereg ("([0-9]{7,8}$)"$tel$regs)) {
    echo 
"$regs[1]";
} else {
    
$errtel="errtel=errtel";
    
$totalerror+=1;
}

if (
ereg ("([0-9]{4}$)"$citycode$regs)) {
    echo 
"$regs[1]";
} else {
    
$errcitycode="errcitycode=errcitycode";
    
$totalerror+=1;
}

if (
ereg ("([0-9]{10}$)"$postalcode$regs)) {
    echo 
"$regs[1]";
} else {
    
$errpc="errpc=errpc";
    
$totalerror+=1;
    }

if (
ereg ("([0-9]{10}$)"$nationalid$regs)) {
    echo 
"$regs[1]";
} else {
    
$errni="errni=errni";
    
$totalerror+=1;
    }

if (
ereg ("([0-9]{11}$)"$mobile$regs)) {
    echo 
"$regs[1]";
} else {
    
$totalerror+=1;
    
$errmoblie="errmobile=errmoblile";
}


//check kardan sehate ramz
if ($pass!=$pass1)
    {
       
$errpass=errpass;
        
$totalerror+=1;
    }
// check kardan khali nabaoodan field ha 
 
 
if ($un=="" || $pass=="" || $pass1=="" ||$name==""  ||$family==""
   
||$father==""  ||$shsh==""  ||$sodoor==""  ||$mtavallod==""  ||$day==""
   
||$month==""  ||$year==""  ||$nationalid==""  ||$gender==""  ||$religion=="" 
   
||$degree==""  ||$soldier==""   ||$province==""  ||$bigcity=="" ||$address==""
   
||$postalcode==""  ||$tel==""  ||$citycode==""  ||$mobile=="" )
   {
   
$errfill="errfill=errfill";
   
$totalerror+=1;
}
if(
$totalerror!=0)
    {
    
$params = array 
    ( 
        
errshsh=>$errshsh
        
errni => $errni,
        
errtel=>$errtel,
        
errmobile =>$errmobile,
        
errcitycode=>$errcitycode,
        
errpc=>$errpc,
        
errfill=>$errfill,
        
errpass=>$errpass
    
); 
$url '../register.php?'.http_build_query($params); 
echo 

    <script type='text/javascript'> 
    window.location='
{$url}';
    </script>
"
;
    }
    else
  {
    
        
$birthday=$year."/".$month."/".$day;//chasbandan tarikh tavalod
        // start of database operation
        
$q="INSERT INTO register ( name,
        family ,
        father ,
        shsh ,
        sodoor ,
        birthday ,
        nationalid ,
        gender ,
        religion ,
        degree ,
        soldier ,
        mtavallod ,
        province,
        city ,
        bigcity ,
        area ,
        address ,
        postalcode ,
        tel ,
        citycode ,
        mobile ,
        email ,
        userid ,
        userpass ,
        username
        )
        VALUES ('
$name','$family','$father','$shsh','$sodoor','$birthday','$nationalid',
        '
$gender','$religion','$degree','$soldier','$mtavallod','$province','$city','$bigcity',
        '
$area','$address','$postalcode','$tel','$citycode','$mobile','$email','','$pass','$un')";
        
$result=mysql_query($q,$db);
        if(
mysql_affected_rows()>0)
            {    
                echo 
"عملیات با موفقیت انجام شد";
            }
                 else
                   {    
                       echo 
"عملیات ناقص انجام شد";
                     }
          
  }
/// end of data base operation
    
   
?>
جالب این جاست با این که COLLATION بانک من UTF8- PERSIAN _CI هست ولی خیلی داده ها رو بد نشون میده .یعنی یک سری کراکترهای عجیب غریب .
اشکال از کجاست؟
جناب آقا میلاد عزیز بابت زحمات شما ممنونم ولی هر چه کردم کدی که شما دادین با اون مشخصات درست نشد اگر رو مثال بالا برام شرح بدین ممنون میشم.
بدان کوش تا زود دانا شوی
چو دانا شوی زود والا شوی

سایت شخصی
  پاسخ
تشکر شده توسط :
#2
کد پی‌اچ‌پی:
<?

// اطلاعات لازم برای اتصال به پایگاه داده
$dbhost  = "localhost";
$dbname  = "pooyasharif";
$dbuser  = "root";
$dbpass  = "";
$dblink  = mysql_connect($dbhost,$dbuser,$dbpass) or die ('Can not connect to data base');
$dbused  = mysql_select_db($dbname,$dblink) or die('Can\'t use '.$dbname);
// برای اینکه اطلاعات به صورت فارسی ذخیره بشه با کاراکتر ست را اینجا ست کنیم ( پی  اچ پی ۵٫۲ به بالا)
$charset = mysql_set_charset('UTF-8',$dblink);

// تبدیل مقادیر ارسال شده توسط پست به آرایه ای حاوی اطلاعات دریافتی و تبدیل کاراکتر های اجرایی اچ تی ام ال به متن بی اثر
foreach($_GET as $key => $val)
    eval('$data['.$key.']="'.htmlentities($val,ENT_QUOTES).'";');

// البته اینجا را هم میشه به صورت آرایه ست کرد و چک کرد که لازم نباشه یه کد چند با تکرار بشه.
!ereg('([0-9]{7,8}$)'  ,$data['tel'],$regs)         ?    $error['tel'] = true        : $data['tel'] = $regs['1'];
!ereg('([0-9]{1,11}$)' ,$data['shsh'],$regs)        ?    $error['shsh'] = true       : $data['shsh'] = $regs['1'];
!ereg('([0-9]{11}$)'   ,$data['mobile'],$regs)      ?     $error['mobile'] = true     : $data['mobile'] = $regs['1'];
!ereg('([0-9]{4}$)'    ,$data['citycode'],$regs)    ?     $error['citycode'] = true   : $data['citycode'] = $regs['1'];
!ereg('([0-9]{10}$)'   ,$data['postalcode'],$regs)  ?     $error['postalcode'] = true : $data['postalcode'] = $regs['1'];
!ereg('([0-9]{10}$)'   ,$data['nationalid'],$regs)  ?     $error['nationalid'] = true : $data['nationalid'] = $regs['1'];

// بررسی همسان بودن محتوای فیلد های پسورد
if($data['pass'] != $data['pass1']) $error['pass'] = 'pass';

// بررسی برای خالی نبودن مقادیر 
foreach($data as $key => $val)
    if(!isset($val) || empty($val)) $error['fill'] = true;

// بررسی آرایه حاوی خطاها. اگر صفر باشه یعنی خطایی رخ نداده و شرت هم اجرا میشه.
if(count($error)=0)
{
    $query  = "INSERT INTO `register` (
            `family`, `father`, `shsh`, `sodoor`, `birthday`, `nationalid`, `gender`, `religion`, `degree`,
            `soldier`, `mtavallod`,`province`, `city`, `bigcity`, `area`, `address`, `postalcode`, `tel`, 
            `citycode`, `mobile`, `email`, `userid`, `userpass`,‍‍`username`";
    $query .= ") VALUES (";
    $query .= "'%s', '%s', '%d', '%d', '%d', '%d', '%s', '%s', '%d', '%s'.... )"; // این قسمت را باید بر اساس محتوای مورد نظر ویرایش کنید...
    
    $query  = sprintf($query,$data['name'],$data['family'],$data['father'],$data['shsh'],$data['sodoor'],$data['birthday'],
    $data['nationalid'],$data['gender'],$data['religion'],$data['degree'],$data['soldier'],$data['mtavallod'],$data['province'],
    $data['city'],$data['bigcity'],$data['area'],$data['address'],$data['postalcode'],$data['tel'],$data['citycode'],$data['mobile'],
    $data['email'],'',$data['pass'],$data['$un']);
    
    $result=mysql_query($query,$dblink);

        echo mysql_affected_rows() ? "عملیات با موفقیت انجام شد" : "عملیات ناقص انجام شد";
}
else
{
    // اینم لیست خطا ها که میشه به فرمت دلخواه در آوردشون.
    var_dump($error);
}    

?>
Two hands working can do more than a thousand clasped in prayer
  پاسخ
تشکر شده توسط : kavoshgar63
#3
header خود html هم یادتون نره
  پاسخ
تشکر شده توسط :
#4
با تشکر از میلاد عزیز :
پاسخ ها کاملا واضح بودند ولی فک کنم باید در زمان insert هم یه تغییراتی اعمال بشه تا مشکل کراکترهای فارسی حل بشه .
من این خط رو اضافه کردم
کد پی‌اچ‌پی:
$charset mysql_set_charset('UTF-8',$dblink); 
ولی متاسفانه همون مشکل قبلی پدیدار شد.
کراکترهای عجیب و غریب ذخیره شده.
بدان کوش تا زود دانا شوی
چو دانا شوی زود والا شوی

سایت شخصی
  پاسخ
تشکر شده توسط :
#5
اینو را چک کن برای همه نسخه های پی اچ پی:
کد پی‌اچ‌پی:
mysql_query("SET CHARACTER SET utf8;");
mysql_query("SET NAMES utf8_persian_ci;"); 
اگر این همه جواب نداد مشکل از دیتا بیس شماست.
Two hands working can do more than a thousand clasped in prayer
  پاسخ
تشکر شده توسط :
#6
این یه صفحه مخفیه و بعد از درج اطلاعات به صفحه بعد میره و در صورت اشکال به صفحه قبل فک نکنم هدر لازم باشه .
یعنی برای صفحات مخفی هم هدر لازمه؟
این دو تکه کد رو کجا بنویسم؟
کد پی‌اچ‌پی:
mysql_query("SET CHARACTER SET utf8;");
mysql_query("SET NAMES utf8_persian_ci;"); 
بدان کوش تا زود دانا شوی
چو دانا شوی زود والا شوی

سایت شخصی
  پاسخ
تشکر شده توسط :
#7
(۱۳۸۷ اسفند ۱۱, ۰۱:۱۶ ب.ظ)kavoshgar63 نوشته: این یه صفحه مخفیه و بعد از درج اطلاعات به صفحه بعد میره و در صورت اشکال به صفحه قبل فک نکنم هدر لازم باشه .
یعنی برای صفحات مخفی هم هدر لازمه؟
این دو تکه کد رو کجا بنویسم؟
کد پی‌اچ‌پی:
mysql_query("SET CHARACTER SET utf8;");
mysql_query("SET NAMES utf8_persian_ci;"); 

توی کدوم قسمت اطلاعات درست نمایش داده نمیشه؟ توی register.php یا همین صفحه؟
شما توی این صفحه هم echo دارید بنابراین هدر لازمه
  پاسخ
تشکر شده توسط :
#8
فرمایش جناب سهرابلو کاملا صحیحه اما من این echo رو برای خودم نوشتم و در نسخه نهایی این پاک میشه و در صفحه دیگری این پیام به نمایش در میاد.
بازهم متشکرم.
آیا نکات دیگه ای هم هست که از قلم افتاده باشه؟
بدان کوش تا زود دانا شوی
چو دانا شوی زود والا شوی

سایت شخصی
  پاسخ
تشکر شده توسط :


پرش به انجمن:


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