ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingช่วยด้วยคับมันไม่ตรวจ duplicate ใน ฐานข้อมูล
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: ช่วยด้วยคับมันไม่ตรวจ duplicate ใน ฐานข้อมูล  (อ่าน 940 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
Mrpoohling
ก๊วนเสียว
*

พลังน้ำใจ: 6
ออฟไลน์ ออฟไลน์

กระทู้: 250



ดูรายละเอียด เว็บไซต์
« เมื่อ: 16 กุมภาพันธ์ 2017, 18:13:02 »

ผมทำ form textarea โดยจะให้มัน insert แบบ Multi Line
เช่น

OOOOOO,5555555
AAAAAAA,2222222
BBBBBBBB,2122221
CCCCCCC,5565656

เมื่อเพิ่มทีละ Line จะสามารถตรวจสอบ duplicate ใน ฐานข้อมูล ได้ แต่เมื่อ submit แบบ multi มันไม่ตรวจสอบให้  Cry

---------------------------------------------------------------------------------------------------------------------
$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 ............................

-------------------------------------------------------------------------------------------------------------------------
 

รบกวนช่วยแนะนำหน่อยครับ Tongue Tongue


ทำได้แล้วครับ

โดยการเปลี่ยน $lines = explode("\n", $addtext);
เป็น
$lines = explode("\n", str_replace("\r", "", $addtext));
แทน

งงแท้  Tongue Tongue Tongue

ยังไงก็ขอ ขอบคุณทุกความเห็นนะครับ  wanwan017
« แก้ไขครั้งสุดท้าย: 17 กุมภาพันธ์ 2017, 07:08:09 โดย Mrpoohling » บันทึกการเข้า

Sith9
Newbie
*

พลังน้ำใจ: 7
ออฟไลน์ ออฟไลน์

กระทู้: 92



ดูรายละเอียด
« ตอบ #1 เมื่อ: 16 กุมภาพันธ์ 2017, 19:08:34 »

if num_rows > 0 ซ้ำ
บันทึกการเข้า
Mrpoohling
ก๊วนเสียว
*

พลังน้ำใจ: 6
ออฟไลน์ ออฟไลน์

กระทู้: 250



ดูรายละเอียด เว็บไซต์
« ตอบ #2 เมื่อ: 16 กุมภาพันธ์ 2017, 19:22:04 »

if num_rows > 0 ซ้ำ


เหมือนกันกับอันนี้ครับ if($num_rows != 0) {
บันทึกการเข้า

Sith9
Newbie
*

พลังน้ำใจ: 7
ออฟไลน์ ออฟไลน์

กระทู้: 92



ดูรายละเอียด
« ตอบ #3 เมื่อ: 16 กุมภาพันธ์ 2017, 19:33:54 »

if num_rows > 0 ซ้ำ


เหมือนกันกับอันนี้ครับ if($num_rows != 0) {

จริงด้วย เขินเลย ขอโทษด้วยครับ Embarrassed

ที่คิดตอนนี้คืออยากให้เช็คในส่วนของ query ว่าทำงานถูกต้องหรือเปล่า เพราะ num_rows อาจจะมีค่าเป็น false
บันทึกการเข้า
Mrpoohling
ก๊วนเสียว
*

พลังน้ำใจ: 6
ออฟไลน์ ออฟไลน์

กระทู้: 250



ดูรายละเอียด เว็บไซต์
« ตอบ #4 เมื่อ: 16 กุมภาพันธ์ 2017, 19:37:27 »

if num_rows > 0 ซ้ำ


เหมือนกันกับอันนี้ครับ if($num_rows != 0) {

จริงด้วย เขินเลย ขอโทษด้วยครับ Embarrassed

ที่คิดตอนนี้คืออยากให้เช็คในส่วนของ query ว่าทำงานถูกต้องหรือเปล่า เพราะ num_rows อาจจะมีค่าเป็น false

ครับไม่เปนไร หาทางต่อไป  Tongue Tongue Tongue Tongue
บันทึกการเข้า

AbuseMan
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 104
ออฟไลน์ ออฟไลน์

กระทู้: 1,104



ดูรายละเอียด เว็บไซต์
« ตอบ #5 เมื่อ: 16 กุมภาพันธ์ 2017, 20:16:30 »

อันนี้ขอแนะนำการนับจำนวนข้อมูลในฐานข้อมูล อยากให้ใช้แบบนี้มากกว่า

โค๊ด:
$sql = 'SELECT COUNT(*) AS total_rows FROM table WHERE field = something';
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
if($row['total_rows'] == 0) { echo 'ยังไม่มี Record'; }
บันทึกการเข้า

ฟังเพลงออนไลน์ : เว็บเพลงออนไลน์ที่คุณขอฟังเพลงได้ด้วยตัวคุณเอง
ห้องแชท : บริการฟรีห้องแชทสำหรับติดเว็บ
เพลงใหม่ : เพลงใหม่ เพลงฮิต
บ้านคุ้มค่า : ลงประกาศขายบ้าน ที่ดิน พร้อมอัพเดทโครงการบ้านและคอนโดใหม่ที่น่าสนใจ
ten1312
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 67
ออฟไลน์ ออฟไลน์

กระทู้: 1,486



ดูรายละเอียด
« ตอบ #6 เมื่อ: 16 กุมภาพันธ์ 2017, 21:18:44 »

ผมมือใหม่แต่อยากแนะนำตามที่ผมรู้
รับค่ามาเก็บไว้แบบ array แล้วใช้ for วนลูปเอาได้ไหม
เวลา where ก็ใช้ $ตัวแป
บันทึกการเข้า

บันทึกการเรียนเขียน Program
Java :2 พย. 2559 - 19 พย. 2559 หยุดไว้ก่อน
PHP SQL HTML CSS Bootstrap : 25 พย. 2559 - ปัจจุบัน
Javascript jQuery Ajax Angular JS : เรียนผ่านๆยังไม่จริงจัง

นานาเกษตร
sputtaro
สมุนแก๊งเสียว
*

พลังน้ำใจ: 139
ออฟไลน์ ออฟไลน์

กระทู้: 910



ดูรายละเอียด
« ตอบ #7 เมื่อ: 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 ด้วยก็จะ ทำให้รู่สาเหตุได้ง่ายขึ้น
เมือจะใช้งานจริง ค่อยลบออก
« แก้ไขครั้งสุดท้าย: 16 กุมภาพันธ์ 2017, 23:46:49 โดย sputtaro » บันทึกการเข้า
Mrpoohling
ก๊วนเสียว
*

พลังน้ำใจ: 6
ออฟไลน์ ออฟไลน์

กระทู้: 250



ดูรายละเอียด เว็บไซต์
« ตอบ #8 เมื่อ: 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 มันไม่ตรวจสอบให้ 

 Tongue Tongue Tongue

บันทึกการเข้า

Mrpoohling
ก๊วนเสียว
*

พลังน้ำใจ: 6
ออฟไลน์ ออฟไลน์

กระทู้: 250



ดูรายละเอียด เว็บไซต์
« ตอบ #9 เมื่อ: 17 กุมภาพันธ์ 2017, 07:07:35 »

ทำได้แล้วครับ

โดยการเปลี่ยน $lines = explode("\n", $addtext);
เป็น
$lines = explode("\n", str_replace("\r", "", $addtext));
แทน

งงแท้  Tongue Tongue Tongue

ยังไงก็ขอ ขอบคุณทุกความเห็นนะครับ  wanwan017
บันทึกการเข้า

qawe89
ก๊วนเสียว
*

พลังน้ำใจ: 10
ออฟไลน์ ออฟไลน์

กระทู้: 473



ดูรายละเอียด เว็บไซต์
« ตอบ #10 เมื่อ: 17 กุมภาพันธ์ 2017, 08:26:20 »

เข้ามาฟังด้วยครับ  wanwan017
บันทึกการเข้า

f206cs
Newbie
*

พลังน้ำใจ: 8
ออฟไลน์ ออฟไลน์

กระทู้: 64



ดูรายละเอียด
« ตอบ #11 เมื่อ: 17 กุมภาพันธ์ 2017, 15:35:11 »

ทำได้แล้วครับ

โดยการเปลี่ยน $lines = explode("\n", $addtext);
เป็น
$lines = explode("\n", str_replace("\r", "", $addtext));
แทน

งงแท้  Tongue Tongue Tongue

ยังไงก็ขอ ขอบคุณทุกความเห็นนะครับ  wanwan017

แหม่ เส้นผมบังภูเขา

ปกติเวลากด enter ที่ keyboard มันไม่ได้มีแค่ \n แต่มันจะเป็น \n\r
\n = ขึ้นบรรทัดใหม่
\r = เลื่อนเคอร์เซอร์ไปต้นบรรทัด

ตอนแรกที่ใช้แค่ $lines = explode("\n", $addtext); ตัว \r มันยังอยู่ (เรามองไม่เห็น)
ทีนี้เมื่อเอาไปใส่ในคำสั่ง sql มันก็เลยติด \r ไปด้วย แต่ในฐานข้อมูล คิดว่าไม่มี \r
(อาจจะเป็นรายการที่ทดสอบ คีย์เข้าไปตรงๆ หรือคีย์เข้าไปแบบบรรทัดเดียว)

มันก็เลยมองว่าตัวที่คีย์หลายบรรทัด ที่มี \r ซ่อนอยู่ กับตัวที่อยู่ในฐานข้อมูลซึ่งไม่มี \r เป็นคนละตัวกัน
ก็เลยไม่ duplicate ครับ

สรุปก็ประมาณนี้แหละครับ

 wanwan003

บันทึกการเข้า
cloverink
Newbie
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 4



ดูรายละเอียด
« ตอบ #12 เมื่อ: 17 กุมภาพันธ์ 2017, 18:34:58 »

ใช้ PHP_EOL ก็ได้ครับ ( eol = end of line )

explode(PHP_EOL, $x)

ส่วน query ใช้ count(*) นะครับ เพราะ ถ้าใช้ num row bug แน่นอน เวลามี query error
บันทึกการเข้า
Mrpoohling
ก๊วนเสียว
*

พลังน้ำใจ: 6
ออฟไลน์ ออฟไลน์

กระทู้: 250



ดูรายละเอียด เว็บไซต์
« ตอบ #13 เมื่อ: 17 กุมภาพันธ์ 2017, 19:30:44 »

ทำได้แล้วครับ

โดยการเปลี่ยน $lines = explode("\n", $addtext);
เป็น
$lines = explode("\n", str_replace("\r", "", $addtext));
แทน

งงแท้  Tongue Tongue Tongue

ยังไงก็ขอ ขอบคุณทุกความเห็นนะครับ  wanwan017

แหม่ เส้นผมบังภูเขา

ปกติเวลากด enter ที่ keyboard มันไม่ได้มีแค่ \n แต่มันจะเป็น \n\r
\n = ขึ้นบรรทัดใหม่
\r = เลื่อนเคอร์เซอร์ไปต้นบรรทัด

ตอนแรกที่ใช้แค่ $lines = explode("\n", $addtext); ตัว \r มันยังอยู่ (เรามองไม่เห็น)
ทีนี้เมื่อเอาไปใส่ในคำสั่ง sql มันก็เลยติด \r ไปด้วย แต่ในฐานข้อมูล คิดว่าไม่มี \r
(อาจจะเป็นรายการที่ทดสอบ คีย์เข้าไปตรงๆ หรือคีย์เข้าไปแบบบรรทัดเดียว)

มันก็เลยมองว่าตัวที่คีย์หลายบรรทัด ที่มี \r ซ่อนอยู่ กับตัวที่อยู่ในฐานข้อมูลซึ่งไม่มี \r เป็นคนละตัวกัน
ก็เลยไม่ duplicate ครับ

สรุปก็ประมาณนี้แหละครับ

 wanwan003



โอ้วได้ความรู้ทีเดียว ขอบคุณครับ
บันทึกการเข้า

หน้า: [1]   ขึ้นบน
พิมพ์