|
|
|
อยากทราบวิธีกรองเงื่อนไขเฉพาะ querystring ที่ต้องการเท่านั้น |
|
|
|
|
|
|
|
ง่ายๆ ครับใช้จำนวนของ $_GET เป็นเงื่อนไขหลัก
$num_get_vars = count($_GET);
if (($num_get_vars === 2 && isset($_GET['cid'], $_GET['page'])) // ถ้ามีสองตัว ต้องเป็น cid และ page เท่านั้น
|| ($num_get_vars === 1 && isset($_GET['cid'])) // หรือถ้ามีแค่ตัวเดียว ต้องเป็น cid เท่านั้น
) {
// เข้าเงื่อนไขนี้คือมีเฉพาะตัวกรองหมวดหมู่ และเลขหน้าเท่านั้น อย่างอื่น ห้าม!!
} else { // ถ้ามันมีมากกว่าสองตัวหรือชื่อไม่ตรงตามที่กำหนด ก็ถือไม่ใช่เงื่อนไขที่ต้องการแน่นอน
// error!!!
}
|
|
|
|
|
Date :
2014-05-29 08:43:47 |
By :
. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
หรือถ้าอนุญาตให้ไม่ต้องมีตัวกรองเลยก็เพิ่มไปอีกอัน
Code (PHP)
$num_get_vars = count($_GET);
if (!$num_get_vars // ถ้าไม่มีตัวกรองเลยก็ถือว่าผ่าน
|| ($num_get_vars === 2 && isset($_GET['cid'], $_GET['page'])) // ถ้ามีสองตัว ต้องเป็น cid และ page เท่านั้น
|| ($num_get_vars === 1 && isset($_GET['cid'])) // หรือถ้ามีแค่ตัวเดียว ต้องเป็น cid เท่านั้น
) {
// เข้าเงื่อนไขนี้คือมีเฉพาะตัวกรองหมวดหมู่ และเลขหน้าเท่านั้น อย่างอื่น ห้าม!!
} else { // ถ้ามันมีมากกว่าสองตัวหรือชื่อไม่ตรงตามที่กำหนด ก็ถือไม่ใช่เงื่อนไขที่ต้องการแน่นอน
// error!!!
}
|
|
|
|
|
Date :
2014-05-29 08:47:16 |
By :
. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แจ่มจันทร์คับ ผมนึกออกแต่เขียนฟังก์ชั่นแยกเช็คแบบแม่นๆไปเลย แต่มันหลายบรรทัด
เลยคิดว่าน่าจะมีคนรู้ฟังก์ชั่นกรองเฉพาะ array key ที่ต้องการเท่านั้น มีเกินกว่านั้นเป็น false
แต่มาแบบนี้ก็ work เหมือนกัน
|
|
|
|
|
Date :
2014-05-29 14:21:26 |
By :
mr.v |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถ้าอยากได้บรรทัดเดียว ใช้ regular expression ช่วยได้ครับ
Code (PHP)
if (empty($_GET) || preg_match('/^(?>cid(?>\,page)?|(?>page\,)?cid)$/', implode(',', array_keys($_GET)))) {
// ok
} else {
// error
}
หรือจะ sort key ก่อน เพื่อให้ regex สั้นลง
ksort($_GET);
if (empty($_GET) || preg_match('/^cid(?>\,page)?$/', implode(',', array_keys($_GET)))) {
// ok
} else {
// error
}
|
|
|
|
|
Date :
2014-05-29 15:51:31 |
By :
. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
reg ผมกลัวมันไม่ชัวร์ เอาแบบด้านบนดีกว่า 555
|
|
|
|
|
Date :
2014-05-29 16:14:27 |
By :
mr.v |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ครับ แบบแรกดีกว่า เพราะเร็วกว่าด้วย แต่เห็นคุณต้องการสั้นๆ เลยลองเสนอครับ
ป.ล. regex มันก็ชัวร์นะครับ ถ้าเขียนถูกไม่มีช่องโหว่
|
|
|
|
|
Date :
2014-05-29 16:32:44 |
By :
. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 02
|