10/10/2018, 09:49

Xin í kiến lưu trữ ảnh

em đang làm 1 trang up ảnh vào folder image trên host,một table image_id,image_path,name,size,price
nếu tạo 1 form úp 1 ảnh cùng thông tin trên thì ok
nhưng bây giờ em muốn một form mỗi lần submit 5 ảnh cùng với các thông tin khác nhau cho mỗi ảnh.sau đó chỉ lấy ra những ảnh mình vừa upload cùng thông tin
các bác có thể cho e í kiến được ko ? như đoạn mã dưới thì mình chèn thêm đoạn nhập dữ liệu trong vòng lặp IF ?

Em định làm cách khác là sẽ làm trang chỉ Upload ảnh thôi,và một trang lấy ảnh ra để edit ,thế làm sao để chỉ lấy ra những ảnh mình vừa up để edit nhập thông tin
vấn đề tiếp theo: mình upload ảnh rồi, mình lấy ra 5 ảnh cùng các trường có sẵn,rồi nhập dữ liệu mà ko phải load lại trang, nếu load lại trang thì lại quay về trường hợp ban đầu >.< lúc này sử dụng javascript hả
co link hướng ví dụ chỉ em với

em hỏi thêm một điều nữa giả sử có trang www.abcd.com khi mình nhập vào thì nó sẽ hiện về trang index, bh trong host đấy có folder image ,một thằng nào đấy nó gõ vào add www.abcd.com/image thì nó có vô thẳng image của mình ko nhỉ >.< xử lí sao?

<?php
$numoffile = 5;
$file_dir = "/ subdomain/files/"; // Tên du?ng d?n thu m?c ch?a file upload
if ($_POST) {
for ($i=0;$i<$numoffile;$i++) {
if (trim($_FILES['myfiles']['name'][$i])!="") {
$newfile = $file_dir.$_FILES['myfiles']['name'][$i];
move_uploaded_file($_FILES['myfiles']['tmp_name'][$i], $newfile);
$j++;
}
} // DOẠN MÁ NHẬP DỮ LIỆU SẼ Ở ĐÂY?
}
if (isset($j)&&$j>0) print "T?p tin dã du?c upload.<br>";
print "<form method='post' enctype='multipart/form-data'>";
for($i=0;$i<$numoffile;$i++) {
print "<input type='file' name='myfiles[]' size='30'><br>";
}
print "<input type='submit' name='action' value='Upload'>";
print "</form>";
?>
thuyduongcd viết 11:53 ngày 10/10/2018
Được gửi bởi chameron
em đang làm 1 trang up ảnh vào folder image trên host,một table image_id,image_path,name,size,price
nếu tạo 1 form úp 1 ảnh cùng thông tin trên thì ok
nhưng bây giờ em muốn một form mỗi lần submit 5 ảnh cùng với các thông tin khác nhau cho mỗi ảnh.sau đó chỉ lấy ra những ảnh mình vừa upload cùng thông tin
các bác có thể cho e í kiến được ko ? như đoạn mã dưới thì mình chèn thêm đoạn nhập dữ liệu trong vòng lặp IF ?

Em định làm cách khác là sẽ làm trang chỉ Upload ảnh thôi,và một trang lấy ảnh ra để edit ,thế làm sao để chỉ lấy ra những ảnh mình vừa up để edit nhập thông tin
vấn đề tiếp theo: mình upload ảnh rồi, mình lấy ra 5 ảnh cùng các trường có sẵn,rồi nhập dữ liệu mà ko phải load lại trang, nếu load lại trang thì lại quay về trường hợp ban đầu >.< lúc này sử dụng javascript hả
co link hướng ví dụ chỉ em với



<?php
$numoffile = 5;
$file_dir = "/ subdomain/files/"; // Tên du?ng d?n thu m?c ch?a file upload
if ($_POST) {
for ($i=0;$i<$numoffile;$i++) {
if (trim($_FILES['myfiles']['name'][$i])!="") {
$newfile = $file_dir.$_FILES['myfiles']['name'][$i];
move_uploaded_file($_FILES['myfiles']['tmp_name'][$i], $newfile);
$j++;
}
} // DOẠN MÁ NHẬP DỮ LIỆU SẼ Ở ĐÂY?
}
if (isset($j)&&$j>0) print "T?p tin dã du?c upload.<br>";
print "<form method='post' enctype='multipart/form-data'>";
for($i=0;$i<$numoffile;$i++) {
print "<input type='file' name='myfiles[]' size='30'><br>";
}
print "<input type='submit' name='action' value='Upload'>";
print "</form>";
?>
Có thể tạo 5 cụm khác nhau, mỗi cụm là các textbox cho nhập thông tin kèm theo 1 nút browse để up ảnh tương ứng. Tất cả dùng chung 1 nút Submit (nằm trong form). Khi POST dữ liệu đi thì có đầy đủ thông tin cho mỗi ảnh rồi.
Đại khái như thế này:
Code:
print "<form method='post' enctype='multipart/form-data'>"; 
for($i=0;$i<$numoffile;$i++) { 
    print "<div style="border: #CCCCCC solid 1px">;
    print "<input type='text' name='description[]' />
    // tiếp tục với các thông tin khác .......
    print "<input type='file' name='myfiles[]' size='30'><br>"; 
    print "</div>";
} 
print "<input type='submit' name='action' value='Upload'>"; 
print "</form>";
Sau khi Submit thì description[x] sẽ tương ứng với myfiles[x]

Vấn đề xử lý mà không load lại trang, bạn tham khảo thêm về đối tương XMLHttpRequest của PHP

em hỏi thêm một điều nữa giả sử có trang www.abcd.com khi mình nhập vào thì nó sẽ hiện về trang index, bh trong host đấy có folder image ,một thằng nào đấy nó gõ vào add www.abcd.com/image thì nó có vô thẳng image của mình ko nhỉ >.< xử lí sao?
Cái này tùy thuộc vào cấu hình của host mà có thể thấy hoặc không thấy.
Nếu không muốn show file trong đó, mở file httpd.conf hoặc .htaccess lên và thêm dòng này:
Code:
IndexIgnore *
Nếu không được phép sửa 2 file trên thì cách đơn giản nhất là tạo 1 file index.html với nội dung bất kỳ rồi quăng lên đó.
chameron viết 11:53 ngày 10/10/2018
em cảm ơn bác nhá , theo như cách của bác thì dùng mảng nhiều chiều
$information = array(1=>image_id,image_path,name,price,size)
vì nhập liệu có các trường giống nhau
khi dùng câu lệnh mình chỉ cần dùng vòng lặp với câu lệnh
INSERT INTO image (image_id,image_path,name,price,size) VALUES
($infor[1][$i],$infor[2][$i],$infor[3][$i],$infor[4][$i],$infor[5][$i])

BH là hiển thị chỉ những ảnh mới upload , có 5 cụm thì mình viết code cứ lấy ra 5 dữ liệu mới nhất.Vấn đề là ko phải lúc nào cũng úp 5 ảnh 1 lúc
có khi là 1 , lúc thì 2 hay 3 ảnh, nếu vẫn câu lệnh lấy 5 ảnh thì nó sẽ lấy ra những ảnh đã upload trước đấy, Ví dụ mình úp có 3 ảnh thôi,nếu dùng câu lệnh kia thì nó sẽ lấy về 5 ảnh vậy là 2 ảnh đã có sẵn.
Xử lý sao cho úp 1 thì lấy 1 , 2 thì lấy 2v.v.v
XMLHttpRequest có ví dụ cụ thể ko bác ^^!
học thêm đc cách bảo mật rất đơn giản hiệu quả tạo một trang index cho mỗi folder
thuyduongcd viết 12:00 ngày 10/10/2018
Không nhất thiết phải là 5.
Lấy ví dụ thế này, thông tin bạn cần lưu gồm: name, price, size. Thì ở form hiển thị xuất ra thế này:
Code:
$numoffile=5; // số file upload tối da 1 lần
print "<form method='post' enctype='multipart/form-data'>"; 
for($i=0;$i<$numoffile;$i++) { 
    print "<div style="border: #CCCCCC solid 1px">;
    print "<input type='text' name='name' />
    print "<input type='text' name='price' />
    print "<input type='text' name='size' />
    print "<input type='file' name='myfiles' size='30'><br>"; 
    print "</div>";
} 
print "<input type='submit' name='action' value='Upload'>"; 
print "</form>";
Khi đó ở trang nhận dữ liệu sẽ được các mảng $name[], $price[], $size[], $myfiles[]. Chỉ cần kiểm tra mảng $myfiles[] có bao nhiêu phần tử thì sẽ biết người ta up bao nhiêu file thôi.

[=========> Bổ sung bài viết <=========]

Code:
<script language="javascript">
function makePOSTRequest(url, parameters) {
      var http_request = false;
      if (window.XMLHttpRequest) { // Mozilla, Safari,...
         http_request = new XMLHttpRequest();
         if (http_request.overrideMimeType) {
         	// set type accordingly to anticipated content type
            //http_request.overrideMimeType('text/xml');
            http_request.overrideMimeType('text/html');
         }
      } else if (window.ActiveXObject) { // IE
         try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
         } catch (e) {
            try {
               http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
         }
      }
      if (!http_request) {
         alert('Cannot create XMLHTTP instance');
         return false;
      }

      http_request.onreadystatechange = function(){
      if (http_request.readyState == 4) {
         if (http_request.status == 200) {
             var result=http_request.responseText;
             if ((result!="")&&(callback!="")){
                //document.getElementById(callback).innerHTML= result;
                //alert(page);
                extractdata(result);
             }
         } else {
            alert('There was a problem with the request.');
         }
      }
      };
      http_request.open('POST', url, true);
      http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      http_request.setRequestHeader("Content-length", parameters.length);
      http_request.setRequestHeader("Connection", "close");
      http_request.send(parameters);
   }
</script>
Hàm này sẽ gọi 1 file trên server. Có 2 tham số là địa chỉ trang và các tham số đi kèm VD:
Code:
makePOSTRequest("http://yourdomain/process.php","var1=abc&var2=xyz");
Như vậy, khi muốn thực hiện thao tác gì mà không muốn reload lại trang, chỉ việc gọi hàm này tới file thực hiện công việc (process.php). Nó sẽ thực hiện một cách "âm thầm", không cần reload lại trang.
chameron viết 11:50 ngày 10/10/2018
cảm ơn bác nhiều nha
bác cho tôi nick nhá có gì tôi học tập bác
hand_in_hand_88
Bài liên quan
0