PDA

View Full Version : سوال: اشکالات کد برنامه من در کجاست ؟



kavoshgar63
یک شنبه 11 اسفند 1387, 00:32 صبح
سلام
من تازه php کار شدم و این اولین پروژه منه.
این کد برنامه منه که یه سری اشکالات توش هست می خوام با کمک شما دوستان برطرف بشه.
یک سری اشکالاتش رو من فهمیدم و یک سری هم هست که نکات فنی هست و شما عزیزان باید گوشزد کنین.
اولین اشکالش وقتی داده ها ذخیره میشن توی دیتا بیس کراکتر های فارسی به هم میریزه و یک رسی کد نامفهوم توی بانک ذحیره میشه.
دومین اشکال ارسال پارامترهای خطا به برنامه است وقتی که برنامه من پارامتر خطا رو به صفحه قبل برمی گردونه آدرس بار من این طوری میشه .

http://127.0.0.1/temp/register.php?errshsh=errshsh%3Derrshsh&errni=errni %3Derrni&errtel=&errmobile=&errcitycode=&errpc=&er rfill=errfill%3Derrfill&errpass=errpass
من با چه کدی میتونم خطاها رو نمایش بدم ؟
این هم کد برنامه من امیدوارم که دوستانی باشند که مشکلات من رو توی برنامه نویسی بهم گوشزد کنند.

<?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','$b irthday','$nationalid',
'$gender','$religion','$degree','$soldier','$mtava llod','$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


?>

Yousha
یک شنبه 11 اسفند 1387, 10:03 صبح
یا حضرت گزنفر...

میـلاد
یک شنبه 11 اسفند 1387, 10:07 صبح
برای مشکل اول باید کاراکتر ست کانکشن خودتون را به UTF-8 تغییر بدید، برای مشکل دوم هم این کد را تست کنید، البته کدفعلی برای من بدون مشکل اجرا میشه.

http_build_query($params,'','&')


test.php?errshsh=errshsh&errni=errni&errtel=errtel&errmobile+=errmobile+&errcitycode=errcitycode&errpc=errpc&errfill=errfill&errpass=errpass

kavoshgar63
یک شنبه 11 اسفند 1387, 11:00 صبح
ما ز یاران چشم یاری داشتیم
خود غلط بود آن چه ما پنداشتیم
اول تشکر ویژه از میلاد عزیز و بعد یک گله کوچولو از برخی دوستان یا حضرت گزنفر به نظر شما جواب سئوال منه؟
من ابتدای سئوال هم خدمت دوستان عرض کردم تازه کارم.
عوض توسل به حضرت گزنفر دوستان راه حلی جلوی پای ما بزارن.
باز هم تشکر می کنم از همه دوستان مخصوصا آقا میلاد عزیز و yousha

Yousha
یک شنبه 11 اسفند 1387, 12:18 عصر
شوخی کردم عزیز :چشمک:...
اگر به همین شکل کدنویسی کنید خیلی خوبه(از همه لحاظ):


<?php
#require('./db_config_inc.php');
##################################################
$db_host= '127.0.0.1';
$db_name= 'pooyasharif';
$db_username= 'root';
$db_pass= '';
$db= mysql_connect($db_host, $db_username, $db_pass) or @exit(mysql_error());
$link= mysql_select_db($db_name) or @exit(mysql_error());
##################################################
function _Clean_SQL($Str_Input)
{
settype($Str_Input, 'string');

if(get_magic_quotes_gpc()): function_exists('mysql_real_escape_string') ? stripslashes(mysql_real_escape_string($Str_Input)) : stripslashes(mysql_escape_string($Str_Input));
else: function_exists('mysql_real_escape_string') ? addslashes(mysql_real_escape_string($Str_Input)) : addslashes(mysql_escape_string($Str_Input));
endif;

return($Str_Input);
}

function _Is_Blank($Str_Input)
{
return(trim($Str_Input) == '' || is_null($Str_Input) || strlen((string)$Str_Input) <= 0) ? (bool)true : (bool)false;
}

function _Get_IP()
{
$Str_IP= isset($_SERVER['HTTP_CLIENT_IP']) ? $_SERVER['HTTP_CLIENT_IP'] : isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? getenv($_SERVER['HTTP_X_FORWARDED_FOR']) : isset($_SERVER['HTTP_X_FORWARDED']) ? getenv($_SERVER['HTTP_X_FORWARDED']) : isset($_SERVER['HTTP_FORWARDED']) ? $_SERVER['HTTP_FORWARDED'] : isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : 'Unknown';
return((string)$Str_IP);
}
##################################################
$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= (string)$_POST[un];//user name
$pass= (string)$_POST[pass];
$pass1= (string)$_POST[pass1];
$name= (string)$_POST[name];
$family= (string)$_POST[family];
$father= (string)$_POST[father];
$shsh= (string)$_POST[shsh];//shomare shenasname
$sodoor= (string)$_POST[sodoor];//mahal sodoor
$mtavallod= (string)$_POST[mtavallod];
$day= (string)$_POST[day];
$month= (string)$_POST[month];
$year= (string)$_POST[year];
$nationalid= (string)$_POST[nationalid];
$gender= (string)$_POST[gender];
$religion= (string)$_POST[religion];
$degree= (string)$_POST[degree];
$soldier= (string)$_POST[soldier];//vaziat sarbazi
$citycode= (string)$_POST[citycode];
$province= (string)$_POST[province];
$bigcity= (string)$_POST[bigcity];
$city= (string)$_POST[city];
$area= (string)$_POST[area];
$address= (string)$_POST[address];
$postalcode= (string)$_POST[postalcode];
$tel= (string)$_POST[tel];
$mobile= (string)$_POST[mobile];
$email= (string)$_POST[email];
#$_IP= (string)$_POST[IP];
##################################################
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";
};
##################################################
if($pass != $pass1)
{
$errpass= errpass;
$totalerror+= 1;
};
##################################################
if(_Is_Blank($un) || _Is_Blank($pass) || _Is_Blank($pass1) || _Is_Blank($name) || _Is_Blank($family) || _Is_Blank($father) || _Is_Blank($shsh) || _Is_Blank($sodoor) || _Is_Blank($mtavallod) || _Is_Blank($day) || _Is_Blank($month) || _Is_Blank($year) || _Is_Blank($nationalid) || _Is_Blank($gender) || _Is_Blank($religion) || _Is_Blank($degree) || _Is_Blank($soldier) || _Is_Blank($province) || _Is_Blank($bigcity) || _Is_Blank($address) || _Is_Blank($postalcode) || _Is_Blank($tel) || _Is_Blank($citycode) || _Is_Blank($mobile))
{
$errfill= "errfill=errfill";
$totalerror+= 1;
};
##################################################
if((int)$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('<meta http-equiv="refresh" content="0;url=' . $url . '">');
@header("location: $url");
@exit('');
}
else
{
$birthday= $year . '/' . $month . '/' . $day;
$q= strip_tags("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(_Clean_SQL($q), $db) or @exit(mysql_error());
if(mysql_affected_rows() > 0): echo("عملیات با موفقیت انجام شد");
else: echo("عملیات ناقص انجام شد");
endif;
};
##################################################
?>

مقدار userid رو در Query خالی '' گذاشتید!
.................................................. ......
!= 0 اشتباه هستش. هم 1- قابل قبوله هم 1! باید بزارید: > 0 یا < 0
.................................................. .....
یک Field هم با نام IP درست کنید و IP اعضا رو درونش ثبت کنید(احتیاج میشه).
یک فایل با نام functions.php درست کنید و توابع رو درونش قرار بدید.
بهتره نام جدول Register رو به Members تغییر بدید.
دوست داشتید فرم(HTML) همین صفحه رو هم بزارید تا اشکال زدایی/بهینه سازی کنیم.
حتماً ازLink های پایین امضام استفاده کنید.
موفق باشید.

kavoshgar63
یک شنبه 11 اسفند 1387, 20:36 عصر
مقدار userid چون فیلد کلیدی هست auto_increment گذاشتم .

kavoshgar63
یک شنبه 11 اسفند 1387, 23:07 عصر
با تشکر از یوشا و میلاد عزیز که بذل محبت کردن و با اینکه کد طولانی بود دونه به دونه خط ها رو خوندن و این قدر کامل توضیح دادن فقط من نتونستم بفهمم که کار این توابع چیه؟
1-
get_magic_quotes_gpc()
2-

mysql_real_escape_string($Str_Input)
3-

addslashes(mysql_escape_string($Str_Input));

tanha2007
یک شنبه 11 اسفند 1387, 23:29 عصر
سلام.
هر سه توابع مذکور جهت بالا بردن امنیت داده ها و جلو گیری از حملات بالای داده ها است ...

kavoshgar63
دوشنبه 12 اسفند 1387, 00:58 صبح
جواب خیلی خلاصه بود لطفا کمی شفاف تر توضیح بدین.