ขอถาม password รีเฟรชตัวเองแล้ว save ค่าว่างหรือค่าอื่น ๆ ลง DB แทนหน่อยครับ
แล้วคุณปู เอาค่าอะไรไปใส่ ฟิว username password ครับ
ผมว่าต้องเอาโค้ดมาแป๊ะ จะได้มองเห็น
ประวัติการแก้ไข 2010-09-30 15:10:02
Date :
2010-09-30 15:09:01
By :
ไวยวิทย์
ตอนนี้ใช้ยังงี้อยู่ครับ
if($user_members and $pass_members and $confirm_passs !="") //ตรงนี้ใช้แบบนี้ได้ป่าวครับ
{
อัพเดทเฉพาะ Field ที่ไม่ใช่ Field username,password,confirm_passs
}else
{
อัพเดทเฉพาะทุกฟิลด์เลย
}
ซึ่งมันก็ทำงานในกรณีที่เค้าไม่แก้ username กับ Password ได้ แต่ในกรณีที่เค้าต้องการแก้ไข Username กับ Password ละ
ตอนนี้ กำลังเทส ในกรณีที่เค้าไม่แก้ไข username pass รอบสองมันก็ login ได้
แต่ว่าในกรณีที่เค้าแก้ไข username pass แล้วบันทึกลง DB มันไม่อัพเดทให้อะ มันยังเป้น Password ตัวเดิมอยู่อะครับ
ถ้าเค้าใส่ username pass ตัวใหม่นะ
ประมาณว่า มันเป็นค่าเก่าอยู่
ติดตรงกรณีที่เค้าแก้ไขทุกฟิลด์อะ
Date :
2010-09-30 15:10:54
By :
nottpoo
รู้สึกว่าโค้ดผมจะย๊าว ยาว นะครับ งั้นผมให้ดูเฉพาะส่วน update นะครับ
Code (PHP)
//check password refresh
if($user_members and $pass_members and $confirm_passs !="")
{
$sqlupdate="update tb_member SET lastname='$lastnames',firstname='$firstnames',company_name='$company_names',town='$town_invoices',city='$county_invoices',postcode='$postcode_invoices',country='$country_invoices',email='$emailss',telephone1='$telephones1',telephone2='$telephones2',fax='$faxs',address='$address_invoices',address_delivery='$address_deliverys',town_delivery='$town_deliverys',county_delivery='$county_deliverys',postcode_delivery='$postcode_deliverys',country_delivery='$country_deliverys',tel='$tels' WHERE id='$id' AND status='Member'";
$res= mysql_query($sqlupdate) or die (mysql_error());
}
else
{
$sqlupdate="update tb_member SET lastname='$lastnames',firstname='$firstnames',company_name='$company_names',town='$town_invoices',city='$county_invoices',postcode='$postcode_invoices',country='$country_invoices',email='$emailss',telephone1='$telephones1',telephone2='$telephones2',fax='$faxs',address='$address_invoices',address_delivery='$address_deliverys',town_delivery='$town_deliverys',county_delivery='$county_deliverys',postcode_delivery='$postcode_deliverys',country_delivery='$country_deliverys',tel='$tels',username='$user_members',password='$pass_members',comfirm_pass='$confirm_passs' WHERE id='$id' AND status='Member'";
$res= mysql_query($sqlupdate) or die (mysql_error());
}
Date :
2010-09-30 15:13:53
By :
nottpoo
ตอน update อะ ถ้าเข้าไม่กรอกข้อมูลในช่องพวกนั้น ก็ไม่ต้องเอาข้อมูล user pass ไปอัพเดท
งงไหม
++
1. กด update
2. ตรวจสอบข้อมูลในตัวแปรของช่อง username หรือ pass หรือทั้งสองอย่าง
3. สร้ามันเป็นค่าว่าง ก็เรียกใช้คำสั่งอัพเดทแบบไม่ต้องอัพเดท user pass
4. ถ้าไม่เป็นค่าว่าง ก็อัพเดทไปตามคำสั่งเดิม
หรือ
ดึงข้อมูล user/pass มาด้วยเลย
แต่แบบdisable textbox ไว้
แล้วทำเช็กบล็อกมา เพื่อ enable textbox ของ user/pass
ตอนอัพเดท ก็มันมีข้อมูลไปอัพ ไม่เป็นค่าว่าง
แบบนี้ยากกว่าแบบข้างบน
***
User name ไม่น่าให้เปลี่ยนนะ มันใช้ login ก็ซ้ำกันไม่ได้นี่นา
Date :
2010-09-30 15:14:29
By :
Miraku
if($user_members and $pass_members and $confirm_passs !="")
{
อัพเดททุกฟิลด์เลย
}
อัพเดททุกฟิลด์เลย เช็คแค่ว่า มันว่างหรือเปล่า ไม่ต้องมี else ก็ได้นิครับ
ปกติ textbox เราก็ดึงค่าเก่ามาใส่แต่ละอันอยู่แล้ว ถ้าหากเขาแก้ไขก็บันทึกอันใหม่ทับอันเดิม ถ้าหากไม่แก้ไข textbox มันก็ค่าเก่าที่ดึงจากฐานข้อมูลนิ
หรือว่ามีเงื่อนไขอื่่นครับ
Date :
2010-09-30 15:16:57
By :
ไวยวิทย์
วิธีของคุณ Nico ไม่ได้ครับ
มันมี 2 เงื้อนไขครับ
เงื่อนไขแรกคือ ให้อัพเดทได้เมื่อ User ต้องการอัพเดท Username Password คืออัพเดททุกฟิลด์ได้ครับ
เงื่อนไขที่สองคือ ไม่ต้อง อัพเดท Username Password เมื่อ User ไม่ต้องการแก้ไข
แค่นี้ครับ
Date :
2010-09-30 15:28:49
By :
nottpoo
แล้วคุณปูเช็คยังไงครับว่า User จะอัพเดท Username กับ Password หรือไม่ หรือว่าเช็คจาก textbox ที่ user กรอกเลย
ถ้างั้นก่อนทำการ update คงต้อง ไปเลือก user ที่มีค่าตาม textbox ถ้าหากเป็น 0 อัพเดท Username กับ Password ถ้าหาก เป็น 1
ไม่อัพเดท Username กับ Password
Date :
2010-09-30 15:43:10
By :
ไวยวิทย์
ใช่ ๆ เชคจาก ที่เค้ากรอกเลยอะ
ตอนนี้ใช้ยังงี้อยู่ครับ
if($user_members and $pass_members and $confirm_passs !="") //ตรงนี้ใช้แบบนี้ได้ป่าวครับ
{
อัพเดทเฉพาะ Field ที่ไม่ใช่ Field username,password,confirm_passs
}else
{
อัพเดทเฉพาะทุกฟิลด์เลย
}
ตะกี้เพื่อนบอกใช้ยังงี้ มันไม่ได้ผล อัพเดทได้ แต่ login ไม่ได้
if(user==""||pass==""){updateWithOutUserChangeUserAndPass();}else{updateAll()}
Date :
2010-09-30 15:48:52
By :
nottpoo
อ้อ นึกว่าใคร วิทย์นะเอง เปลี่ยนชื่อจำไม่ได้เลย เอิ้กๆๆ โทษทีครับ
Date :
2010-09-30 15:52:12
By :
nottpoo
Code (PHP)
$sql_member = $all_function->select_db("*","tbl_member","username = '".$_POST['username']."' AND password = '".$_POST['password']."'","",""); // ดึงจากฐานข้อมุล ด้วยค่าจาก textbox
$rs_member = mysql_query($sql_member);
$row_member = mysql_fetch_assoc($rs_member);
$num_row_member = mysql_num_rows($rs_member);
if($num_row_member == 0) // ถ้า่ค่าจาก textbox มันไม่เหมือนกับในฐานข้อมูล ให้อัพดเท username password
{
$sqlupdate="update tb_member SET lastname='$lastnames',firstname='$firstnames',company_name='$company_names',town='$town_invoices',city='$county_invoices',postcode='$postcode_invoices',country='$country_invoices',email='$emailss',telephone1='$telephones1',telephone2='$telephones2',fax='$faxs',address='$address_invoices',address_delivery='$address_deliverys',town_delivery='$town_deliverys',county_delivery='$county_deliverys',postcode_delivery='$postcode_deliverys',country_delivery='$country_deliverys',tel='$tels',username='$user_members',password='$pass_members',comfirm_pass='$confirm_passs' WHERE id='$id' AND status='Member'";
}else{ // ถ้า่ค่าจาก textbox มันเหมือนกับในฐานข้อมูล ก็ไม่ต้องอัพเดท
$sqlupdate="update tb_member SET lastname='$lastnames',firstname='$firstnames',company_name='$company_names',town='$town_invoices',city='$county_invoices',postcode='$postcode_invoices',country='$country_invoices',email='$emailss',telephone1='$telephones1',telephone2='$telephones2',fax='$faxs',address='$address_invoices',address_delivery='$address_deliverys',town_delivery='$town_deliverys',county_delivery='$county_deliverys',postcode_delivery='$postcode_deliverys',country_delivery='$country_deliverys',tel='$tels' WHERE id='$id' AND status='Member'";
}
$res= mysql_query($sqlupdate) or die (mysql_error());
ลองดูครับ
Date :
2010-09-30 15:58:08
By :
ไวยวิทย์
เอิ๊ก ๆ
Date :
2010-09-30 15:59:25
By :
ไวยวิทย์
อาการมันเป็นแบบนี้ครับ
1. ถ้าเราแก้ไขฟิลด์อื่น ๆ ที่ไม่เกี่ยวกับ username password
ตอนกด update มันจะฟ้องว่า password Not Match (ตรงนี้เขียนฟ้องกันไว้เองครับ)
2. ถ้าเราแก้ไขทุกฟิลด์ มันอัพเดทให้ครับ มันก็บอกว่า update success
แต่ว่าค่ามัน update อะไรลงฐานข้อมูลให้ก็ไม่รู้ แต่ ทำให้ login ไม่ได้ทั้ง password เก่าและ ใหม่
Date :
2010-09-30 16:13:50
By :
nottpoo
ที่มันบอกว่า Password Not match แสดงว่า ค่ามันเปลี่ยนตอนกด update หนะครับ
Date :
2010-09-30 16:18:15
By :
nottpoo
pass เก็บแบบเข้ารหัสด้วยหรือเปล่า
แล้วช่องอัพเดทรหัส เข้ารหัสด้วยหรือเปล่า
ตอนอัพเดท ลอง print ตัวแปรออกมาดูค่าด้วย จะได้รู้ว่ามันส่งอะไรไป
Date :
2010-09-30 16:46:50
By :
Miraku
ครับ เข้า Md5 แต่เท่าที่เทสดู ผมว่าน่าจะเจอละ
Md5 มันเปลี่ยนอะครับ ตอนกด update
สาเหตุ น่าจะเจอละ แต่กำลังหาวิธีแก้ครับ
Date :
2010-09-30 17:19:25
By :
nottpoo
เอื้ก ๆ น่าจะได้แล้วหน่ะครับ
Date :
2010-09-30 17:24:38
By :
ไวยวิทย์
ขอบคุณทุกคนครับ เจอสาเหตุเฉยๆ ละครับ
แต่ยังหาวิธีแก้ไม่ได้ เอิ้กๆๆๆๆๆ
ขอบคุณมากครับ แต่ว่าใครรู้มั่ง ว่าจะทำไงไม่ไห้ Md5 มันเปลี่ยนเองอะ ถ้าเราไม่แก้ pass อะ
Date :
2010-09-30 18:19:57
By :
nottpoo
ขออนุญาตดันหระทู้ เพราะยังแก้ไม่ได้คร้าบบบบ
ที่อนุญาติให้แก้ username เพราะว่า ครั้งแรก user ไม่ได้ตั้งเองนะครับ
admin เป็นคนตั้งให้
ตอนนี้ใช้ โค้ดแบบนี้อยู่ครับ
Code (PHP)
//check password refresh
if($user_members!="" and $pass_members !="" and $confirm_passs !="")
{
update all Field
}
else if($user_members==$user_members and $pass_members == $pass_members and $confirm_passs == $confirm_passs)
{
update Field username & Password Only
}
else
{
update all Field ยกเว้น username & password
}
ระบบการทำงานมันจะเป็นแบบนี้
1.ลูกค้า Register แล้ว admin จะเป็นคนตั้งรหัสให้ในครั้งแรก
2. ลูกค้าใช้ user,pass ที่ admin ให้ login เข้าระบบครั้งแรก โดยจะเข้าไปแก้ไขข้อมูลส่วนตัวได้
3. เมื่อแก้ไข ข้อมูลเสร็จลูกค้าก็จะ logout ออกไป และเข้ามาในระบบได้ หลังจากลูกค้าเปลี่ยน user,pass เอง
ครั้งแรก user แก้ไขเองได้ ถ้าแก้ไขทุกฟิลด์ แต่ถ้าเค้าไม่แก้ฟิลด์ user,pass แต่แก้ฟิลดือื่น ๆ แทน เนี่ย ฟิลด์มันดัน
รีเฟรชเปลี่ยน pass เองซะงั้น
แต่เมื่อลูกค้า login เข้าไปแล้วเค้ากดดู Profiles ส่วนตัวที่ โดยวิเคราะพฤติกรรมเค้าได้แบบนี้
วิเคราะห์ได้ดังนี้ คือ
1. User จะแก้ไข Username และ Password เอง แก้ไขข้อมูลเอง คือ แก้ไขทุกฟิลด์
2. user จะแก้ไขเฉพาะฟิลด์ Username และ password
3. User แก้ไขฟิลด์ ข้อมูลส่วนตัว ยกเว้นฟิลด์ Username และ password
แต่ว่า pass ที่เป็น Md5 มันดันรีเฟรชตัวเอง โดย md5 ก็จะเปลี่ยนไปทำให้ลูกค้าเข้าระบบอีกไม่ได้ เพราะ pass มันเปลี่ยนไปแล้วอะ
ประวัติการแก้ไข 2010-10-01 10:23:08 2010-10-01 10:24:11 2010-10-01 10:24:33 2010-10-01 10:35:45 2010-10-01 12:13:55
Date :
2010-10-01 10:22:21
By :
nottpoo
ตัวอย่างนะครับ
if (เฉพาะช่องกรอก ข้อมูลส่วนตัว) exit('ข้อมูลส่วนตัวไม่ครบ');
if (ช่องกรอก user pass)
{
// update user pass
$report[] = 'ชื่อผู้ใช้ และรหัสผ่านถูกเปลี่ยน';
}
// force update ข้อมูลอื่นๆ
$sql = "update .."
if (mysql_query($sql)) $report[] = 'ข้อมูลส่วนตัวถูกบันทึก';
print_r($report);
Date :
2010-10-01 10:46:32
By :
pjgunner.com
ทำ md5 ช่วงไหนของการทำงานหรอ
เป็นไปได้ไหมที่ user ไม่ได้เปลี่ยน user pass แต่เว็บไม่ได้เข้ามาทำงานที่เงื่อนไข else
Date :
2010-10-01 15:22:51
By :
Miraku
ถ้าไม่รู้จะทำไงแยกส่วน user pass เป็น tbl_login
รายละเอียดเป็น tbl_login_detail โดยมีความสำพันธ์กัน login_id กับ login_detail_id
ประมาณนี้จะได้ไม่มีปัญหาครับ
Date :
2010-10-01 15:52:28
By :
dekkuza
ทำได้ละครับ โดยความช่วยเหลือของน้องสุดที่รัก ที่รู้จักกัน เค้าแนะนำให้ใช้ base64_encode
แทน Md5 อะอะ ว่าเพิ่งว่ากันครับ อย่างงี้คับ ซึ่งผมก็รู้คับว่า base64_encode มันสามารถ decode กลับได้
แต่ว่าผมเขียนอักษร เพิ่มต่อใน password ไปอีกละคับ คงไม่มีใครรู้หรอกคับ ว่ามั้ย ถ้าเค้า decode กลับเค้าคงได้ password ไปครึ่งเดียวว่ามั้ย
ขอบคุณสำหรับความช่วยเหลือคับ
Date :
2010-10-04 08:48:47
By :
nottpoo
Load balance : Server 00