ThaiSEOBoard.com

พัฒนาเว็บไซต์ => Programming => ข้อความที่เริ่มโดย: Mrpoohling ที่ 16 กุมภาพันธ์ 2017, 18:13:02



หัวข้อ: ช่วยด้วยคับมันไม่ตรวจ 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';
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
if($row['total_rows'] == 0) { echo 'ยังไม่มี Record'; }


หัวข้อ: 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:



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