[PHP] สอบถามการ Insert หลังข้อความ =

ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา [PHP] สอบถามการ Insert หลังข้อความ =

[PHP] สอบถามการ Insert หลังข้อความ =

$text [
=ST0001
=ดินสอ
=แท่ง
=20
]
ขอความช่วยเหลือครับ อยากให้ Insert ข้อความหลัง = ลงใน MySQL ตามลำดับ


ขอบคุณสำหรับข้อมูลดีๆ ครับ



Worawuth 49.49.26.xxx 11-05-2022 00:11:46

คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ


  • ( หรือ เข้าใช้งานผ่าน Social Login )

 ความคิดเห็นที่ 1
แนวทางอย่างง่ายน่าจะประมาณนี้ แต่ถ้าอยากลดขั้นตอน ข้อความก่อนส่ง ตัด = ออกจะดีที่สุด

INSERT INTO tb1
    (`item`, `name`, `unti`, `qty`)
VALUES
    (REPLACE($text[0],'=',''),
    REPLACE($text[1],'=',''),
    REPLACE($text[2],'=',''),
    REPLACE($text[3],'=',''))
;


บทความแนะนำที่เกี่ยวข้อง
ทบทวนการตัดข้อความด้วย PHPอ่าน 69,371
ninenik 223.24.92.xxx 11-05-2022
 ความคิดเห็นที่ 2
ขอบคุณแอดมิน ninenik ครับ พรุ้งนี้ขอสนับสนุนเว็บไซต์นะครับ


tt1652201921 49.49.3.xxx 11-05-2022 23:30
 ความคิดเห็นที่ 3
ถ้าจะให้ตัด = ก่อน INSERT แล้วเป็นตัวแปรใหม่
เช่น $test = =ดินสอ =แท่ง =20;

แล้วเป็นตัวแปร
item[0] = ดินสอ;
item[1] = แท่ง;
item[2] = 20;

แล้วค่อย INSERT
INSERT INTO tb1
    (`item`, `name`, `unti`, `qty`)
VALUES
    ($text[0], $text[1], $text[2])
;


tt1652201921 49.49.3.xxx 13-05-2022 22:21
 ความคิดเห็นที่ 4
$text = [
"=ST0001",
"=ดินสอ",
"=แทง",
"=20"
];
$text = array_map(function($arr){
	return str_replace("=","",$arr);
},$text);
print_r($text); // test print value

output:
Array
(
    [0] => ST0001
    [1] => ดินสอ
    [2] => แทง
    [3] => 20
)


บทความแนะนำที่เกี่ยวข้อง
ทบทวนการตัดข้อความด้วย PHPอ่าน 69,371
ninenik 223.24.164.xxx 13-05-2022
 ความคิดเห็นที่ 5
$text = [
"=ST0001",
"=ดินสอ",
"=แทง",
"=20"
];
$text = array_map(function($arr){
    return str_replace("=","",$arr);
},$text);
print_r($text); // test print value


แล้วถ้า array ไหนไม่มี = ไม่ต้องแสดงทำได้ไหมครับ
ขอบคุณครับ



tt1652201921 49.49.3.xxx 14-05-2022 02:55
 ความคิดเห็นที่ 6
$text = [
"=ST0001",
"ดินสอ",
"=แทง",
"=20"
];
$text = array_map(function($arr){
    return str_replace("=","",$arr);
},$text);
print_r($text); // test print value


เช่นถ้า ดินสอ ไม่มี = ไม่ต้องแสดง

Array
(
    [0] => ST0001
    [1] => แทง
    [2] => 20
)

ขอบคุณครับที่แนะนำครับ


tt1652201921 49.49.3.xxx 14-05-2022 02:57
 ความคิดเห็นที่ 7
สามารถสร้าง หรือกำหนดเงื่อนไขเข้าไปในฟังก์ชั่นที่ใช้ร่วมกับ array_map ได้ เช่น
ถ้าต้องการให้กรณี ไม่มีเครื่องหมาย เท่ากับ ให้ส่งค่าออกมาเป็น ค่าว่างแทน ก็จะเป็นดังนี้
 
$text = array_map(function($arr){
	if(preg_match('/=/',$arr)){ // มีเครื่องหมายเท่ากับ
		return str_replace("=","",$arr);	
	}else{
    	return "";	
	}
},$text);
 
สังเกตว่า key จะมีรูปแบบเดิม เพียงแต่ ค่า key เท่ากับ 1 จะเป็นค่าว่าง
 
Array
(
    [0] => ST0001
    [1] => 
    [2] => แทง
    [3] => 20
)
 
แต่ถ้าเราต้องการให้ key เปลี่ยนแปลงไปด้วย และเรียงลำดับใหม่  ก็จะเป็น
 
$text = array_values(array_filter($text, function($arr){
	return preg_match('/=/',$arr);
}));
$text = array_map(function($arr){
	return str_replace("=","",$arr);	
},$text);
 
สังเกตว่า จะมีการจัดลำดับใหม่
 
Array
(
    [0] => ST0001
    [1] => แทง
    [2] => 20
)
 
เรื่องของ key มีความสำคัญ และต้องสัมพันธ์กับการนำไปใช้งาน
* array_map วนลูปจัดรูปแบบรายการในอาเรย์ทั้งหมด
* array_filter วนลูปกรองเอาเฉพาะค่าที่เข้าเงื่อนไข ค่าที่ไม่เข้าเงื่อนไขจะถูกตัดออก
* array_values ดึงเฉพาะค่าของอาเรย์มาสร้างอาเรย์ใหม่ ทำให้ key เริ่มต้นจาก 0


บทความแนะนำที่เกี่ยวข้อง
อักขระคั่น (Delimiters) ในการใช้งาน Regular Expressions ของ PHPอ่าน 15,674
การใช้งาน Meta characters ใน Regular Expressions ของ PHPอ่าน 12,499
ninenik 223.24.159.xxx 14-05-2022
 ความคิดเห็นที่ 8
สอบถามเพิ่มเติมครับ input text ในที่นี้ถ้าเป็น textarea เราจะจัดให้มาเป็น array ได้ไหมครับ
พอดีผมทำบอทไลน์แล้ว type text น่าจะเป็นรูปบบเดียวกับ textarea เลยว่า พิมพ์ = แล้วให้แยกเป็น array แทน


Worawuth 223.206.212.xxx 19-05-2022 16:16
 ความคิดเห็นที่ 9


<?php
$text = explode("\r\n",$_POST['text']); //แยกการขึ้นบรรทัดใหม่
//  $text = preg_split("/\r\n|[\r\n]/", $_POST['text']); //แยกการขึ้นบรรทัดใหม่
print_r($text);
 ?>

หรือแยกด้วยเครื่องหมาย เท่ากับ


<?php
$text = explode("=",$_POST['text']); //แยกด้วยเครื่องหมายเท่ากับ
$text = array_values(array_filter($text));
print_r($text);
 ?>

array_filter จะกรองตัวที่เป็นค่าว่างออก
array_values จะสร้าง array ที่มี key เริ่มต้นที่ 0



ninenik 223.24.190.xxx 20-05-2022
 ความคิดเห็นที่ 10
ผมสามารถเรียกใช้ explode 2 รอบได้ไหมครับ


Worawuth 49.49.6.xxx 25-05-2022 21:33
1






เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ