หัวข้อ: ช่วยด้วยคับมันไม่ตรวจ duplicate ใน ฐานข้อมูล เริ่มหัวข้อโดย: Mrpoohling ที่ 16 กุมภาพันธ์ 2017, 18:13:02 ผมทำ form textarea โดยจะให้มัน insert แบบ Multi Line
เช่น OOOOOO,5555555 AAAAAAA,2222222 BBBBBBBB,2122221 CCCCCCC,5565656 เมื่อเพิ่มทีละ Line จะสามารถตรวจสอบ duplicate ใน ฐานข้อมูล ได้ แต่เมื่อ submit แบบ multi มันไม่ตรวจสอบให้ :'( --------------------------------------------------------------------------------------------------------------------- $addtext = $_POST['additem']; $lines = explode("\n", $addtext); $addtext= explode(',', $addtext); $info = mysql_real_escape_string($addtext[0]); $item = mysql_real_escape_string($addtext[1]); foreach($lines as $line) { list($info,$item) = explode(",", $line); $sql = "select * from data where item='$item' and user_name='$user_name'"; $db_query=mysql_query($sql); $num_rows=mysql_num_rows($db_query); if($num_rows != 0) { echo "item ซ้ำ"; } else { $insert ............................ ------------------------------------------------------------------------------------------------------------------------- รบกวนช่วยแนะนำหน่อยครับ :P :P ทำได้แล้วครับ โดยการเปลี่ยน $lines = explode("\n", $addtext); เป็น $lines = explode("\n", str_replace("\r", "", $addtext)); แทน งงแท้ :P :P :P ยังไงก็ขอ ขอบคุณทุกความเห็นนะครับ :wanwan017: หัวข้อ: Re: ช่วยด้วยคับมันไม่ตรวจ duplicate ใน ฐานข้อมูล เริ่มหัวข้อโดย: Sith9 ที่ 16 กุมภาพันธ์ 2017, 19:08:34 if num_rows > 0 ซ้ำ
หัวข้อ: Re: ช่วยด้วยคับมันไม่ตรวจ duplicate ใน ฐานข้อมูล เริ่มหัวข้อโดย: Mrpoohling ที่ 16 กุมภาพันธ์ 2017, 19:22:04 if num_rows > 0 ซ้ำ เหมือนกันกับอันนี้ครับ if($num_rows != 0) { หัวข้อ: Re: ช่วยด้วยคับมันไม่ตรวจ duplicate ใน ฐานข้อมูล เริ่มหัวข้อโดย: Sith9 ที่ 16 กุมภาพันธ์ 2017, 19:33:54 if num_rows > 0 ซ้ำ เหมือนกันกับอันนี้ครับ if($num_rows != 0) { จริงด้วย เขินเลย ขอโทษด้วยครับ :-[ ที่คิดตอนนี้คืออยากให้เช็คในส่วนของ query ว่าทำงานถูกต้องหรือเปล่า เพราะ num_rows อาจจะมีค่าเป็น false หัวข้อ: Re: ช่วยด้วยคับมันไม่ตรวจ duplicate ใน ฐานข้อมูล เริ่มหัวข้อโดย: Mrpoohling ที่ 16 กุมภาพันธ์ 2017, 19:37:27 if num_rows > 0 ซ้ำ เหมือนกันกับอันนี้ครับ if($num_rows != 0) { จริงด้วย เขินเลย ขอโทษด้วยครับ :-[ ที่คิดตอนนี้คืออยากให้เช็คในส่วนของ query ว่าทำงานถูกต้องหรือเปล่า เพราะ num_rows อาจจะมีค่าเป็น false ครับไม่เปนไร หาทางต่อไป :P :P :P :P หัวข้อ: Re: ช่วยด้วยคับมันไม่ตรวจ duplicate ใน ฐานข้อมูล เริ่มหัวข้อโดย: AbuseMan ที่ 16 กุมภาพันธ์ 2017, 20:16:30 อันนี้ขอแนะนำการนับจำนวนข้อมูลในฐานข้อมูล อยากให้ใช้แบบนี้มากกว่า
โค๊ด: $sql = 'SELECT COUNT(*) AS total_rows FROM table WHERE field = something'; หัวข้อ: Re: ช่วยด้วยคับมันไม่ตรวจ duplicate ใน ฐานข้อมูล เริ่มหัวข้อโดย: ten1312 ที่ 16 กุมภาพันธ์ 2017, 21:18:44 ผมมือใหม่แต่อยากแนะนำตามที่ผมรู้
รับค่ามาเก็บไว้แบบ array แล้วใช้ for วนลูปเอาได้ไหม เวลา where ก็ใช้ $ตัวแปร[$i] แบบนี้ หัวข้อ: Re: ช่วยด้วยคับมันไม่ตรวจ duplicate ใน ฐานข้อมูล เริ่มหัวข้อโดย: sputtaro ที่ 16 กุมภาพันธ์ 2017, 23:28:41 list($info,$item) = explode(",", $line);
ค่าที่ได้จาก $line ถูกแยกเก็บไว้ใน $info กับ $item แต่ เวลานำค่านี้ไปใส่ใน query คุณกลับใช้ item='$item' and user_name='$user_name' ผมเลยสงสัยว่า คุณเอา $user_name มาจากไหน หรือผมอาจเข้าใจผิดไปก็เป็นได้ เพราะคุณไม่ได้พูดถึงโค๊ดส่วนอื่นๆ แต่ถ้าผมไม่ได้เข้าใจผิด ลองแก้ไขดูครับ ในขั้นตอนสั่ง list($info,$item) = explode(",", $line); แลัว ลอง echo เพื่อดูค่าที่ได้ จากนั้นแก้ไข item='$item' and user_name='$user_name' ให้ถูกต้อง หวังว่าจะใช่นะ ************************ ขอเพิ่มอีกนิด คือ ตอนเขียนโค๊ดเพื่อทดสอบ คุณอาจใส่โค๊ดให้แสดง error ของ mysql ด้วยก็จะ ทำให้รู่สาเหตุได้ง่ายขึ้น เมือจะใช้งานจริง ค่อยลบออก หัวข้อ: Re: ช่วยด้วยคับมันไม่ตรวจ duplicate ใน ฐานข้อมูล เริ่มหัวข้อโดย: Mrpoohling ที่ 17 กุมภาพันธ์ 2017, 00:00:16 list($info,$item) = explode(",", $line); ค่าที่ได้จาก $line ถูกแยกเก็บไว้ใน $info กับ $item แต่ เวลานำค่านี้ไปใส่ใน query คุณกลับใช้ item='$item' and user_name='$user_name' ผมเลยสงสัยว่า คุณเอา $user_name มาจากไหน หรือผมอาจเข้าใจผิดไปก็เป็นได้ เพราะคุณไม่ได้พูดถึงโค๊ดส่วนอื่นๆ แต่ถ้าผมไม่ได้เข้าใจผิด ลองแก้ไขดูครับ ในขั้นตอนสั่ง list($info,$item) = explode(",", $line); แลัว ลอง echo เพื่อดูค่าที่ได้ จากนั้นแก้ไข item='$item' and user_name='$user_name' ให้ถูกต้อง หวังว่าจะใช่นะ ************************ ขอเพิ่มอีกนิด คือ ตอนเขียนโค๊ดเพื่อทดสอบ คุณอาจใส่โค๊ดให้แสดง error ของ mysql ด้วยก็จะ ทำให้รู่สาเหตุได้ง่ายขึ้น เมือจะใช้งานจริง ค่อยลบออก user_name มาจาก session และโค้สไม่มีเออเรอครับ ประเด็นคือ เมื่อเพิ่มทีละ Line จะสามารถตรวจสอบ duplicate ใน ฐานข้อมูล ได้ แต่เมื่อ submit แบบ multi มันไม่ตรวจสอบให้ :P :P :P หัวข้อ: Re: ช่วยด้วยคับมันไม่ตรวจ duplicate ใน ฐานข้อมูล เริ่มหัวข้อโดย: Mrpoohling ที่ 17 กุมภาพันธ์ 2017, 07:07:35 ทำได้แล้วครับ
โดยการเปลี่ยน $lines = explode("\n", $addtext); เป็น $lines = explode("\n", str_replace("\r", "", $addtext)); แทน งงแท้ :P :P :P ยังไงก็ขอ ขอบคุณทุกความเห็นนะครับ :wanwan017: หัวข้อ: Re: ช่วยด้วยคับมันไม่ตรวจ duplicate ใน ฐานข้อมูล เริ่มหัวข้อโดย: qawe89 ที่ 17 กุมภาพันธ์ 2017, 08:26:20 เข้ามาฟังด้วยครับ :wanwan017:
หัวข้อ: Re: ช่วยด้วยคับมันไม่ตรวจ duplicate ใน ฐานข้อมูล เริ่มหัวข้อโดย: f206cs ที่ 17 กุมภาพันธ์ 2017, 15:35:11 ทำได้แล้วครับ โดยการเปลี่ยน $lines = explode("\n", $addtext); เป็น $lines = explode("\n", str_replace("\r", "", $addtext)); แทน งงแท้ :P :P :P ยังไงก็ขอ ขอบคุณทุกความเห็นนะครับ :wanwan017: แหม่ เส้นผมบังภูเขา ปกติเวลากด enter ที่ keyboard มันไม่ได้มีแค่ \n แต่มันจะเป็น \n\r \n = ขึ้นบรรทัดใหม่ \r = เลื่อนเคอร์เซอร์ไปต้นบรรทัด ตอนแรกที่ใช้แค่ $lines = explode("\n", $addtext); ตัว \r มันยังอยู่ (เรามองไม่เห็น) ทีนี้เมื่อเอาไปใส่ในคำสั่ง sql มันก็เลยติด \r ไปด้วย แต่ในฐานข้อมูล คิดว่าไม่มี \r (อาจจะเป็นรายการที่ทดสอบ คีย์เข้าไปตรงๆ หรือคีย์เข้าไปแบบบรรทัดเดียว) มันก็เลยมองว่าตัวที่คีย์หลายบรรทัด ที่มี \r ซ่อนอยู่ กับตัวที่อยู่ในฐานข้อมูลซึ่งไม่มี \r เป็นคนละตัวกัน ก็เลยไม่ duplicate ครับ สรุปก็ประมาณนี้แหละครับ :wanwan003: หัวข้อ: Re: ช่วยด้วยคับมันไม่ตรวจ duplicate ใน ฐานข้อมูล เริ่มหัวข้อโดย: cloverink ที่ 17 กุมภาพันธ์ 2017, 18:34:58 ใช้ PHP_EOL ก็ได้ครับ ( eol = end of line )
explode(PHP_EOL, $x) ส่วน query ใช้ count(*) นะครับ เพราะ ถ้าใช้ num row bug แน่นอน เวลามี query error หัวข้อ: Re: ช่วยด้วยคับมันไม่ตรวจ duplicate ใน ฐานข้อมูล เริ่มหัวข้อโดย: Mrpoohling ที่ 17 กุมภาพันธ์ 2017, 19:30:44 ทำได้แล้วครับ โดยการเปลี่ยน $lines = explode("\n", $addtext); เป็น $lines = explode("\n", str_replace("\r", "", $addtext)); แทน งงแท้ :P :P :P ยังไงก็ขอ ขอบคุณทุกความเห็นนะครับ :wanwan017: แหม่ เส้นผมบังภูเขา ปกติเวลากด enter ที่ keyboard มันไม่ได้มีแค่ \n แต่มันจะเป็น \n\r \n = ขึ้นบรรทัดใหม่ \r = เลื่อนเคอร์เซอร์ไปต้นบรรทัด ตอนแรกที่ใช้แค่ $lines = explode("\n", $addtext); ตัว \r มันยังอยู่ (เรามองไม่เห็น) ทีนี้เมื่อเอาไปใส่ในคำสั่ง sql มันก็เลยติด \r ไปด้วย แต่ในฐานข้อมูล คิดว่าไม่มี \r (อาจจะเป็นรายการที่ทดสอบ คีย์เข้าไปตรงๆ หรือคีย์เข้าไปแบบบรรทัดเดียว) มันก็เลยมองว่าตัวที่คีย์หลายบรรทัด ที่มี \r ซ่อนอยู่ กับตัวที่อยู่ในฐานข้อมูลซึ่งไม่มี \r เป็นคนละตัวกัน ก็เลยไม่ duplicate ครับ สรุปก็ประมาณนี้แหละครับ :wanwan003: โอ้วได้ความรู้ทีเดียว ขอบคุณครับ |