เรื่องของรับค่าจากฟอร์มครับ ช่วยดูโค้ดให้หน่อยครับ
<!--
ผมติดปัญหาเรื่องรับข้อมูลจากฟอร์มแบบอะเรย์น่ะครับ
อยากให้อาจารย์ช่วยดูโค้ดให้หน่อยครับ
คือว่าผมอยากสร้างฟร์อม อัพโหลดรูปภาพ แล้วก็เก็บชื่อรูปภาพ ข้อความบรรยาย
คำอธิบาย(ที่เป็น 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>
</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 $type $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>
";
}
?>
<input type="submit" VALUE=" ตกลงส่ง ">
</form>
</body>
</html>
<!--
ที่ผมอยากได้แบบนี้เพราะเห็นว่ามันยืดได้ดี คือ
ถ้าต่อไปผมอยากได้ฟอร์มที่มี ช่องรับรูปช่องเดียว และช่องรับข้อความช่องเดียวก็แค่เปลี่ยนค่า คิวรีสตริงที่ส่งไปเท่านั้น
รบกวนถามอาจารย์ครับ ผมจะเขียนโค้ดรับข้อความในไฟล์ๆเดียวตามค่าของฟอร์มที่ส่งมาได้หรือเปล่าครับ
(ให้ผมคิดเองเขียนเอง ผมมั่วเองจนหมดปัญญาแล้วครับ อยากให้อาจารย์ช่วยชี้ทางให้หน่อยครับ)
หากต้องการให้พิมพ์ข้อความออกมาตอนที่ไม่มีรูปผมจะเขียนโค้ดรับในไฟล์ upload.php อย่างไรครับ
-->
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
มาวนลูปสร้าง เป็นชุดๆ เอาก็ได้นี่ครับ
หรือถ้าไม่ได้ ลองถาม "คุณฉุย" ดู ผมเชื่อว่า "คุณฉุย" น่าจะทำเสร็จแล้ว
http://www.goragod.com/...0%B8%9A%20Array.html
ตอนนี้กำลังปรับโค้ดตามที่อาจารย์แนะนำอยู่