A-AA+then

รบกวนถามเรื่องเช็คค่าว่างของ array

3,532

พอดีผมมีโค้ด javascrip เช็คค่าว่างของฟอร์ม บังคับให้กรอกน่ะครับ
แต่มันจะใช้ไม่ได้กับ กรณี ที่ฟอร์มรับค่านั้นเป็น array
วัตถุประสงค์คือผมจะทำฟอร์ม upload ครั้งละหลายๆ ไฟล์

โค้ดจะประมาณนี้ครับ 

 For ($i=1; $i<+$nfile; $i++) { //วนรอบทำอินพุทตามจำนวน $nfile
  echo "ชื่อรูปที่ $i <input type=\"text\" name=\"title[]\">&nbsp;&nbsp;<font size='2' color='red'>*</font>";
  echo "&nbsp; เลือกไฟล์ที่ $i <input name=\"userfile[]\" type=\"file\">&nbsp;&nbsp;<font size='2' color='red'>*</font><br>";
 }

ส่วนโค้ด javascript สำหรับเช็คคือ
<script language="javascript">

function checkfrm() {
if(document.checkformder.title.value=="") {
alert("กรุณากรอกหัวข้อ ด้วยครับ") ;
document.checkformder.title.focus() ;
return false ;
}
else if(document.checkformder.userfile.value=="") {
alert("กรุณาระบุไฟล์รูปด้วยครับ") ;
document.checkformder.userfile.focus() ;
return false ;
}
else
return true ;
}
</script>

ผมเองก็ไม่ค่อยเก่ง java ด้วยก็เลยอยากจะสอบถามอาจารย์หรือเพื่อนๆ สมาชิกท่านอื่นว่าจะแก้ไขโค้ดยังไง
ขอบคุณล่วงหน้าครับ

13 ความคิดเห็น

ไม่รูจะเกี่ยวกับอันนี้หรือเปล่า ลองสังเกตตรงที่ผมมาร์คสีแดงดูนะครับ

name=title[ตัวอ้างอิงตรงนี้มันเป็นค่า $i หรือเปล่า] <-------------------<< เดาว่าลืม
name=userfile[ตัวอ้างอิงตรงนี้มันเป็นค่า $i หรือเปล่า] <-------------------<< เดาว่าลืม

if(document.checkformder.title.value=="") {
if(document.checkformder.userfile.value=="") {

1

ไม่น่าจะเกี่ยวครับ เพราะผมทดลองแล้วก็ยังเช็คไม่ได้เหมือนเดิม (รู้สึกผมเคยจะลองใส่แล้ว ไม่ได้ลืมครับ)

อีกอย่างโค้ดเดิมมันก็ส่งค่าไปได้เป็นปกติ เช่น title[] ก็ส่งค่าชื่อรูปไปได้ครับ

แต่ยังไงก็ขอบคุณที่ช่วยตอบครับ ก็รอผู้รู้ต่อไป แหะๆๆ
2

เขียนเป็นบทความให้แล้วเด้อ อ่านเอา...
3

ขอบคุณค้าบ เดี๋ยวจะลองไปปรับแต่งดู

ได้ผลยังไงเดี๋ยวผมมาแจ้งอีกทีครับ

4

name=title[] <-------------------<< เป็นเพราะอันนี้เป็น array (แต่ไม่มีพอยเตอร์ ค่าของ name="ว่างเปล่า")
name=userfile[] <-------------------<< เป็นเพราะอันนี้เป็น array (แต่ไม่มีพอยเตอร์ ค่าของ name="ว่างเปล่า")


มันเลยกลายเป็นว่า เราพยามที่จะตรวจสอบหา
if(document.checkformder.ว่างเปล่า.value=="") { 

แต่โค้ดกลายเป็น
if(document.checkformder.title.value=="") {  <-------------------<<  มันตรวจสอบของ checkformder.title
if(document.checkformder.userfile.value=="") { <-------------------<<  มันตรวจสอบของ checkformder.userfile
5

เพราะฉะนั้น
เราต้องกำหนดพอยเตอร์ลงไปโดย


name=title[] <-------------------<< name=title[1]
name=userfile[] <-------------------<<  name=userfile[1]

การตรวจสอบก็ควรจะเป็น

if(document.checkformder.
title[1].value=="") {
if(document.checkformder.userfile[1].value=="") {

6

เอ่อ คือ ผมทำเป็นระบบ gallery ของสมาชิกครับ จากโค้ดนี้

 $numgal=$VIEWBOARD[memgal]+1;
$numfiles=$numgal-$SumPic;
 $nfile=$numfiles;  //กำหนดจำนวนอินพุทสำหรับกรอกและเลือกไฟล์อัพโหลด
 $nfilereal=$nfile-1;
echo "<br><font size=\"2\">คุณมีจำนวนรูปที่อัพโหลดได้ทั้งหมดคือ ".$VIEWBOARD[memgal]."&nbsp; รูป โดยเหลือ upload ได้อีก &nbsp;".$nfilereal."  รูป</font><br><br>";
 For ($i=1; $i<+$nfile; $i++) { //วนรอบทำอินพุทตามจำนวน $nfile
  echo "ชื่อรูปที่ $i <input type=\"text\" name=\"title[]\">&nbsp;&nbsp;<font size='2' color='red'>*</font>";
  echo "&nbsp; เลือกไฟล์ที่ $i <input name=\"userfile[]\" type=\"file\">&nbsp;&nbsp;<font size='2' color='red'>*</font><br>";
 }

โดยผมจะกำหนดจำนวนรูปที่สมาชิกอัพโหลดได้ไว้ในฟิลด์ memgal เมื่อ upload ไปแล้ว จำนวนรูปที่อัพโหลดได้ก็จะลดลง
ที่ผมใช้แบบ array ก็เพราะว่าอยากให้สามารถกำหนดจำนวนรูปได้อิสระ input ก็จะมีจำนวนได้อิสระเช่นกัน

แต่ถ้าปรับตามบทความที่อาจารย์บอก คือกำหนดรหัส array ไปแล้ว ก็ต้องแก้โค้ด input ให้เป็นจำนวน array ตามที่ต้องการมันดูจะไม่สะดวกนะครับ ไม่รู้ผมเข้าใจถูกหรือเปล่า

เพราะตอนนี้ที่ผมใช้อยู่นั้น ผมแค่สร้างฟอร์ม แก้ไขค่า จำนวนรูปที่สมาชิกอัพได้ (memgal) ใน db
ผลที่ปรากฏคือ input ของสมาชิกคนนั้นก็จะมีตามจำนวนที่ผมแก้นี้เลย โดยไม่ต้องแก้โค้ด input ครับ
เดี๋ยวผมคงต้องลองหาวิธีอื่นดูอีกที

ขอบคุณสำหรับทุกคำตอบค้าบ

7

ขอบคุณสำหรับคำแนะนำค้าบ แหะๆ

พอดีแค่อยากลองทำให้ได้ พอมันไม่ได้มันก็เลยค้างคาใจน่ะครับ อิๆๆ
จริงๆ ผมก็ไม่ได้ strick มาก บางทีคงต้องปล่อยวาง อย่างที่อาจารย์บอกละ
8

555+++

ไม่เห็นจะเกี่ยวเลย ถึงยังไงมันก็สร้างโดยวิธีเดียวกัน $nfile จะเป็นเท่าไร มันก็ไม่ได้มีผลอะไรกับ Javascript นี่ครับ

ผมแนะนนำแบบนี้สิครับ ดัดแปลงเอาแบบ checkbox ไปใช้ คือแค่ตรวจว่า มีการเลือกไฟล์อย่างน้อย 1 ตัวก็พอ ไม่จำเป็นต้องตรวจทุกตัว
9

อ่า อาจารย์เปลี่ยนคำแนะนำ

ครับ เดี๋ยวจะลองปรับดูอีกรอบค้าบ

10

กระผมเองก็ติดตามการ post ของ "คุณฉุย" มาตั้งแต่ต้น
ซึ่งเป็นคนที่ เก่ง ครับ คิดค้นการทำงานโปรแกรมต่างๆ ได้ลึก
ตอบปัญหาได้เก่ง และยังเป็นคนที่ใช้ภาษาสุภาพตลอด
แต่ใช้เทคนิคที่ Hardcor ดีครับ

งั้นช่วยแนะนำผมหน่อยนะครับว่า

name=title[]<-------------------<< ตรงนี้จะได้ค่าอะไรมาใส่ไว้ ค่านั้นมันมาได้ยังไง

ผมคิดตามไม่ทัน กรุณาด้วยนะครับ
11

โค้ดตัวนี้ผมได้มาจากหนังสืออีกทีครับ ไม่ได้เขียนหรือคิดค้นเอง แหะๆๆ
แต่มาปรับบางส่วนให้ตรงกับความต้องการ อย่างที่บอกก็เช่น ใช้เป็น member gallery

ถ้าบอกตามตรงผมก็ยังไม่ค่อยเข้าใจความหมายนะครับ แต่เดี๋ยวผมให้ดูโค้ดรับค่า

Foreach ($_FILES[userfile][error] as $key => $error) {
 if($error == 0) {  #upload_error_ok ถ้าอัพโหลดสำเร็จ ไม่ error
  $title=trim($_REQUEST[title][$key]);
  $typefile=$_FILES[userfile][type][$key];
  $sizefilest=$_FILES[userfile][size][$key];
  $tmp_name=$_FILES[userfile][tmp_name][$key];
  $newname=$_FILES[userfile][name];

ตามนี้เลยครับ พอประมวลผลสุดท้าย มันกลับบอกค่าของ title ได้ ส่วนนี้อาจารย์อาจจะแนะนำได้ดีกว่าผม

เพราะผมเอง อาศัยสังเกตุโค้ดเอาครับ ไม่ได้เข้าใจหลักการอะไร เพียงแต่เห็นว่าเป็นไปได้ ก็จะลองแก้ดู ถ้าได้ก็ถือว่าโชคดี
ถ้าไม่ได้ ก็มาถามที่นี่ หรือไม่ก็ถามผู้รู้ท่านอื่นๆ อย่างที่บอร์ดนี้ ครับ อิๆ ผมเองก๋ไม่มีพื้นฐานพวกนี้เท่าไหร่

บางทีก็ชอบไล่อ่านคำถามกับคำตอบ เพราะได้ความรู้ไปในตัว หลายครั้งก็มีคนถามตรงใจเราพอดี เอิ้กๆ
12

get แล้วฮ่ะ ได้มาจากตรงนี้นี่เอง 

$_REQUEST[title][$key]

Dynamic ดีครับ

13
^