การโฆษณา

บ้าน - สมาร์ททีวี
Brave reg คอมพ์ php.ini ดาวน์โหลด Reg Organizer - การทำความสะอาดและเพิ่มประสิทธิภาพระบบ

#รวม
#รวม
int regcomp (regex_t *ก่อนกำหนด, const ถ่าน *นิพจน์ทั่วไป,นานาชาติแฟล็ก);
int regexec(const regex_t *ก่อนกำหนด, const ถ่าน *เชือก, ขนาด_tไม่ตรงกัน,
regmatch_tจับคู่,นานาชาติธง);
ข้อผิดพลาด size_t (intรหัสผิดพลาด, const regex_t *ก่อนกำหนด, ถ่าน *ผิดพลาด,
ขนาด_terrbuf_size);
โมฆะ regfree (regex_t *ก่อนกำหนด);

คำอธิบาย

รวบรวมนิพจน์ทั่วไป POSIX

การทำงาน regcomp() ใช้เพื่อรวบรวมนิพจน์ทั่วไปให้อยู่ในรูปแบบที่เหมาะสมสำหรับการค้นหาครั้งต่อไปโดยใช้ regexec().

regcomp() ตัวชี้ไปยังพื้นที่จัดเก็บเทมเพลตบัฟเฟอร์ถูกส่งผ่าน ก่อนกำหนดชี้ไปที่สตริงที่สิ้นสุดด้วยค่า null นิพจน์ทั่วไปและธง แฟล็กใช้เพื่อกำหนดประเภทการคอมไพล์

การค้นหานิพจน์ทั่วไปทั้งหมดจะต้องดำเนินการโดยใช้รูปแบบบัฟเฟอร์ที่คอมไพล์แล้ว regexec() จะต้องถูกเรียกด้วยที่อยู่ของเทมเพลตบัฟเฟอร์ที่เริ่มต้นโดยฟังก์ชันเสมอ regcomp().

ความหมาย แฟล็กอาจประกอบด้วยระดับบิต หรือค่าต่อไปนี้เป็นศูนย์หรือมากกว่า:

REG_EXTENDEDใช้ไวยากรณ์นิพจน์ทั่วไปแบบขยาย POSIX ในระหว่างการตีความ นิพจน์ทั่วไป- หากไม่ได้เปิดใช้งานแฟล็กนี้ ระบบจะใช้ไวยากรณ์นิพจน์ทั่วไปแบบง่าย POSIX REG_ICASEละเว้นกรณี การค้นหาครั้งต่อไป regexec() การใช้รูปแบบบัฟเฟอร์นี้จะไม่คำนึงถึงขนาดตัวพิมพ์ REG_NOSUBไม่รายงานตำแหน่งการแข่งขัน ตัวเลือก ไม่ตรงกันและ จับคู่สำหรับ regexec() จะถูกละเว้นหากเทมเพลตบัฟเฟอร์ที่กำหนดถูกคอมไพล์โดยเปิดใช้งานแฟล็กนี้ REG_NEWLINEโอเปอเรเตอร์ที่ตรงกันกับอักขระใดๆ จะไม่ตรงกับอักขระขึ้นบรรทัดใหม่

รายการอักขระที่ไม่ตรงกัน ( [^...] ) ที่ไม่มีอักขระขึ้นบรรทัดใหม่จะไม่เหมือนกับการขึ้นบรรทัดใหม่

ตัวดำเนินการเปรียบเทียบตามจุดเริ่มต้นของสตริง ( ^ ) จับคู่สตริงว่างทันทีหลังจากขึ้นบรรทัดใหม่ไม่ว่าจะเกิดอะไรขึ้นก็ตาม ธง, ธงการดำเนินการ regexec(), บรรจุ REG_NOTBOL.

ตัวดำเนินการเปรียบเทียบที่สิ้นสุดบรรทัด ($) จะจับคู่สตริงว่างจนถึงอักขระเริ่มต้นบรรทัด ไม่ว่าจะเกิดอะไรขึ้นก็ตาม ธงประกอบด้วย REG_NOTEOL.

เปรียบเทียบกับนิพจน์ทั่วไป POSIX

การทำงาน regexec() ใช้เพื่อเปรียบเทียบสตริงที่สิ้นสุดด้วยค่า null กับรูปแบบบัฟเฟอร์ที่ประมวลผลล่วงหน้า ก่อนกำหนด- ข้อโต้แย้ง ไม่ตรงกันและ จับคู่ใช้ในการให้ข้อมูลเกี่ยวกับตำแหน่งของการแข่งขันใดๆ ความหมาย ธงสามารถเป็นบิตได้ หรือค่าหนึ่งหรือทั้งสองค่า REG_NOTBOLและ REG_NOTEOL- ค่าเหล่านี้จะกำหนดพฤติกรรมของกระบวนการเปรียบเทียบตามที่อธิบายไว้ด้านล่าง REG_NOTBOLตัวดำเนินการเปรียบเทียบที่จุดเริ่มต้นของสตริงจะล้มเหลวเสมอ (แต่โปรดดูแฟล็กการคอมไพล์ที่อธิบายไว้ข้างต้น REG_NEWLINE- ธงนี้สามารถใช้ได้เมื่อ regexec() แยกส่วนของสตริงถูกส่ง และจุดเริ่มต้นของสตริงในกรณีนี้ไม่ควรตีความว่าเป็นจุดเริ่มต้นของบรรทัดใหม่ REG_NOTEOLตัวดำเนินการเปรียบเทียบจุดสิ้นสุดบรรทัดจะล้มเหลวเสมอ (แต่โปรดดูแฟล็กการคอมไพล์ที่อธิบายไว้ข้างต้น REG_NEWLINE).

ไบต์ออฟเซ็ต

ถ้า REG_NOSUBไม่ได้ตั้งค่าเมื่อรวบรวมเทมเพลตบัฟเฟอร์ สามารถรับข้อมูลเกี่ยวกับตำแหน่งของการจับคู่ได้ ความหมาย จับคู่จะต้องกำหนดให้มีอย่างน้อยที่สุด ไม่ตรงกันองค์ประกอบ พวกเขากำลังเติมเต็ม regexec() ที่อยู่ของการแข่งขันแบบอินไลน์ ออฟเซ็ตของนิพจน์ย่อยที่เริ่มต้นด้วย ฉัน- วงเล็บเปิดเก็บไว้ใน แมตช์[i]- ที่อยู่การจับคู่ของนิพจน์ทั่วไปทั้งหมดจะถูกเก็บไว้ใน จับคู่(โปรดทราบว่าหากต้องการคืนค่าชดเชยการจับคู่ เอ็นการแสดงออกย่อยความหมาย ไม่ตรงกันจะต้องไม่น้อย ยังไม่มี+1- องค์ประกอบโครงสร้างที่ไม่ได้ใช้จะมีค่าเป็น -1

โครงสร้าง regmatch_tซึ่งเป็นประเภท จับคู่กำหนดไว้ใน :

โครงสร้าง Typedef ( regoff_t rm_so; regoff_t rm_eo; ) regmatch_t;

แต่ละองค์ประกอบ rm_soซึ่งไม่เท่ากับ -1 บ่งชี้ถึงออฟเซ็ตเริ่มต้นของการจับคู่ถัดไปของสตริงย่อยที่ใหญ่ที่สุดภายในสตริงที่กำหนด องค์ประกอบสัมพัทธ์ rm_eoระบุออฟเซ็ตของการสิ้นสุดการจับคู่ ซึ่งเป็นอักขระตัวแรกหลังข้อความที่ตรงกัน

การรายงานข้อผิดพลาด POSIX

การทำงาน ข้อผิดพลาดอีกครั้งใช้ในการแปลงรหัสข้อผิดพลาดที่อาจได้รับจาก regcomp() และ regexec() ลงในบรรทัดข้อความแสดงข้อผิดพลาด

ใน ข้อผิดพลาดอีกครั้งส่งแล้ว: รหัสข้อผิดพลาด รหัสผิดพลาด, รูปแบบบัฟเฟอร์ ก่อนกำหนดตัวชี้ไปยังบัฟเฟอร์สตริงอักขระ ผิดพลาดและขนาดบัฟเฟอร์แถว errbuf_size- ฟังก์ชันส่งคืนขนาด ผิดพลาดซึ่งจำเป็นต้องจัดเก็บข้อความแสดงข้อผิดพลาดเป็นสตริงที่สิ้นสุดด้วยค่า null ถ้าและ ผิดพลาด, และ errbuf_sizeไม่เท่ากับศูนย์แล้ว ผิดพลาดเติมก่อน errbuf_size - 1อักขระข้อความแสดงข้อผิดพลาดและลงท้ายด้วยไบต์ว่าง ("\0")

การเพิ่มบัฟเฟอร์เทมเพลต POSIX

การทำงาน ลงทะเบียนฟรี() เพิ่มหน่วยความจำที่จัดสรรให้กับเทมเพลตบัฟเฟอร์ ก่อนกำหนดระหว่างขั้นตอนการคอมไพล์โดยใช้ regcomp().

มูลค่าการส่งคืน

การทำงาน regcomp() คืนค่าศูนย์เมื่อคอมไพล์สำเร็จหรือรหัสข้อผิดพลาด

การทำงาน regexec() ส่งคืนค่าศูนย์ในการแข่งขันหรือ REG_NOMATCHหากไม่มีการแข่งขัน

ข้อผิดพลาด

การทำงาน regcomp() อาจส่งคืนข้อผิดพลาดต่อไปนี้: REG_BADBRการใช้ตัวดำเนินการลิงก์ย้อนกลับไม่ถูกต้อง REG_BADPATการใช้ตัวดำเนินการเทมเพลตไม่ถูกต้อง เช่น ตัวดำเนินการกลุ่มหรือรายการ REG_BADRPTการใช้ตัวดำเนินการซ้ำไม่ถูกต้อง เช่น การใช้ "*" เป็นอักขระตัวแรก REG_EBRACEวงเล็บที่ไม่ได้จับคู่ในตัวดำเนินการช่วงเวลา REG_EBRACKวงเล็บเหลี่ยมที่ไม่ได้จับคู่ในคำสั่งรายการ REG_ECOLLATEองค์ประกอบการเรียงลำดับไม่ถูกต้อง REG_ECTYPEชื่อคลาสตัวละครที่ไม่รู้จัก REG_EENDข้อผิดพลาดที่อาจเกิดขึ้น ไม่ได้กำหนดไว้ใน POSIX.2 REG_EESCAPEแบ็กสแลชต่อท้าย REG_EPARENวงเล็บที่ไม่ได้จับคู่ในตัวดำเนินการจัดกลุ่ม REG_ERANGEการใช้ตัวดำเนินการพื้นที่ไม่ถูกต้อง: ตัวอย่างเช่น จุดสิ้นสุดของพื้นที่ปรากฏขึ้นก่อนจุดเริ่มต้น REG_ESIZEนิพจน์ทั่วไปที่คอมไพล์แล้วต้องมีรูปแบบบัฟเฟอร์ที่มีขนาดใหญ่กว่า 64 KB สิ่งนี้ไม่ได้กำหนดไว้ใน POSIX.2 REG_ESPACEรูทีนนิพจน์ทั่วไปมีหน่วยความจำไม่เพียงพอ REG_ESUBREGการอ้างอิงย้อนกลับไปยังนิพจน์ย่อยไม่ถูกต้อง

ขั้นแรก เราจะปรับปรุงหน้าการลงทะเบียนโดยเพิ่มความสามารถในการอัปโหลดอวตาร รูปภาพต้นฉบับจะต้องอยู่ในรูปแบบ jpg, gif หรือ png และไม่ควรเกิน 2 MB ไม่ต้องกังวล หลังจากที่สคริปต์ถูกบีบอัด ขนาดอวตารจะอยู่ที่ประมาณ 3 kb และรูปแบบ jpg เปิดหน้า เร็กPHPและเพิ่มลงในแท็ก < รูปร่าง> เส้น enctype="หลายส่วน/แบบฟอร์มข้อมูล"ดังตัวอย่าง:


การลงทะเบียน










ตอนนี้มาบันทึกกันเถอะ reg.php

2.จากนั้นคุณจะต้องสร้างฟิลด์อื่นในตาราง ผู้ใช้- ไปกันเลย phpmyadmin.phpให้เลือกฐานข้อมูลและตารางที่ต้องการ


เราตั้งค่าทั้งหมดตามในรูป:

เส้นทางไปยังอวตารจะถูกบันทึกไว้ในช่องนี้ และจะถูกบันทึกไว้ในโฟลเดอร์แยกต่างหาก เรียกมันว่า "อวตาร" โฟลเดอร์จะอยู่ในไดเร็กทอรีเดียวกันกับไฟล์สคริปต์ที่เหลือ

3.ไปที่ไฟล์ บันทึก_ ผู้ใช้. PHPและเพิ่มรหัสต่อไปนี้หลังจากลบช่องว่างออกจากข้อมูลเข้าสู่ระบบและรหัสผ่าน:

//ลบช่องว่างเพิ่มเติม
$login = ตัด($login);

// เพิ่มใหม่ ********************************************

//เพิ่มการตรวจสอบความยาวของการเข้าสู่ระบบและรหัสผ่าน
ถ้า (strlen($เข้าสู่ระบบ)< 3 or strlen($login) > 15) {
exit("การเข้าสู่ระบบต้องประกอบด้วยอักขระอย่างน้อย 3 ตัวและไม่เกิน 15 ตัว");
}
ถ้า (strlen($รหัสผ่าน)< 3 or strlen($password) > 15) {
exit("รหัสผ่านต้องมีอย่างน้อย 3 ตัวอักษรและไม่เกิน 15 ตัว");
}

if (!empty($_POST["fupload"])) //ตรวจสอบว่าผู้ใช้ส่งรูปภาพไปแล้วหรือไม่
{
$fupload=$_POST["fupload"]; $fupload = ตัดแต่ง($fupload);
ถ้า ($fupload =="" หรือว่าง($fupload)) (
unset($fupload);// ถ้าตัวแปร $fupload ว่างเปล่า ให้ลบออก
}
}
ถ้า (!isset($fupload) หรือว่าง($fupload) หรือ $fupload =="")
{
// หากไม่มีตัวแปร (ผู้ใช้ไม่ได้ส่งรูปภาพ) ให้กำหนดรูปภาพที่เตรียมไว้พร้อมข้อความว่า "ไม่มีรูปประจำตัว"
$avatar = "อวตาร/net-avatara.jpg"; //คุณสามารถวาด net-avatara.jpg หรือนำมาจากแหล่งที่มาก็ได้
}
อื่น
{
//มิฉะนั้น - โหลดรูปภาพของผู้ใช้
$path_to_90_directory = "avatars/";//โฟลเดอร์ที่จะโหลดรูปภาพเริ่มต้นและสำเนาที่บีบอัด

ถ้า(preg_match("/[.](JPG)|(jpg)|(gif)|(GIF)|(png)|(PNG)$/",$_FILES["fupload"]["name"])) //ตรวจสอบรูปแบบภาพต้นฉบับ
{
$filename = $_FILES["fupload"]["name"];
$source = $_FILES["fupload"]["tmp_name"];
$target = $path_to_90_directory $ชื่อไฟล์;
move_uploaded_file($source, $target);//อัพโหลดต้นฉบับไปยังโฟลเดอร์ $path_to_90_directory
if(preg_match("/[.](GIF)|(gif)$/", $ชื่อไฟล์)) (
$im = imagecreatefromgif($path_to_90_directory.$filename) ; //หากต้นฉบับอยู่ในรูปแบบ GIF ให้สร้างรูปภาพในรูปแบบเดียวกัน จำเป็นสำหรับการบีบอัดในภายหลัง
}
ถ้า(preg_match("/[.](PNG)|(png)$/", $ชื่อไฟล์)) (
$im = imagecreatefrompng($path_to_90_directory.$filename) ;//หากต้นฉบับอยู่ในรูปแบบ PNG ให้สร้างรูปภาพในรูปแบบเดียวกัน จำเป็นสำหรับการบีบอัดในภายหลัง
}

If(preg_match("/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/", $ชื่อไฟล์)) (
$im = imagecreatefromjpeg($path_to_90_directory.$filename); //หากต้นฉบับอยู่ในรูปแบบ jpg ให้สร้างรูปภาพในรูปแบบเดียวกัน จำเป็นสำหรับการบีบอัดในภายหลัง
}
// การสร้างภาพสี่เหลี่ยมจัตุรัสและการบีบอัดที่ตามมาซึ่งนำมาจากเว็บไซต์ www.codenet.ru
// สร้างสี่เหลี่ยมจัตุรัสขนาด 90x90
// dest - รูปภาพผลลัพธ์
// w - ความกว้างของภาพ
// อัตราส่วน - สัมประสิทธิ์สัดส่วน
$w = 90; // สี่เหลี่ยมจัตุรัส 90x90. สามารถจัดหาในขนาดอื่นได้
// สร้างภาพต้นฉบับตาม
// ซอร์สไฟล์และกำหนดขนาดของมัน
$w_src = รูปภาพ x($im); //คำนวณความกว้าง
$h_src = ภาพ($im); //คำนวณความสูงของภาพ
// สร้างภาพสี่เหลี่ยมจัตุรัสว่าง
// truecolor มีความสำคัญ! ไม่เช่นนั้นเราจะได้ผลลัพธ์แบบ 8 บิต
$dest = imagecreatetruecolor($w,$w);
// ตัดจุดศูนย์กลางสี่เหลี่ยมออกตาม x หากรูปภาพอยู่ในแนวนอน
ถ้า ($w_src>$h_src)
imagecopyresampled($dest, $im, 0, 0,
รอบ((สูงสุด($w_src,$h_src)-นาที($w_src,$h_src))/2),
0, $w, $w, นาที($w_src,$h_src), นาที($w_src,$h_src));
// ตัดส่วนบนของสี่เหลี่ยมออกตาม y
// หากภาพถ่ายเป็นแนวตั้ง (แม้ว่าคุณจะใช้ตรงกลางก็ได้)
ถ้า ($w_src<$h_src)
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w,
นาที($w_src,$h_src), นาที($w_src,$h_src));
// ภาพสี่เหลี่ยมจัตุรัสถูกปรับขนาดโดยไม่มีการตัดทอน
ถ้า ($w_src==$h_src)
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src);
$วันที่=เวลา(); //คำนวณเวลาปัจจุบัน
imagejpeg($dest, $path_to_90_directory.$date".jpg");//บันทึกรูปภาพในรูปแบบ jpg ไปยังโฟลเดอร์ที่ต้องการ โดยชื่อจะเป็นเวลาปัจจุบัน สร้างขึ้นเพื่อป้องกันไม่ให้อวตารมีชื่อเหมือนกัน
//ทำไมต้องเป็น jpg? ใช้พื้นที่น้อยมาก + ภาพเคลื่อนไหวของภาพ GIF ซึ่งทำให้ผู้ใช้เสียสมาธิถูกทำลาย การอ่านความคิดเห็นของเขาไม่ใช่เรื่องน่ายินดีเมื่อคุณสังเกตเห็นการเคลื่อนไหวบางอย่างจากหางตาของคุณ
$avatar = $path_to_90_directory.$date".jpg";//ใส่พาธไปยังอวาตาร์ลงในตัวแปร
$delfull = $path_to_90_directory.$ชื่อไฟล์;
unlink ($delfull);//ลบรูปภาพต้นฉบับที่อัปโหลด เราไม่ต้องการมันอีกต่อไป ภารกิจคือการได้รับของจิ๋ว
}
อื่น
{
//ในกรณีที่รูปแบบไม่ตรงกัน ให้ส่งข้อความที่เกี่ยวข้อง
exit("รูปประจำตัวต้องอยู่ในรูปแบบ JPG, GIF หรือ PNG");
}
//สิ้นสุดกระบวนการโหลดและกำหนดที่อยู่ของตัวแปร $avatar ที่โหลด ava
}



// เพิ่มใหม่ ********************************************** **
// ถัดไปคือทุกอย่างจากส่วนแรกของบทความ แต่คุณต้องเพิ่มการเปลี่ยนแปลงในการสืบค้นฐานข้อมูล
//เชื่อมต่อกับฐานข้อมูล
// ตรวจสอบการมีอยู่ของผู้ใช้ที่มีการเข้าสู่ระบบเดียวกัน
$result = mysql_query("เลือก id จากผู้ใช้ WHERE login="$login"",$db);
ถ้า (!empty($myrow["id"])) (
exit("ขออภัย ข้อมูลเข้าสู่ระบบที่คุณป้อนได้ลงทะเบียนไว้แล้ว กรุณาป้อนข้อมูลเข้าสู่ระบบอื่น");
}
// หากไม่เป็นเช่นนั้น ให้บันทึกข้อมูล
$result2 = mysql_query("INSERT INTO users (login,password,avatar) VALUES("$login","$password","$avatar")");
//ตรวจสอบว่ามีข้อผิดพลาดหรือไม่
ถ้า ($result2=="TRUE")
{
echo "คุณลงทะเบียนสำเร็จแล้ว! ตอนนี้คุณสามารถเข้าสู่เว็บไซต์ หน้าแรก";
}
อื่น(
echo "เกิดข้อผิดพลาด! คุณยังไม่ได้ลงทะเบียน";
}
?>

4. คุณต้องเพิ่มหนึ่งตารางลงในฐานข้อมูลเดียวกัน มันจะจัดเก็บที่อยู่ IP ที่เกิดข้อผิดพลาดเมื่อเข้าสู่ระบบ ด้วยวิธีนี้เราสามารถจำกัดการเข้าถึงผู้ที่ทำผิดพลาดมากกว่าสามครั้งติดต่อกันได้ประมาณ 15 นาที ฉันคิดว่าโปรแกรมที่เลือกรหัสผ่านจะต้องแก้ไขเป็นเวลานาน
ไปที่ phpmyadmin และสร้างตารางใหม่ที่มี 3 ฟิลด์:


ไอพี - ที่อยู่ IP
วันที่ - วันที่เข้าสู่ระบบไม่สำเร็จในช่วง 15 นาทีสุดท้ายสำหรับผู้ใช้ที่มี ip นี้ col - จำนวนข้อผิดพลาดในช่วง 15 นาทีที่ผ่านมาสำหรับผู้ใช้ที่มี IP นี้
ยอดเยี่ยม! เสร็จแล้ว เรามาเปลี่ยนไฟล์การเข้าสู่ระบบและการยืนยันรหัสผ่านกันดีกว่า เพราะตอนนี้รหัสผ่านของเราได้รับการเข้ารหัสแล้ว เปิด testreg.php และลบทุกอย่างนอกเหนือจากการลบช่องว่างออกจากข้อมูลเข้าสู่ระบบและรหัสผ่าน ต่อไปเราจะเพิ่มรหัสต่อไปนี้:

//ลบช่องว่างเพิ่มเติม
$login = ตัด($login);
$password = ตัด($password);

// แทนที่ด้วยอันใหม่ ******************************************* *******
//เชื่อมต่อกับฐานข้อมูล
include("bd.php");// ไฟล์ bd.php จะต้องอยู่ในโฟลเดอร์เดียวกันกับไฟล์อื่นๆ ทั้งหมด หากไม่เป็นเช่นนั้น ให้เปลี่ยนพาธ
// มินิตรวจสอบการเลือกรหัสผ่าน
$ip=getenv("HTTP_X_FORWARDED_FOR");
if (empty($ip) || $ip=="unknown") ( $ip=getenv("REMOTE_ADDR"); )//แยก ip
mysql_query ("ลบจาก oshibka WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(date) > 900");//ลบที่อยู่ IP ของผู้ใช้ที่ทำผิดพลาดเมื่อเข้าสู่ระบบหลังจาก 15 นาที
$result = mysql_query("SELECT col FROM oshibka WHERE ip="$ip"",$db); // ดึงข้อมูลจำนวนครั้งในการเข้าสู่ระบบที่ไม่สำเร็จจากฐานข้อมูลในช่วง 15 ครั้งล่าสุดสำหรับผู้ใช้ที่มี IP ที่กำหนด
$myrow = mysql_fetch_array($ผลลัพธ์);
ถ้า ($myrow["col"] > 2) (
//หากมีข้อผิดพลาดมากกว่าสองรายการ เช่น สามรายการ เราจะส่งข้อความแจ้ง
exit("คุณป้อนชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง 3 ครั้ง โปรดรอ 15 นาทีก่อนลองอีกครั้ง");
}
$password = md5($password);//เข้ารหัสรหัสผ่าน
$password = strrev($password);// เพื่อความน่าเชื่อถือ ให้เพิ่ม Reverse
$password = $password"b3p6f";
//คุณสามารถเพิ่มตัวละครของคุณเองสองสามตัวตามรสนิยมของคุณได้ เช่น โดยการป้อน "b3p6f" หากรหัสผ่านนี้ถูกแฮ็กโดยใช้กำลังดุร้ายบนเซิร์ฟเวอร์ md5 เดียวกัน เห็นได้ชัดว่าไม่มีอะไรดีเกิดขึ้น แต่ฉันแนะนำให้คุณใส่อักขระอื่น ๆ อาจจะอยู่ต้นบรรทัดหรือตรงกลาง
//ในกรณีนี้จำเป็นต้องเพิ่มความยาวของฟิลด์รหัสผ่านในฐานข้อมูล รหัสผ่านที่เข้ารหัสอาจมีขนาดใหญ่กว่ามาก

$result = mysql_query("SELECT * FROM users WHERE เข้าสู่ระบบ="$login" AND รหัสผ่าน="$password"",$db); //ดึงข้อมูลจากฐานข้อมูลทั้งหมดเกี่ยวกับผู้ใช้ด้วยการเข้าสู่ระบบและรหัสผ่านที่ป้อน
$myrow = mysql_fetch_array($ผลลัพธ์);
ถ้า (ว่าง($myrow["id"]))
{
//หากไม่มีผู้ใช้ที่มีการเข้าสู่ระบบและรหัสผ่านที่ป้อน
// เราบันทึกว่า ip นี้ไม่สามารถเข้าสู่ระบบได้
$select = mysql_query("SELECT ip FROM oshibka WHERE ip="$ip"");
$tmp = mysql_fetch_row($เลือก);
if ($ip == $tmp) (//ตรวจสอบว่าผู้ใช้อยู่ในตาราง "oshibka" หรือไม่
$result52 = mysql_query("เลือกคอลัมน์จาก oshibka WHERE ip="$ip"",$db);
$myrow52 = mysql_fetch_array($ผล52);
$col = $myrow52 + 1;//เพิ่มความพยายามในการเข้าสู่ระบบที่ไม่สำเร็จอีกครั้งหนึ่ง
mysql_query("ข้อผิดพลาดการอัปเดต SET col=$col,date=NOW() WHERE ip="$ip"");
}
อื่น(
mysql_query("INSERT INTO oshibka (ip,date,col) VALUES ("$ip",NOW(),"1")");
//หากไม่มีข้อผิดพลาดในช่วง 15 นาทีที่ผ่านมา ให้แทรกรายการใหม่ลงในตาราง "oshibka"
}

exit("ขออภัย ชื่อผู้ใช้หรือรหัสผ่านที่คุณป้อนไม่ถูกต้อง");
}
อื่น(
nbsp; //หากรหัสผ่านตรงกัน เราจะเปิดเซสชันสำหรับผู้ใช้! ขอแสดงความยินดีด้วย เขาเข้าแล้ว!
$_SESSION["รหัสผ่าน"]=$myrow["รหัสผ่าน"];
$_SESSION["login"]=$myrow["login"];
$_SESSION["id"]=$myrow["id"];//ข้อมูลนี้ถูกใช้บ่อยมาก ดังนั้นผู้ใช้ที่เข้าสู่ระบบจะ “นำติดตัวไปด้วย”

//ต่อไปเราจะบันทึกข้อมูลในคุกกี้สำหรับการเข้าสู่ระบบครั้งต่อไป
//ความสนใจ!!! ดำเนินการนี้ตามดุลยพินิจของคุณเนื่องจากข้อมูลถูกเก็บไว้ในคุกกี้โดยไม่มีการเข้ารหัส
ถ้า ($_POST["บันทึก"] == 1) (
//หากผู้ใช้ต้องการให้ข้อมูลของเขาถูกบันทึกไว้สำหรับการเข้าสู่ระบบครั้งต่อไป เราจะบันทึกไว้ในคุกกี้ของเบราว์เซอร์ของเขา
setcookie("เข้าสู่ระบบ", $_POST["เข้าสู่ระบบ"], เวลา()+9999999);
setcookie("รหัสผ่าน", $_POST["รหัสผ่าน"], เวลา()+9999999);
}}
เสียงสะท้อน " ";//เราเปลี่ยนเส้นทางผู้ใช้ไปยังหน้าหลัก ซึ่งเราจะแจ้งให้เขาทราบเมื่อเข้าสู่ระบบสำเร็จ
?>

5. เราจะเปลี่ยนหน้าหลักโดยสมบูรณ์ จำเป็นต้องแสดงรูปประจำตัวของผู้ใช้ แสดงลิงก์เพื่อออกจากบัญชี และเพิ่มช่องทำเครื่องหมายเพื่อจำรหัสผ่านเมื่อเข้าสู่ระบบ
Index.php

// ขั้นตอนทั้งหมดทำงานในเซสชัน เป็นที่เก็บข้อมูลของผู้ใช้ในขณะที่เขาอยู่ในไซต์ มันสำคัญมากที่จะเปิดตัวตั้งแต่ต้นหน้า!!!
session_start();
include("bd.php");// ไฟล์ bd.php จะต้องอยู่ในโฟลเดอร์เดียวกันกับไฟล์อื่นๆ ทั้งหมด หากไม่เป็นเช่นนั้น ให้เปลี่ยนพาธ
if (!empty($_SESSION["login"]) และ !empty($_SESSION["password"]))
{
//หากมีการเข้าสู่ระบบและรหัสผ่านในเซสชัน ให้ตรวจสอบและดึงข้อมูลประจำตัว
$เข้าสู่ระบบ = $_SESSION["เข้าสู่ระบบ"];
$รหัสผ่าน = $_SESSION["รหัสผ่าน"];
$result = mysql_query("SELECT id,avatar จากผู้ใช้ WHERE เข้าสู่ระบบ="$login" และรหัสผ่าน="$password"",$db);
$myrow = mysql_fetch_array($ผลลัพธ์);
//ดึงข้อมูลผู้ใช้ที่จำเป็น
}
?>


หน้าแรก


หน้าแรก

if (!isset($myrow["avatar"]) หรือ $myrow["avatar"]=="") (
//ตรวจสอบว่าข้อมูลผู้ใช้ถูกแยกออกจากฐานข้อมูลหรือไม่ ถ้าไม่เช่นนั้น แสดงว่าเขาไม่ได้เข้าสู่ระบบ หรือรหัสผ่านในเซสชันไม่ถูกต้อง เราแสดงหน้าต่างเข้าสู่ระบบ แต่เราจะไม่แสดงให้คนที่เข้ามาเขาไม่ต้องการอีกต่อไป
พิมพ์<<


ที่นี่;

If (isset($_COOKIE["login"])) //มีตัวแปรที่มีการล็อกอินใน COOKIE หรือไม่ ควรเป็นเช่นนั้นหากผู้ใช้คลิกช่องทำเครื่องหมาย "จดจำฉัน" ระหว่างการเข้าสู่ระบบครั้งก่อน
{
//ถ้าใช่ ให้ใส่ค่าลงในแบบฟอร์ม ในกรณีนี้ ผู้ใช้จะพบว่ามีการป้อนข้อมูลเข้าสู่ระบบของเขาในคอลัมน์ที่ต้องการแล้ว
echo " value="".$_COOKIE["เข้าสู่ระบบ"]"">";
}

พิมพ์<<




ที่นี่;

If (isset($_COOKIE["password"]))//ว่ามีตัวแปรที่มีรหัสผ่านอยู่ใน COOKIE หรือไม่ ควรเป็นเช่นนั้นหากผู้ใช้คลิกช่องทำเครื่องหมาย "จดจำฉัน" ระหว่างการเข้าสู่ระบบครั้งก่อน
{
//ถ้าใช่ ให้ใส่ค่าลงในแบบฟอร์ม ในกรณีนี้ ผู้ใช้จะพบว่ารหัสผ่านของเขาถูกป้อนลงในคอลัมน์ที่ต้องการแล้ว
echo " value="".$_COOKIE["รหัสผ่าน"]"">";
}

พิมพ์<<



จำฉันไว้.






ลงทะเบียน



คุณเข้าสู่ระบบในฐานะแขก

ที่นี่;
}
อื่น
{
//หากเข้าสู่ระบบสำเร็จ ผู้ใช้จะได้รับทุกสิ่งด้านล่างระหว่างเครื่องหมายดอกจัน

พิมพ์<<
คุณเข้าสู่ระบบไซต์ด้วย $_SESSION (ออก)


ลิงค์นี้มีให้สำหรับผู้ใช้ที่ลงทะเบียนเท่านั้น

อวตารของคุณ:




ที่นี่;

//************************************************************************************
//หากเข้าสู่ระบบสำเร็จ ผู้ใช้จะได้รับทุกสิ่งที่อยู่เหนือระหว่างเครื่องหมายดอกจัน
}
?>



6. จำเป็นต้องทำให้ผู้ใช้ที่เข้าสู่ระบบสามารถออกจากระบบได้ มีลิงค์ให้ออกจากหน้าหลักอยู่แล้ว แต่ไฟล์นี้ยังไม่มีอยู่ เรามาสร้างไฟล์ใหม่กันดีกว่า exit.phpด้วยรหัส:

session_start();
ถ้า (ว่างเปล่า($_SESSION["เข้าสู่ระบบ"]) หรือว่างเปล่า($_SESSION["รหัสผ่าน"]))
{
//หากไม่มีเซสชันที่มีการเข้าสู่ระบบและรหัสผ่าน แสดงว่าไฟล์นี้ถูกเข้าถึงโดยผู้ใช้ที่ไม่ได้เข้าสู่ระบบ เขาไม่อยู่ที่นี่ เราออกข้อความแสดงข้อผิดพลาดและหยุดสคริปต์
exit ("การเข้าถึงหน้านี้ทำได้เฉพาะผู้ใช้ที่ลงทะเบียนแล้วเท่านั้น หากคุณได้ลงทะเบียนแล้วให้เข้าสู่ระบบไซต์โดยใช้ชื่อผู้ใช้และรหัสผ่านของคุณ
หน้าแรก");
}

unset($_SESSION["รหัสผ่าน"]);
unset($_SESSION["เข้าสู่ระบบ"]);
unset($_SESSION["id"]);// ทำลายตัวแปรในเซสชัน
ออก(" ");
// ส่งผู้ใช้ไปที่หน้าหลัก
?>

นั่นคือทั้งหมด! สนุกกับมันเพื่อสุขภาพของคุณ! ขอให้โชคดี!



ฉันตัดสินใจอุทิศบทความนี้ให้กับทุกคนที่กำลังเริ่มเรียน PHPเพราะทุกคนได้รับข้อผิดพลาดเดียวกัน ฉันไม่รู้ว่าทำไมพวกเขาถึงอนุญาตแต่พวกเขาก็ทำมันตลอดเวลา ฉันจะพูดโดยไม่พูดเกินจริงว่าฉันได้รับคำถามประมาณร้อยข้อแล้วซึ่งจะมีคำตอบในบทความนี้ ข้อผิดพลาดนี้เกี่ยวข้องกับ เปิดตัวไม่ถูกต้องใน PHP.

อย่างที่ผู้เริ่มต้นเกือบทุกคนทำ:

  1. สร้าง ไฟล์ PHP(บางครั้ง ไฟล์ HTMLแต่สิ่งเหล่านี้คือผู้เริ่มต้นมากที่สุด)
  2. เขียนมันลงไปตรงนั้น รหัสพีเอชพี.
  3. และพวกเขาก็ดับเบิลคลิกเพื่อเปิดในเบราว์เซอร์

ผลลัพธ์ก็คือเบราว์เซอร์เปิดโค้ด แต่ไม่รีบดำเนินการ มันเพียงแสดงโค้ดบางส่วนเป็นข้อความธรรมดา หรือไม่แสดงอะไรเลย

ข้อผิดพลาดของวิธีนี้คือนักเรียนไม่เข้าใจสิ่งนั้น PHP เป็นภาษาฝั่งเซิร์ฟเวอร์ไม่ใช่ลูกค้า นี้ HTMLหรือ จาวาสคริปต์ภาษาไคลเอ็นต์ แน่นอนว่าเบราว์เซอร์จะประมวลผลภาษาเหล่านี้ แต่สำหรับ PHP ต้องการล่าม- และล่ามนี้เปิดตัวโดยเซิร์ฟเวอร์

บทสรุป: คุณต้องเรียกใช้โค้ด PHP ผ่านเซิร์ฟเวอร์- ถ้าคุณมี เดนเวอร์นั่นคือผ่านทางเขา

ตอนนี้, วิธีรันโค้ด PHP ผ่าน Denwer- ผู้เริ่มต้นส่วนใหญ่ทำผิดพลาดแบบเดิมอีกครั้ง ดูเหมือนว่าพวกเขาจะทำทุกอย่างอย่างถูกต้อง โดยสร้างโฟลเดอร์ที่จำเป็น และเริ่มต้นใหม่ เดนเวอร์และดูเหมือนว่าสิ่งที่เหลืออยู่คือการเรียกไฟล์อย่างถูกต้อง แต่ที่นี่มีข้อผิดพลาดอีกครั้ง: พวกเขาเปิดไฟล์อีกครั้งในเบราว์เซอร์ (ไม่ว่าจะโดยการลากไฟล์ลงในเบราว์เซอร์หรือโดยการดับเบิลคลิก) ซึ่งสามารถมองเห็นได้ง่ายจากที่อยู่ในแถบที่อยู่ จะมีบางอย่างเช่น: ไฟล์:///Z:\home\mysite.local\www\script.php.

และคุณต้องเปิดใช้งานอย่างถูกต้อง ป้อนที่อยู่โฮสต์เสมือน- นั่นคือโดยตรงในแถบที่อยู่ของเบราว์เซอร์ให้ป้อน: http://mysite.local/script.php- เพียงเท่านี้สคริปต์ก็จะทำงานและแสดงผลลัพธ์

ฉันหวังว่าบทความนี้จะช่วยผู้เริ่มต้นหลายคนที่เพิ่งเริ่มเรียน PHP.

เนื้อหา

เช่น

ereg - ค่าที่จับคู่ของนิพจน์ทั่วไป
คำอธิบาย
int ereg (รูปแบบสตริง, สตริงสตริง, อาร์เรย์ );

ค้นหาค่าที่จับคู่ เชือกในนิพจน์ทั่วไปที่ระบุใน ลวดลาย .

หากพบค่าที่จับคู่สำหรับสตริงย่อยในวงเล็บ ลวดลายและฟังก์ชันถูกเรียกด้วยอาร์กิวเมนต์ที่สาม regsจากนั้นค่าที่จับคู่จะถูกเก็บไว้ในองค์ประกอบ regs- $regs จะมีสตริงย่อยที่ขึ้นต้นด้วยวงเล็บซ้ายตัวแรก เชือก .

$regs จะมีสตริงย่อยที่ขึ้นต้นด้วยวงเล็บที่สอง ฯลฯ $regs จะมีสำเนา

การค้นหาจะคำนึงถึงขนาดตัวพิมพ์

ฟังก์ชันจะคืนค่าเป็นจริงหากพบค่าที่ตรงกันสำหรับรูปแบบในสตริง หรือคืนค่าเป็นเท็จหากไม่พบค่าที่ตรงกันหรือมีข้อผิดพลาดเกิดขึ้น

รหัสต่อไปนี้แยกวันที่ในรูปแบบ ISO และส่งออกในรูปแบบ DD.MM.YYYY:

ตัวอย่างที่ 1. ตัวอย่าง ereg()

ถ้า (ereg("((4))-((1,2))-((1,2))", $date, $regs)) ( echo "$regs.$regs.$regs"; ) อื่น ๆ ( echo "รูปแบบวันที่ไม่ถูกต้อง: $date"; )

ereg_แทนที่
คำอธิบาย
ereg_replace -- แทนที่นิพจน์ทั่วไป

สตริง ereg_replace (รูปแบบสตริง, การแทนที่สตริง, สตริงสตริง); เชือกฟังก์ชั่นนี้จะสแกน ลวดลายถึงค่าที่จับคู่ k จากนั้นแทนที่ข้อความที่พบด้วย .

การทดแทน ลวดลายถ้า จากนั้นแทนที่ข้อความที่พบด้วยมีสตริงย่อยอยู่ในวงเล็บแล้ว อาจมีสตริงย่อยเช่น \\ตัวเลข

ซึ่งจะถูกแทนที่ด้วยข้อความที่ตรงกับสตริงย่อยที่เป็นตัวเลขในวงเล็บ \\0 จะประมวลผลเนื้อหาทั้งหมดของสตริง สามารถใช้สตริงย่อยได้สูงสุด 9 รายการ วงเล็บสามารถจัดกลุ่มได้ ในกรณีนี้จะนับวงเล็บเปิด ตัวอย่างเช่น รหัสต่อไปนี้จะพิมพ์ "นี่คือการทดสอบ" สามครั้ง:

ตัวอย่างที่ 1. ereg_replace()

$string = "นี่คือการทดสอบ"; echo ereg_replace(" คือ", "เป็น", $string); echo ereg_replace("()is", "\\1was", $string); echo ereg_replace("(()is)", "\\2was", $string);

ดูเพิ่มเติม , , และ

เอเรกี
คำอธิบาย
eregi - ค้นหาค่าที่จับคู่โดยคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ในนิพจน์ทั่วไป

int eregi (รูปแบบสตริง, สตริงสตริง, อาร์เรย์ );

eregi_แทนที่
คำอธิบาย
eregi_replace -- การแทนที่นิพจน์ทั่วไปที่ไม่คำนึงถึงขนาดตัวพิมพ์

string eregi_replace (รูปแบบสตริง, การแทนที่สตริง, สตริงสตริง);

แยก
คำอธิบาย
แยก -- แยกสตริงออกเป็นอาร์เรย์โดยใช้นิพจน์ทั่วไป

การแยกอาร์เรย์ (รูปแบบสตริง, สตริงสตริง, int ); ลวดลาย- หากเกิดข้อผิดพลาด ฟังก์ชันจะส่งกลับค่าเท็จ

หากต้องการรับ 5 ฟิลด์แรกจากบรรทัดใน /etc/passwd:

จะมีการออก.

คุณลักษณะนี้สามารถใช้เพื่อดำเนินการเปรียบเทียบโดยคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ในผลิตภัณฑ์ที่สนับสนุนเฉพาะนิพจน์ที่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่

 


อ่าน:


ใหม่

วิธีฟื้นฟูรอบประจำเดือนหลังคลอดบุตร:

วิธียกเลิกการสมัครสมาชิก Megogo บนทีวี: คำแนะนำโดยละเอียด วิธียกเลิกการสมัครสมาชิก Megogo

วิธียกเลิกการสมัครสมาชิก Megogo บนทีวี: คำแนะนำโดยละเอียด วิธียกเลิกการสมัครสมาชิก Megogo

ลักษณะและข้อดีของบริการ Megogo หนึ่งในบริการวิดีโอที่ใหญ่ที่สุดในยุโรปตะวันออกและ CIS คือ Megogo แค็ตตาล็อกประกอบด้วยมากกว่า 80,000...

วิธีแบ่งพาร์ติชันดิสก์โดยติดตั้ง Windows โดยไม่สูญเสียข้อมูล แบ่งพาร์ติชันดิสก์ 7

วิธีแบ่งพาร์ติชันดิสก์โดยติดตั้ง Windows โดยไม่สูญเสียข้อมูล แบ่งพาร์ติชันดิสก์ 7

การแบ่งฮาร์ดไดรฟ์ออกเป็นพาร์ติชั่นโดยใช้ Windows7 การแบ่งพาร์ติชั่นไดรฟ์ C:\ ใน Win7 เมื่อซื้อคอมพิวเตอร์หรือแล็ปท็อปเครื่องใหม่ที่มี...

เหตุใดผู้จัดพิมพ์จึงไม่สามารถแก้ไขทุกหน้าได้

เหตุใดผู้จัดพิมพ์จึงไม่สามารถแก้ไขทุกหน้าได้

ผู้ใช้ที่ทำงานใน Microsoft Word บ่อยครั้งอาจประสบปัญหาบางอย่างเป็นครั้งคราว เราได้หารือเกี่ยวกับวิธีแก้ปัญหากับหลายๆ คนแล้ว...

รหัสโปรโมชั่น Pandao สำหรับคะแนน

รหัสโปรโมชั่น Pandao สำหรับคะแนน

บางครั้งเมื่อคุณพยายามเข้าสู่ร้านค้าอย่างเป็นทางการของยักษ์ใหญ่ดิจิทัล Play Market จะเขียนเพื่อเปิดใช้งานรหัสส่งเสริมการขาย เพื่อให้ได้ความครอบคลุม...

ฟีดรูปภาพ อาร์เอสเอส