2012-06-25 12 views
5

भाषा: पीएचपी/MySQLसरणी, अपलोड छवियों तो डेटाबेस के लिए सम्मिलित (PHP, MySQL)

मैं अपने दिमाग से बाहर जा रहा हूँ, मैं सच में अब पूछने के लिए है ... मेरे पास है एक से अधिक फ़ाइल अपलोड प्रपत्र:

<input type="file" name="fileupload[]" multiple>

कुछ जावास्क्रिप्ट की मदद से

, इस इनपुट के लिए किए गए प्रत्येक परिवर्तन पर, यह एक (फ़ाइल नाम से पकड़ा) अन्य इनपुट अंदर फ़ाइल नामों की सूची, जिसमें + एक स्वरूपित स्ट्रिंग संलग्न कर देता है , तो बदले में हमारे पास लेआउट है जैसा कि नीचे दिखाया गया है (यह मानते हुए कि हम सिर्फ कुछ छवियों जोड़ा):

Multiple Upload Form लगभग समान करने के लिए:http://jsfiddle.net/pxfunc/WWNnV/4/


// एक HTML इस तरह के लेआउट का प्रतिनिधित्व होगा ... (यह मानते हुए कि हम 3 छवियों जोड़ा)

<input type="file" name="fileupload[]" multiple>

  • छवि नाम-1.jpg   <input type="text" value="Image Name 1" name="keyword[]">
  • justsome_file.png   <input type="text" value="Justsome File" name="keyword[]">
  • some_Img-031.gif   <input type="text" value="Some Img 031" name="keyword[]">

<input type="submit" value="Upload">


मैं इसे इस तरह से क्योंकि है फ़ाइलों को अपलोड करने के अलावा, मुझे टी भी पसंद आएगा o उन्हें अपने फ़ाइल नाम के आधार पर डिफ़ॉल्ट डेटाबेस के साथ अपने डेटाबेस में जोड़ें (और प्रत्येक छवि के लिए इसे अपलोड करने के लिए इस शीर्षक को सेट/बदलने का विकल्प)। मेरे रूप में कोई समस्या नहीं है।

समस्या: मेरा दुविधा PHP पृष्ठ के अंदर है जहां फॉर्म डेटा/कार्रवाई सबमिट की जाती है।

मैं केवल या तो करने के लिए प्रबंधन कर सकते हैं:

  • अपलोड सही छवियों, लेकिन सभी
  • सम्मिलित सही खिताब के लिए एक ही शीर्षक मिलता है, लेकिन यहाँ है सब

के लिए एक ही छवि प्राप्त मेरी PHP एक्शन पेज: (वर्तमान में सही छवियों को अपलोड कर रहा है, लेकिन सभी शीर्षक सभी के लिए)

<?php 
// CONNECT TO DATABASE... 
// INCLUDE UPLOAD CLASS LIBRARY 
include (dirname(__FILE__).'/lib/class.upload.php'); 


$files = array(); 
foreach ($_FILES['fileupload'] as $k => $l) 
{ 
    foreach ($l as $i => $v) 
    { 
     if (!array_key_exists($i, $files)) 
     $files[$i] = array(); 
     $files[$i][$k] = $v; 
     $imagename = $_POST['keyword'][$i]; 
    } 
} 

// create an array here to hold file names 
$uploaded = array(); 
foreach ($files as $file) 
{ 
      $generate_name = rand(100,99999); 
      $generate_name_extra = rand(200,9999); 
      $filenamex = "COVER_PHOTO_".$generate_name.$generate_name_extra."_".time(); 
      $filenamex_thumb = $filenamex."_thumb"; 

      $handle = new upload($file); 
      if ($handle->uploaded) { 
      $this_upload = array(); 

      ///// 1 //////////////////////////////////////////////////////////////////// 
      $handle->file_new_name_body = $filenamex_thumb; 
      $handle->file_force_extension = true; 
      $handle->image_resize   = true; 
      $handle->image_x    = '300'; 
      $handle->image_ratio_y  = true; 
      $handle->jpeg_quality = '100'; 

      // ABSOLUTE PATH BELOW 
      $handle->process($absoRoot.'covers/thumbs/'); 
      //////////////////////////////////////////////////////////////////////////// 
      if ($handle->processed) { 

     // store the image filename 
    $this_upload['image'] = $handle->file_dst_name; // Destination file name 
    $this_upload['body'] = $handle->file_dst_name_body; // Destination file name body 
    $this_upload['extension'] = $handle->file_dst_name_ext; // Destination file extension 

     $category_id = $_POST['cat']; 
     $hiddenvalues = explode ("|",$_POST["cat"]); 
     $category = $hiddenvalues[0]; 
     $category_name = $hiddenvalues[1]; 


       $sql = 'INSERT INTO cover (id, img, keyword, category_name, cat_id) VALUES ("", "'.$this_upload['image'].'", "'.$imagename.'", "'.$category_name.'", "'.$category.'")'; 
       mysql_query($sql); 
     } 

    $handle->clean(); 
     header("Location: ./upload.php"); 
       $message = ""; 
    } else { 

     echo ' file not uploaded to the wanted location'; 
     echo ' Error: ' . $handle->error . ''; 

     } 
} ?> 

(मैं Upload Class by Colin Verot का उपयोग छवि अपलोड संभाल करने, और उनके पूछे जाने वाले प्रश्न ट्यूटोरियल this page, under: What about multiple uploads? पर एकाधिक छवि अपलोड संभाल करने)

यह एकदम सही काम करेगा अगर मैं छवियों को अपलोड किया गया था, फिर भी मैं जोड़ने की कार्यक्षमता जोड़ा मेरे डेटाबेस में प्रत्येक छवि डेटा। & यह वह जगह है जहां यह भ्रमित हो जाता है।

मुझे यकीन है कि कुंजी सही क्वेरी के अंदर SQL क्वेरी रख रही है, या शायद एक और बना रही है, लेकिन मैंने कोशिश की है कि & यह केवल मुझे छवि अपलोड या शीर्षक के लिए 1 अच्छा परिणाम देता है, दोनों के लिए कभी नहीं।

मुझे साइट पर छवि अपलोड करने की आवश्यकता है, फिर अपने डेटाबेस में अपना डेटा (छवि पथ सहित) स्टोर करें।

कृपया मेरे कोड को देखें और मुझे इस समस्या को हल करने के लिए कैसे प्रबुद्ध करें? एक स्निपेट सुराग वास्तव में अब के लिए बहुत अच्छा होगा क्योंकि मैं सोचने के बाद पहले से ही बहुत उलझन में हूं। आपको बहुत - बहुत धन्यवाद!

+0

ब्लॉक के लिए स्वरूपण को साफ़ करें और अपनी पोस्ट अपडेट करें: 'if (! Array_key_exists ($ i, $ फ़ाइलें)) ' –

+0

मुझे यह सुनिश्चित करने में काफी अनिश्चितता है कि कोड का ब्लॉक अपलोड क्लास अकसर किये गए सवाल ट्यूटोरियल से था [इस पृष्ठ पर, नीचे: ** एकाधिक अपलोड के बारे में क्या? **] (http://www.verot.net/php_class_upload_faq.htm?PHPSESSID=accbee5eb0a694348a445a61a4e40ba1) मैं वास्तव में नहीं देखता कि कोड के उस ब्लॉक से कौन सा है , लेकिन मैंने इसे पहले बदलने की कोशिश की है और अपलोड काम करना बंद कर दिया है इसलिए मैंने इसे वहां छोड़ दिया। हालांकि, मैं वह हिस्सा था जिसने हिस्सा जोड़ा: '$ imagename = $ _POST ['keyword'] [$ i];' – Mafia

+0

** अद्यतन: ** मुझे [** उपयोगकर्ता: 138383 ** से सही जवाब मिला है ** , ** हारून डब्ल्यू ** ** (http://stackoverflow.com/users/138383/aaron-w) उनकी टिप्पणी पहली बार में से एक थी, और पहली बार मैंने कोशिश की कि काम किया, लेकिन मैं इसे चिह्नित नहीं कर सका अब और सही करें क्योंकि उसने इसे हटा दिया है। मैंने कुछ छोटे तरीकों से उसे अधिसूचित किया है, और यदि मैं इसे पुनः सबमिट करना चाहता हूं तो मैं इंतजार करूंगा, तो मैं उसका जवाब सही के रूप में चिह्नित करूंगा। [** (उसका जवाब था ...) **] (http://i4.photobucket.com/albums/y143/cute-spot/Animatiofgdn6.gif) बस उसे श्रेय देने के लिए। जब यह काम करता था मैं लगभग मर गया। :) – Mafia

उत्तर

1

आप फ़ाइल जानकारी आप हर पाश पर $imagename अधिलेखित कर रहे हैं तो यह पिछले एक को सौंपा जाएगा एकत्रित कर रहे हैं जब। इसे $files चर से जोड़ने का प्रयास करें (उम्मीद है कि यह upload कक्षा के साथ गड़बड़ नहीं है)।

foreach ($l as $i => $v) 
{ 
    if (!array_key_exists($i, $files)) 
    $files[$i] = array(); 
    $files[$i][$k] = $v; 
    $files[$i]['imagename'] = $_POST['keyword'][$i]; 
} 

तब संदर्भ के लिए है कि

$sql = 'INSERT INTO cover (id, img, keyword, category_name, cat_id) 
    VALUES ("", "'.$this_upload['image'].'", "'.$file['imagename'].'", 
     "'.$category_name.'", "'.$category.'")'; 
2

आप $$ array array में अपना $ imagename वैरिएबल नहीं सहेज रहे हैं, आप इसे हर बार रीसेट कर रहे हैं।

$files[$i][$k] = $v; 
    $imagename = $_POST['keyword'][$i]; 

होना चाहिए कुछ की तरह:

$files[$i][$k] = array($v, $_POST['keyword'][$i]); 
    ... 
    foreach ($files as $data) { 
     list($file, $imagename) = $data; 
     ... 
    } 
2

मुझे लगता है कि आपके $sql स्ट्रिंग अद्यतन अपनी समस्याओं में से एक अपने foreach है:

$files = array(); 
foreach ($_FILES['fileupload'] as $k => $l) 
{ 
    foreach ($l as $i => $v) 
    { 
     if (!array_key_exists($i, $files)) 
     $files[$i] = array(); 
     $files[$i][$k] = $v; 
     $imagename = $_POST['keyword'][$i]; 
    } 
} 

तो तुम बताए क्षेत्रों में से प्रत्येक के माध्यम से जा रहे सही संरचना के लिए उनका मान जो इस संरचना नीति को फिट करता है:

_FILES => array(
    'name' => array(0 => 'file.txt'), 
    'size' => array(0 => 235) 
) 

कौन सा multifiles के लिए सही है, लेकिन फिर तुम क्या:

$imagename = $_POST['keyword'][$i]; 

कौन सा सही नहीं लगता है।आखिरी बार देखा गया है कि आप हर बार var को ओवरराइट कर रहे हैं जिसका मतलब है कि आपको केवल एक इनपुट vlaue मिलेगा।

संबंधित मुद्दे