A-AA+then

เรื่องของรับค่าจากฟอร์มครับ ช่วยดูโค้ดให้หน่อยครับ

2,051

<!--
ผมติดปัญหาเรื่องรับข้อมูลจากฟอร์มแบบอะเรย์น่ะครับ 
อยากให้อาจารย์ช่วยดูโค้ดให้หน่อยครับ
คือว่าผมอยากสร้างฟร์อม อัพโหลดรูปภาพ แล้วก็เก็บชื่อรูปภาพ ข้อความบรรยาย
คำอธิบาย(ที่เป็น TEXT Area) ลงฐานข้อมูล
(MySQL)
โดยฟอร์มนั้นเมื่อเราเรียกใช้เราสามารถส่งตัวแปรผ่านทาง คิวรีสตริง ว่า
ให้มีช่องรับรูปกี่ช่อง ช่องคำอธิบายกี่ช่อง
เช่น ผมสร้างฟอร์มไว้ในไฟล์ชื่อ index.php
ผมอยากได้ ช่องรับรูป 5 ช่อง ช่องรับคำอธิบาย 5 ช่อง
ผมก็ส่งตัวแปรผ่านทางคิวรี่สตริงไป http://localhost/mygal/index.php?file=5
แบบนี้โค้ดที่รับในไฟล์ index.php ก็จะสร้างช่องรับข้อมูลให้ตามตัวแปรที่ผมส่งค่าผ่านคิวรีสตริง
ดังโค้ดข้างล่างนี้ครับ
-->

<html>
<head>
<title>ทดสอบสร้างฟอร์มแบบอะเรย์</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
</head>
<body>
 <form method="post" action="upload.php" enctype="multipart/form-data">
 <table width="45%" border="1" align="center">
 <?
 
  $nfile = $_GET["file"];
  echo"<tr>";
     echo"<td>Title No.::</td>";
     echo"<td><input type='text' name='title'></td>";
   echo"</tr>";
  for($i = 1;$i<=$nfile;$i++){
   echo"<tr>";
    echo"<td>User Pic::$i</td>";
    echo"<td>";
     echo"<input type='file' name='userfile[]'>";
    echo"</td>";
   echo"</tr>";
   echo"<tr>";
    echo"<td colspan='2' align='center'>รายละเอียดเพิ่มเติม $i</td></tr>";
   echo"<tr>";
    echo"<td colspan='2' align='center'>";
     echo"<textarea name='detail[]' cols='25' rows='8'>";
     echo"</textarea>";
    echo"</td>";
   echo"</tr>";
  }
 ?>

 <tr>
  <td>
   &nbsp;
  </td>
  <td>
   <input type="submit" value="Send DATA">
  </td>
 </tr>
 </table>
 </form>
</body>
</html>
<!--
แต่ว่าผมมา "ตกหมา" ตายตอนที่จะสร้างไฟล์รับแล้วให้มันพิมพ์ข้อมความออกมาทางจอนี่แหละครับ
(ไอ้โค้ดข้างบนนี้ผมมั่วๆเอาน่ะครับ อ่านมาจากหนังสือชื่อ "กลเม็ดเทคนิด PHP สำหรับเว๊บไซต์ นักเขียนชื่อ กอบเกียติ สระอุบล")
ในหนังสือเค้าเขียนอีกอย่าง ซึ่งผมทดลองแล้วมันใช้ได้ดี แต่ถ้าผมไม่ใส่รูปไป มันก็ Error
ตามโค้ดที่เค้าสั่งให้ตรวจสอบโดย Foreach(){}-->

 
 
<Title> Upload.php </Title>
<?
   /*
  โค้ดสำหรับรับการ Submit ตามหนังสือน่ะครับผมลอกเค้า เอามาถาม
  อันนี้ผมได้แก้แค่บางส่วนเอามาทดลองโค้ดของเค้ามันใช้ได้ดี เจ๋งมากครับ
  คือ มันอัพโหลดรูปเสร็จแล้ว ก็ย่อรูปแล้วก็เก็บรูปย่อไว้ในโฟลเดอร์
  แล้วก็เก็บชื่อรูปภาพไว้ในฐานข้อมูลเสร็จสรรพ
  */

require("config.inc.php");
echo "<h3>Upload file</h3>";
$uploadDir = './photo/' ;
$thumbDir = './thumb/' ;
$cat = $_REQUEST['cat'];
mysql_connect($dbserver, $dbuser, $dbpass) or die("เชื่อมต่อ DB ไม่ได้ ");
mysql_select_db($dbname) or die("เลือกฐานข้อมูลไม่ได้");
mysql_query("set NAMES utf8 ");

Foreach ($_FILES["userfile"]["error"] as $key => $error) {
    if ($error == 0 ) { 
  $title = trim($_REQUEST['title'][$key]) ;
  $size = $_FILES["userfile"]["size"][$key];
        $type = $_FILES["userfile"]["type"][$key];
        $tmp_name = $_FILES["userfile"]["tmp_name"][$key];
        $fname = $_FILES["userfile"]["name"][$key];
  $uploadfile = $uploadDir . basename($fname);
  $thumbfile = $thumbDir . $fname;

  /*
  if (!ereg ("^image/pjpeg" , $type )) {
     echo "<br>upload ไม่ได้ เฉพาะ JPG เท่านั้น กรุณาเช็คชนิดหรือขนาดไฟล์ ";
     die;
  }
  $limit = 812000 ;
  if ( $size > $limit ) {
     echo "<br>upload ไม่ได้ ขนาดไฟล์ใหญ่เกินกว่า $limit ไบท์ ";
     die;
  }
         */

  move_uploaded_file($tmp_name, "$uploadDir$fname");
  echo "$key : $title , $size Byte &nbsp; $type &nbsp;  $fname , $thumbfile<br> ";
  
  $sql = "SELECT image From tbimage  WHERE  image='$fname' " ;
  $result = mysql_query( $sql);
  if (mysql_fetch_array($result)) { 
   echo "<b>มี  $fname อยู่แล้ว ไม่ต้อง Add ซ้ำ!</b><br>";
  } else {  // if exists
   $sql = "INSERT  into  tbimage ( cat_id , title,  image ) values
    ('$cat' , '$title' , '$fname' ) ";
   $result = mysql_query($sql);
   if (!$result)  {
    echo("เอ็กซิคิวต์คำสั่ง SQL ไม่ได้ " . mysql_error() );
   }
  }
 list($w1, $h1) = getimagesize($uploadfile);  // Get new dimensions
 $quality = 100;
 $w2 = 100 ; #
 $percent = $w2 / $w1 ;
 $h2 = $h1 * $percent ;

 $h2 = 80 ; #
 $percent = $h2 / $h1 ;
 $w2 = $w1 * $percent ;

 $w2 = 120 ; #
 $h2 = 90 ; #

 $im = imageCreateTrueColor($w2+4, $h2+4); 
 $im1 = imageCreateFromJpeg($uploadfile);

 $dark = ImageColorAllocate($im,185,185,185); // dark
 $light = ImageColorAllocate($im,230,230,230); 
 $white = ImageColorAllocate($im,254,254,254);
 imagefilledRectangle($im, 0, 0, $w2+3 , $h2+3, $white); 
 imagefilledRectangle($im, 4, 4, $w2+4 , $h2+4, $light);
 imagefilledRectangle($im, 3, 3, $w2+2 , $h2+2, $dark);

 imageCopyResampled($im, $im1, 0, 0, 0, 0, $w2, $h2, $w1, $h1);
 #imageCopyResized($im, $im1, 0, 0, 0, 0, $w2, $h2, $w1, $h1);
 imageString($im, 5, 5, $h2 - 20, "website.com", $light);
 imagejpeg($im, $thumbfile , $quality); # %
 imageDestroy($im);
 imageDestroy($im1);
 echo "<hr color=red noshade size=1>";
    }

?>
<hr><a href=uploadform.php>Upload เพิ่ม</a> |
<a href=<?= $uploadfile ?> target=_blank>View photo</a>
<a href=<?= $thumbfile ?> target=_blank>View thumb</a>|
<a href="listmysql.PHP">ดูหน่อย</a>


<!--  
อันนี้เป็นโค้ดสร้างฟอร์มจากหนังสือครับ
-->


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>ทดสอบครับ</title>
</head>
<body>
<FORM enctype="multipart/form-data" action="upload.php" method=post>
<b>ปฏิบัติการ Upload ทีละหลายไฟล์...</b><hr>
<!-- Title <input type="text" name="title" ><br> -->
<input type="hidden" name="MAX_FILE_SIZE" value="500000">

<?
require("config.inc.php");
mysql_connect($dbserver, $dbuser, $dbpass) or die("เชื่อมต่อฐานข้อมูลไม่ได้ ");
mysql_select_db($dbname) or die("เลือกฐานข้อมูลไม่ได้"); // เลือกฐานข้อมูล
mysql_query("set NAMES utf8 ");
$sql = "SELECT *  from tbcat Order By cat_id ";
$result = mysql_query( $sql);
echo "หมวดหมู่ <SELECT NAME='cat'>
";
echo "<option value=>--กรุณาเลือก--</option> " ;
While( $fetcharr = mysql_fetch_array($result) ) {
 $cat_id = $fetcharr['cat_id'];
 $cat_title = $fetcharr['cat_title'];
 echo "<option value=". $fetcharr['cat_id'] . ">". $fetcharr['cat_title']. "</option> " ;

 echo "</SELECT><br> ";
$nfile = 6;  
For ($i = 1 ; $i <= $nfile ; $i++) {
 echo "Title $i <input type='text' name='title[]' > ";
 echo "File $i <input name='userfile[]' type=file><br> ";
}
?>
&nbsp;&nbsp;&nbsp;&nbsp;<input type="submit" VALUE=" ตกลงส่ง ">
</form>
</body>
</html>

 

<!--
ที่ผมอยากได้แบบนี้เพราะเห็นว่ามันยืดได้ดี คือ
ถ้าต่อไปผมอยากได้ฟอร์มที่มี ช่องรับรูปช่องเดียว และช่องรับข้อความช่องเดียวก็แค่เปลี่ยนค่า คิวรีสตริงที่ส่งไปเท่านั้น
รบกวนถามอาจารย์ครับ ผมจะเขียนโค้ดรับข้อความในไฟล์ๆเดียวตามค่าของฟอร์มที่ส่งมาได้หรือเปล่าครับ
(ให้ผมคิดเองเขียนเอง ผมมั่วเองจนหมดปัญญาแล้วครับ อยากให้อาจารย์ช่วยชี้ทางให้หน่อยครับ)
หากต้องการให้พิมพ์ข้อความออกมาตอนที่ไม่มีรูปผมจะเขียนโค้ดรับในไฟล์ upload.php อย่างไรครับ
-->

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

ตรงนี้คุ้นๆ นะ เหมือนที่ "คุณฉุย" เอามาให้ดูเป๊ะเลย

Foreach ($_FILES["userfile"]["error"] as $key => $error) {
    if ($error == 0 ) { 
  $title = trim($_REQUEST['title'][$key]) ;
  $size = $_FILES["userfile"]["size"][$key];
        $type = $_FILES["userfile"]["type"][$key];
        $tmp_name = $_FILES["userfile"]["tmp_name"][$key];
        $fname = $_FILES["userfile"]["name"][$key];
  $uploadfile = $uploadDir . basename($fname);
  $thumbfile = $thumbDir . $fname;




โดยฟอร์มนั้นเมื่อเราเรียกใช้เราสามารถส่งตัวแปรผ่านทาง คิวรีสตริง ว่า
ให้มีช่องรับรูปกี่ช่อง ช่องคำอธิบายกี่ช่อง
เช่น ผมสร้างฟอร์มไว้ในไฟล์ชื่อ index.php
ผมอยากได้ ช่องรับรูป 5 ช่อง ช่องรับคำอธิบาย 5 ช่อง
ผมก็ส่งตัวแปรผ่านทางคิวรี่สตริงไป
http://localhost/mygal/index.php?file=5


รับค่า file=5

มาวนลูปสร้าง เป็นชุดๆ เอาก็ได้นี่ครับ


หรือถ้าไม่ได้ ลองถาม "คุณฉุย" ดู ผมเชื่อว่า "คุณฉุย" น่าจะทำเสร็จแล้ว

1

2

555++ หนังสือเล่มเดียวกันเลยค้าบ

ตอนนี้กำลังปรับโค้ดตามที่อาจารย์แนะนำอยู่
3

ขอบคุณทุกๆท่านครับ ได้แล้วครับผม ตามแนวทางที่ต้องการแบบง่ายๆครับ ขอบคุณครับ
4
^