parsgreen.com
article

آموزش ساخت فرم عضویت در سایت با php و mysql

mysql-php-user-sign-up

همان طور که می دانیم استفاده از php و mysql برای ایجاد صفحات و سایت های داینامیک به دلایل مختلف بیش از پیش رو به گسترش است، از طرفی بسیاری از افراد تمایل دارند برای سایت یا صفحه خود، فُرمی جهت ثبت نام کاربران داشته باشند، مثلا برای ارسال خبرنامه و اطلاع از به روز رسانی سایت یا فراتر از آن برای ایجاد یک محیط کاربری و ورود و خروج کاربران به پنل سایت و خیلی چیزهای دیگر؛ اما قبل از دست یافتن به این هدفها، نیاز به ایجاد یک فرم ثبت نام و عضویت کاربر است تا اطلاعات لازم جهت ورود و خروج ایمن را در پایگاه داده داشته باشیم؛ از این رو به جهت آشنایی شما، در این آموزش قصد داریم روش ساخت یک سیستم ساده و در عین حال کاربردیِ ثبت نام و عضویت را با php و mysql آموزش دهیم.

ایجاد جدول و ردیف با دستور CREATE


قبل از هر چیز باید جدولی در پایگاه داده خود با نامی دلخواه بسازیم و ردیف هایی را در آن برای نگهداری نام کاربری، کلمه عبور و سایر اطلاعات مورد نیاز ایجاد کنیم، بدین منظور از دستور CREATE TABLE در MySQL استفاده می کنیم؛ در کد زیر ما سه ردیف id، username و password در جدول فرضی register ساخته ایم.
<?php
//اطلاعات اتصال به پایگاه داده
$con = mysql_connect("localhost", "user", "pass")
or die(mysql_error());  
//نام دیتابیس
mysql_select_db("db", $con)
or die(mysql_error());
//ایجاد جدول و ردیف با دستور CREATE TABLE
mysql_query("CREATE TABLE register(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
username VARCHAR(255),
password VARCHAR(255)) ENGINE=MyISAM ")
or die(mysql_error());  
//پایان ارتباط با پایگاه داده 
mysql_close($con); 
?>
توضیح:
- ابتدا در قسمت mysql_connect باید اطلاعات لازم جهت اتصال به پایگاه داده را تعریف کنید (نام کاربری و کلمه عبور).
- در قسمت mysql_select_db دیتابیس مورد نظر را انتخاب کنید، این دیتابیس را باید قبلا ایجاد کرده باشید.
- دستور CREATE TABLE سه ردیف id با خاصیت افزایش خودکار (AUTO_INCREMENT)، ردیف username و password از نوع VARCHAR می سازد و در نهایت موتور پیش فرض ردیف ها را بر روی MyISAM تنظیم می کند.
- در نهایت هم اتصال با پایگاه داده با تابع mysql_close به پایان می رسد.

فرم html جهت عضویت و ثبت نام کاربر


پس از ساختن جداول و ردیف ها، اکنون نوبت به ساختن فرم html برای ارتباط با کاربر است، با طراحی یک صفحه به صورت html و قرار دادن چند فیلد در آن به فرض به عنوان نام کاربری و کلمه عبور، می توانیم اطلاعات کاربر را در جدول و در ردیف های تعیین شده ذخیره کرده و در واقع قابلیت عضویت در سایت را ایجاد کنیم، به همین جهت فرم زیر را جهت نمونه ساخته ایم.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>وبگو | صفحه ثبت نام کاربر</title>
<!-- http://webgoo.ir -->
<style type="text/css">
body{
    font-family:Tahoma, Geneva, sans-serif;
    direction:rtl;
    font-size:12px;
}
</style>
</head>
<body>
<form action="register.php" method="post">
<label for="user">نام کاربری:</label>
<input name="username" id="user" type="text" maxlength="255" />
<label for="pass">کلمه عبور:</label>
<input name="password" id="pass" type="password" maxlength="255" />
<input type="submit" value="عضویت" />
</form>
</body>
</html>
توضیح:
- این فرم html، دو فیلد جهت انتخاب نام کاربری و کلمه عبور ایجاد می کند.
- در قسمت action آدرس فایل register.php را قرار می دهیم (اطلاعات فرم به این فایل ارسال می شوند).
- برای ارسال اطلاعات از متُد post استفاده کرده ایم.
- آنچه به عنوان مقدار یا value به فایل register.php ارسال می شود با قسمت مربوط به name در تگ input قابل شناسایی و دریافت است (در ادامه خواهیم دید).
- با قرار دادن خاصیت maxlength حداکثر تعداد کاراکترهای مجاز را تعیین می کنیم.
- قسمت مربوط به label جهت تعریف برچسب های استاندارد برای تگ های فرم، استفاده می شود.
- سرانجام اطلاعات با یک دکمه submit به فایل register.php ارسال می شوند.

بررسی و ذخیره اطلاعات با فایل register.php


پس از اینکه کاربر اطلاعات خود را در فیلدهای موجود در فرم بالا وارد می کند، این اطلاعات با متد post به فایل register.php ارسال می شوند و پارامترها با استفاده از post_$ در دسترس هستند، به مثال زیر توجه کنید.
<?php
//دریافت و تعریف متغیر ها
$username = $_POST['username'];
$password = $_POST['password'];
?>
توضیح:
- با روش بالا، نام کاربری از فیلد username دریافت و در متغیر username ذخیره می شود، همچنین کلمه عبور از فیلد password دریافت و در متغیر password ذخیره می شود، با این کار اطلاعات کاربر در کد php قابل دسترس است و می توانیم پردازش های مورد نظر را روی آن اعمال کنیم.
- دقت کنید که معمولا آنچه برای php در کار با یک فرم html اهمیت دارد، متد استفاده شده (post یا get) و نام فیلدها است (نه آی دی آنها).

بررسی معتبر بودن اطلاعات


پس از اینکه اطلاعات فیلدها را در متغیر های قابل استفاده در php دریافت کردیم، باید معتبر بودن آنها را بررسی کنیم، پس کد زیر را در ادامه اضافه می کنیم.
<?php
//دریافت و تعریف متغیر ها
$username = $_POST['username'];
$password = $_POST['password'];
//پیش فرض
$check_error = 0;
//بررسی معتبر بودن اطلاعات ارسالی کاربر
//نام کاربری
if (!isset($username) || $username == ''){
    echo "فیلد نام کاربری نباید خالی باشد!";
    $check_error = 1;
}
//کلمه عبور
elseif (!isset($password) || $password == ''){
    echo "فیلد کلمه عبور نباید خالی باشد!";
    $check_error = 1;
}
//مجاز بودن انتخاب حروف انگلیسی به عنوان نام کاربری
elseif (preg_match('/^[a-zA-Z0-9 _-]+$/', $username) === 0){
    echo "نام کاربری دارای کاراکترهای غیر مجاز است!";
    $check_error = 1;
}
?>
توضیح:
- در دستور شرطی if، تنظیم شدن و خالی نبودن نام کاربری را با isset بررسی می کنیم، اگر نام کاربری خالی باشد، یک پیام به کاربر نشان داده می شود و متغیری به نام check_error (نامی دلخواه است) را برابر 1 قرار می دهیم (تا در ادامه وضعیت آن را چک کنیم).
- در دستور elseif اول، محاسبات بالا را بر روی کلمه عبور انجام می دهیم تا از خالی نبودن آن یا ارسال اشتباه فرم توسط کاربر اطمینان حاصل کنیم.
- در قسمت elseif آخر نیز با تابع preg_match بررسی می کنیم تا ببینیم آیا کارکترهای وارد شده توسط کاربر بین حروف و اعداد انگلیسی جای دارند یا خیر، همچنین دو علامت - و _ هم جزء کاراکترهای مجاز است، اگر کاراکتری خارج از این شرایط ارسال شود، بررسی preg_match نادرست یا false شده (وضعیت با عدد صفر برگردانده می شود) و پیام خطا به کاربر نشان داده خواهد شد.
بررسی اعتبار اطلاعات فرم، بسته به اینکه هدف و خواسته شما چه چیز باشد، متفاوت و سلیقه ای است، لذا مثال های عنوان شده صرفا جهت نمونه است و هیچ محدودیتی در این خصوص وجود ندارد.

حفظ امنیت اطلاعات و دیتابیس


اگر همه چیز درست باشد و کاربر فیلدها را به طور کامل و صحیح پر نماید، نوبت به ذخیره اطلاعات در دیتابیس است، اما قبل از اینکه به این کار بپردازیم، یک امر مهم را نباید فراموش کنیم، حفظ امنیت اطلاعات و پایگاه داده! توضیح اینکه رعایت برخی مسائل امنیتی در کار با پایگاه داده ضروری است، چرا که اگرچه بیشتر کاربران هیچ سوء نیتی ندارند، اما ممکن است هر از چندگاهی برخی پیدا شوند که به دنبال کوچکترین فرصتی برای نفوذ و آسیب زدن به سیستم شما باشند، از طرفی ذخیره اطلاعات و مخصوصا کلمه عبور کاربران، باید به صورت رمزی شده باشد تا امکان هر نوع سوء استفاده احتمالی را از بین ببرد و ضریب امنیت را افزایش دهد، بدین منظور ما از دو تابع mysql_real_escape_string و md5 در php استفاده می کنیم.
<?php
//اطلاعات اتصال به پایگاه داده
$con = mysql_connect("localhost", "user", "pass")
or die(mysql_error());  
//نام دیتابیس
mysql_select_db("db", $con)
or die(mysql_error());
//دریافت و تعریف متغیر ها
$username = $_POST['username'];
$password = $_POST['password'];
//پیش فرض
$check_error = 0;
//بررسی معتبر بودن اطلاعات ارسالی کاربر
//نام کاربری
if (!isset($username) || $username == ''){
    echo "فیلد نام کاربری نباید خالی باشد!";
    $check_error = 1;
}
//کلمه عبور
elseif (!isset($password) || $password == ''){
    echo "فیلد کلمه عبور نباید خالی باشد!";
    $check_error = 1;
}
//مجاز بودن انتخاب حروف انگلیسی به عنوان نام کاربری
elseif (preg_match('/^[a-zA-Z0-9 _-]+$/', $username) === 0){
    echo "نام کاربری دارای کاراکترهای غیر مجاز است!";
    $check_error = 1;
}
//جلوگیری از نفوذ به دیتابیس
$username = mysql_real_escape_string($username);
$password = md5($password);
if ($check_error != 1){
//در این مرحله اطلاعات را در دیتابیس ذخیره خواهیم کرد
##########PHP MySQL INSERT INTO db##########
}
//پایان ارتباط با پایگاه داده 
mysql_close($con);
?>
توضیح:
- همانطور که می بینید، در اینجا اطلاعات اتصال به پایگاه داده را در ابتدا تعریف کرده ایم، این کار بدین جهت نیاز است که تابع  mysql_real_escape_string نیاز به اطلاعات اتصال به پایگاه داده دارد، در غیر اینصورت با خطا مواجه خواهیم شد، از این تابع برای جلوگیری از MySQL Injection یا همان جلوگیری از نفوذ به دیتابیس استفاده می شود.
- از تابع md5 برای رمزی کردن رشته ها استفاده می شود، اگرچه هیچ سیستمی به طور کامل ایمن نیست، ولی با استفاده از تابع md5 تا حدود زیادی امنیت کلمه های عبور کاربران حفظ می شود (توجه داشته باشید که برگرداندن پسورد های اینکُد یا رمزی شده با md5 تقریبا غیر ممکن است).

ذخیره اطلاعات با  INSERT INTO در MySQL


اکنون که همه چیز را به درستی انجام داده ایم، نوبت به گام آخر است، در این مرحله اطلاعات کاربر را در دیتابیس و جدول register در ستون های username و password ذخیره می کنیم تا بعدا از آنها استفاده کنیم، این کار را در کد زیر انجام داده ایم.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>وبگو | بررسی و ثبت اطلاعات کاربر</title>
<!-- http://webgoo.ir -->
<style type="text/css">
body{
    font-family:Tahoma, Geneva, sans-serif;
    font-size:12px;
    direction:rtl;
}
</style>
</head>
<body>
<?php
//اطلاعات اتصال به پایگاه داده
$con = mysql_connect("localhost", "user", "pass")
or die(mysql_error());  
//نام دیتابیس
mysql_select_db("db", $con)
or die(mysql_error());
//دریافت و تعریف متغیر ها
$username = $_POST['username'];
$password = $_POST['password'];
//پیش فرض
$check_error = 0;
//بررسی معتبر بودن اطلاعات ارسالی کاربر
//نام کاربری
if (!isset($username) || $username == ''){
    echo "فیلد نام کاربری نباید خالی باشد!";
    $check_error = 1;
}
//کلمه عبور
elseif (!isset($password) || $password == ''){
    echo "فیلد کلمه عبور نباید خالی باشد!";
    $check_error = 1;
}
//مجاز بودن انتخاب حروف انگلیسی به عنوان نام کاربری
elseif (preg_match('/^[a-zA-Z0-9 _-]+$/', $username) === 0){
    echo "نام کاربری دارای کاراکترهای غیر مجاز است!";
    $check_error = 1;
}
//جلوگیری از نفوذ به دیتابیس
$username = mysql_real_escape_string($username);
$password = md5($password);
if ($check_error != 1){
//در این مرحله اطلاعات را در دیتابیس ذخیره خواهیم کرد
mysql_query("INSERT INTO register (username,password) VALUES('$username','$password')")
or die(mysql_error());
echo "عضویت شما با موفقیت انجام شد!<br />";
}
//پایان ارتباط با پایگاه داده 
mysql_close($con);
?>
</body>
</html>
توضیح:
- ساختار دستور INSERT INTO بسیار ساده است، اطلاعات را در ردیف ها ی تعین شده به شیوه آرایه، کلیدها و مقادیر ذخیره می کند، برای جدا سازی ستون ها و مقادیر آنها از علامت , استفاده کنید.
- در کد بالا صرفا جهت مثال و آشنایی شما چند فیلد را جهت نمونه آورده ایم، شما می توانید با توجه به نیازتان قابلیت های بیشتری برای ثبت نام و عضویت کاربران ایجاد کنید و از این لحاظ محدودیتی نیست.
- برای استفاده از اطلاعات ذخیره شده ی اعضای سایت، نیاز به تعریف و نوشتن کدهای دیگری است که در این مجال فرصت پرداختن به آنها نیست، این امر را به آموزش های بعدی موکول می کنیم.
sectionدسته بندی: آموزش کاربردی » MySQL
related مطالب بیشتر:
» ایجاد لینک دانلود مدت دار با PHP و MySQL
» نحوه رسم چارت و نمودار آماری با php و mysql
» آموزش ساخت پنل ورود و خروج سایت با php و mysql
» صفحه بندی مطالب و محتوا با PHP و MySQL
» هوشمند سازی پنل ورود و خروج سایت
commentنظرات (۱۷۹ یادداشت برای این مطلب ارسال شده است)
نویسنده: Amir
زمان: ۱۳:۳۰:۳۵ - تاریخ: ۱۳۹۱/۰۳/۲۴
سلام ما که توی
mysql_connect("localhost", "user", "pass")
این اطلاعات رو میدهیم امکان تغییر دادن اطلاعات توسط افراد دیگر با خواندن source code وجود دارد؟
پاسخ: 
سلام
php زبان سمت سرور است و کدهای شما فقط در سرور اجرا می شوند و خروجی html می دهند، پس تنها در صورتی قابل دسترسی هستند که فردی به سرور شما نفوذ کند! در اینصورت نتنها اطلاعات متغیرها و اتصال به پایگاه داده، بلکه هر چیز دیگری قابل تغییر است. اما اگر منظور شما روشی است که مقادیر به صورت مستقیم در دسترس و در معرض دید نباشند، می توانید از include برای فایل اطلاعات اتصال به پایگاه داده استفاده کنید، یعنی در یک فایل متغیرهای لازم جهت اتصال به دیتابیس را تعریف و آن را در هنگام اتصال، در صفحه اصلی include کنید، این روش بیشترین کاربرد را دارد.
نویسنده: aa
زمان: ۱۹:۵۹:۴۳ - تاریخ: ۱۳۹۱/۰۳/۲۶
سلام
چجوری باید آن را از دیتابیس بخونیم و تشخیص بدیم رمز عبور را درست وارد کرده یا نه؟
ممنون
پاسخ: 
سلام
احتمالا منظور شما فرم ورود و خروج است، برای اینکه بتوانید چنین قابلیتی برای کاربران ایجاد کنید، باید با مبحث session یا نشست ها در php آشنا باشید، بقیه موارد با کدهای php و دستورات mysql قابل حل است؛ در مجموع پاسخ دقیق به سوال شما نیازمند یک مطلب آموزشی مجزا است که در ادامه مباحث به مرور به آن نیز خواهیم پرداخت.
نویسنده: Reza
زمان: ۲۳:۴۱:۲۱ - تاریخ: ۱۳۹۱/۰۳/۲۷
سلام
من همه ی کارها رو انجام دادم
ولی یه ارور میده که نمیدونم مشکلش چیه
به این خط گیر میده
elseif (preg_match('/[^A-Za-z0-9_-$]/', $username)){
پاسخ: 
سلام
لطفا متن خطای دریافتی را ارسال کنید تا بررسی گردد، کد مشکلی ندارد و تست شده است، احتمال دارد قسمتی را ناخودآگاه دستکاری کرده باشید، دستور مربوط به preg_match را حذف و مجددا امتحان کنید. اگر مشکل بر طرف شد، پس می توانید از یک روش بررسی اعتبار دیگر استفاده کنید، الزامی به این روش نیست، صرفا جهت نمونه ذکر شده است.
نویسنده: Reza
زمان: ۰۷:۵۶:۲۶ - تاریخ: ۱۳۹۱/۰۳/۲۸
ممنون بابت پاسخ
من خط رو پاک کردم درست شد.
ولی یه مشکل دیگه هست،
زمانی که کادر نام کاربری یا پسورد خالی باشه پیغام نمیده
مشکل چیه؟
پاسخ: 
حق با شما است، دو باگ کوچک در برنامه وجود داشت، باگ preg_match احتمالا به دلیل وجود بک اسلش (\) های اضافه در رشته ارسالی بود، چون از mysql_real_escape_string قبل از بررسی preg_match استفاده کرده بودیم، باگ دوم هم به دلیل استفاده از md5 قبل از بررسی خالی بودن کلمه عبور بود، چون md5 هر چیزی را تبدیل به عباراتی کد شده می کند حتی متن خالی و بررسی ما همیشه true می شود!
به هر صورت آموزش به طور کامل اصلاح شد، سپاس از نکته سنجی شما.
نویسنده: Reza
زمان: ۱۴:۴۳:۵۰ - تاریخ: ۱۳۹۱/۰۳/۲۹
ممنون
درست شد.
نویسنده: Reza
زمان: ۱۹:۱۸:۱۹ - تاریخ: ۱۳۹۱/۰۳/۲۹
سلام
بازم مزاحم شدم
من خودم چند تا فیلد اضافه کردم
مثل: تکرار کلمه عبور و ایمیل و یه لیست بازشو هم گذاشتم
میخواستم کدها رو بهتون بدم و برام بررسی کنید.
چطوری کدها رو بهتون بدم؟
همینجا؟
پاسخ: 
برای ارسال کدهای خود در قسمت تماس با ما، آدرس ایمیل درج شده است، فایل خود را از طریق ایمیل الحاق و ارسال کنید، پاسخ آن را نیز از همان طریق پیگیر باشید.
نویسنده: علیرضا
زمان: ۱۹:۵۴:۱۶ - تاریخ: ۱۳۹۱/۰۴/۰۳
سلام
ممنون از آموزش تون .
وقتی ثبت نام میکنم ، پیام زیر رو میده :
Access denied for user 'user'@'localhost' (using password: YES)
سوال بعدی اینکه چجوری ایمیل کاربر رو هم درخواست کنه ؟
فرم ورود چه طوری ساخته میشه ؟
بعد از وارد شدن به حساب کاربری ، میخوام به یک فایل دیگه منتقل بشه ( مثلا /login.php/ )
و اینکه چطور یک کاری فقط برای اعضا امکان پذیر باشه ؟ ( مثلا فقط اعضا بتونن در سایت آپلود کنن )
تشکر
پاسخ: 
سلام
خطای اول به دلیل تعریف نشدن درست اطلاعات اتصال به پایگاه داده است، شما باید متغیر های مربوط به اتصال پایگاه داده را تعریف کنید (در قسمت mysql_connect)، اگر در لوکال هاست کار می کنید، معمولا باید از نام کاربری root و بدون پسورد استفاده کنید، اگر در سرور آنلاین هستید، اطلاعات اتصال به پایگاه داده ای را که ایجاد می کنید، درج نمائید.
در مورد خواستن ایمیل، این آموزش تنها یک الگو است، شما می توانید کدهای خودتان را مشابه آن بنویسید، این کار نیاز به کمی آشنایی و مهارت در برنامه نویسی با php دارد.
برای فرم ورود و خروج، آموزش بعدی را از قسمت (قبلی و بعدی) انتخاب کنید، توضیحات لازم داده شده است.
نویسنده: علیرضا
زمان: ۲۲:۱۷:۴۴ - تاریخ: ۱۳۹۱/۰۴/۰۳
من همه چی رو درست وارد کردم ولی :
Access denied for user 'fagig_10906283'@'localhost' (using password: YES)
پاسخ: 
کدهای خود را از طریق ایمیل ضمیمه و ارسال کنید تا بررسی گردد.
نویسنده: Soroush
زمان: ۱۲:۴۱:۴۲ - تاریخ: ۱۳۹۱/۰۴/۲۹
سلام
سایت من روی هاست xzn قرار داره و من هم عبارت local host و هم اسم مای اس کیو ال هاستم رو امتحان کردم که وقتی عضویت را می زنم، ارور 404 می دهد و وقتی phpmyadmin را چک می کنم، هیچی رویش نیامده!
پاسخ: 
سلام
به احتمال زیاد شما آدرس فایل های خود را به طور صحیح در قسمت action فرم تنظیم نکرده اید، از طرفی استفاده از هاست های رایگان معمولا محدودیت هایی دارد.
نویسنده: ali reza
زمان: ۱۴:۲۷:۵۳ - تاریخ: ۱۳۹۱/۰۵/۰۵
سلام من یه پرتال دارم که می خوام کاربرانی که برای اولین بار از پرتال من دیدن می کنند یه صفحه لوگین جلوشون ظاهر شه که ازشون پسورد و نام کاربری بخواد و تا این ها رو وارد نکردند نتونند هیچ ادرسی از پرتالم رو باز کنند ایا می تونید این صفحه لوگین رو با کدهای php برام درست کنید و یه دیتابیس هم داشته باشه که بتونم خودم پسورد ها رو درست کنم و به صورت دستی وارد دیتابیسش کنم این صفحه لوگین فقط دارای دو کادر متن برای وارد کردن پسورد و نام کاربری و یه کلید اینتر داشته باشه تا کاربران برای استفاده از پرتال رمز عبور و نام کاربری خریداری کنند این صفحه لوگین این خاصیت رو داشته باشه که کاربر بعد از وارد کردن پسورد این صفحه لوگین برای دفعه های بعد توی سیستم این کاربر دیگه ظاهر نشه، پرتال من شامل سایت و انجمن و اپلود سنتره، می خوام کاربر ادرس هر کدوم از این ها رو وارد کرد صفحه لاگین جلوش باز بشه و تا نام کاربری و پسورد وارد نکرده نتونه هیچ کدوم از ادرس ها رو باز کنه و هیچ راهی برای دور زدنش هم وجود نداشته باشه.
شما می تونید چنین برنامه ای بنویسید؟
پاسخ: 
سلام
ساخت چنین برنامه ای از نظر ما شدنی است، منتها سازگار کردن آن با سیستمی که از آن برای مدیریت سایتتان استفاده می کنید ممکن است نیاز به ویرایش سورس کدهای آن داشته باشد.
در صورت تمایل می توانید سفارش خود را از طریق فرم تماس، بخش برنامه نویسی وب مطرح و پیگیری نمائید.
نویسنده: milad
زمان: ۱۱:۲۰:۰۳ - تاریخ: ۱۳۹۱/۰۵/۱۹
سلام من میخوام فرم ثبت نام رو جوری بسازم که هر نام کاربری فقط یک بار ثبت بشه مثلا اسم milad یک بار تو پایگاه داده ثبت بشه و دفعه دوم اگه کسی اسم میلاد رو ثبت کنه پیام بده این نام کاربری قبلا ثبت شده است استاد میشه با کد توضیح بدین ممنون میشم
با تشکر
پاسخ: 
سلام
انجام این کار چندان سخت نیست، کافی است قبل از ارسال داده ها به پایگاه داده، ابتدا بررسی کنید که چنین نامی از قبل وجود دارد یا خیر، اگر وجود داشت پیام خطا نشان داده می شود، در غیر این صورت اطلاعات در دیتابیس ذخیره می گردند، به طور مثال:
$check_user=mysql_query("SELECT * FROM register WHERE username='$username'")
or die(mysql_error());
if(mysql_num_rows($check_user) > 0){
echo "این نام کاربری قبلا ثبت شده است!";
$check_error = 1;
}
نویسنده: مهدی
زمان: ۱۸:۵۶:۴۸ - تاریخ: ۱۳۹۱/۰۵/۲۱
با سلام
نام دیتابیسم a است و نام جدول b و یک سطر به نام name در آن وجود دارد و اینها هم کد نوشته شده که کار نمیکند نام صفحه عضویت b.php و نام صفحه رجیستر c.php است.
<....b.php....>
<form action="c.php" method="post"  name="ine" id="forma">
name: <input type="text" name="moshakhasat" />
<br />
<input type="submit" name="btnsave" value="ersal" />
<input type="button" value="back" onclick="window.back()" />
</form>
<....!c.php....>
<?php
if (isset($_POST["moshakhasat"]));
{
$esm =$_POST["moshakhasat"];

$link = mysql_connect("localhost", "root", "");
mysql_select_db ("a",$link);

$sql = "insert into b (name)";
$sql .= "value('$esm')";
mysql_query($sql,$link);
}
?>
<script language="javascript1.5" > window.navigate("a.php") </script>
در ضمن اولین بار که روی ارسال کلیک میکنم صفحه سفید میآید و رفرش که میکنم ارور میدهد که moshakhasat را نمیشناسد و جاوا اسکریپت هم که اصلا کار نمیکند.
پاسخ: 
سلام
مشاهده صفحه سفید یک امر طبیعی است!، چون کد شما هیچ نوع خروجی به مرورگر ارسال نمی کند، برای اینکه خروجی داشته باشید دستور echo را در این قسمت اضافه کنید:
mysql_query($sql,$link);
echo "اطلاعات ذخیره شد";
البته صفحه شما باید به صورت utf-8 طراحی شده باشد تا حروف فارسی را به درستی مشاهده کنید.
کد جاوا اسکریپت را هم به شکل زیر تغییر دهید:
<script type="text/javascript">
window.location.href='a.php';
</script>
نویسنده: احسان
زمان: ۱۹:۳۹:۴۸ - تاریخ: ۱۳۹۱/۰۵/۲۱
سلام
مطلب خیلی خوبی بود. ممنون
ببخشید یه سوال داشتم : من میخوام یک آمارگیر برای سایتم درست کنم ولی شیوه درست کردنش رو نمیدونم. میخوام یه جدولی در پایگاه داده درست کنم که چندتا فیلد داره که عبارتند از : تاریخ بازدید ، شمارنده بازدید و یا ip فرد بازدید کننده. به این صورت که با هر بار رفرش صفحه یا باز شدن سایت یکی به بازدیدهای روز اضافه شود.حالا نمیدونم چه جوری میشه اینکار رو کرد که با هر رفرش مثلا ip فرد در بانک ذخیره شود؟؟ اگه نمونه کدی برام بزارید ممنون میشم.
پاسخ: 
سلام
سوال شما خیلی کلی است؛ انجام این کار نیاز به آشنایی و تسلط نسبی بر php و mysql است، در واقع بسته به امکانات مورد نظر، این یک پروژه کوچک یا بزرگ برنامه نویسی است و نمی توان نمونه کدی برای آن در حد این پاسخ در نظر گرفت، توصیه ما این است که طرز کار php و mysql را به خوبی یاد بگیرید و سپس ایده های خود را هر طور که مایلید پیاده سازی کنید.
نویسنده: احسان
زمان: ۱۵:۴۳:۴۹ - تاریخ: ۱۳۹۱/۰۵/۲۲
ممنون. در اصل سوال من اینجاست که ip فرد را با چه دستوری میشه دریافت کرد؟ مثلا ما با $_post مقادیر فرم ها رو دریافت میکنیم حالا ip رو با چه دستوری دریافت کنیم ؟
پاسخ: 
سلام
تابع زیر به طور کامل این کار را انجام می دهد:
<?php
function getRealIpAddr(){
if (!empty($_SERVER['HTTP_CLIENT_IP'])){
$ip=$_SERVER['HTTP_CLIENT_IP'];
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED'])){
$ip=$_SERVER['HTTP_X_FORWARDED'];
}
elseif (!empty($_SERVER['HTTP_FORWARDED_FOR'])){
$ip=$_SERVER['HTTP_FORWARDED_FOR'];
}
elseif (!empty($_SERVER['HTTP_FORWARDED'])){
$ip=$_SERVER['HTTP_FORWARDED'];
}
else{
$ip=$_SERVER['REMOTE_ADDR'];
}
return $ip;
}
$ip = getRealIpAddr();
echo $ip;
?>
نویسنده: mahdi
زمان: ۱۸:۳۸:۰۸ - تاریخ: ۱۳۹۱/۰۵/۲۲
سلام
خیلی ممنون جواب سئوالم رو دادید
امیدوارم موقعی که شما هم نیاز به چیزی داشتید یکی باشه بی منت براتون انجام بده
اگه وقت کردید یک سایتی دارم کمتر از یک یک ماهه که راه اندازی شده در موردش نظر تخصصی بدید و اینکه چطور بهترش کنم
بازم ممنون
پاسخ: 
سلام
خواهش می کنیم؛ لطفا در وقتی دیگر یادآوری کنید تا در یک فرصت مناسب سایتتان بررسی گردد.
paged صفحه 1 از 12




more لطفا دقت کنید که یادداشت های زیر منتشر نشده و حذف خواهند شد:
- یادداشت های خارج از موضوع این مطلب.
- سوالات کلی، غیر ضروری و مشکلاتی که هیچ تلاشی برای رفع آن نکرده باشید.
- نظرات حاوی کدها و اسکریپت های خیلی طولانی (به طور مثال کد کامل قالب وبلاگ).

2 × 7
 refresh
آگهی
seonab.com
طراحی نرم افزار اندروید
رنگین کمان عکس
Ranginkamaan.com

آرشیو عکس های باکیفیت با موضوعات متنوع...