Vraag & Antwoord

Webprogrammeren & scripting

Bestanden uploaden

9 antwoorden
  • Mij lukt het nite om meerdere bestanden naar de server toe te versturen. Ik weet dat de code een beetje lang is maar ik zie niet waar het mis gaat Ik zal stap voor stap uitleggen wat ik doe in de script. Het probleem begint in Stap 3. Ik krijg altijd het commentaar "The uploading process failed: an empty field is not aloud." Zelfs als ik wel de juiste bestanden heb geselecteerd Stap 1 Selecteer eengewenste aantal aan bestanden die verzonden moeten worden [code:1:3053bc6144] <? echo "<FORM METHOD=POST ACTION=index.php?page=" . $_GET['page'] . "&map=". $_GET['map'] . "&module=". $_GET['module'] . "&action=new>"; printf('<select name="files">'); //create a list of fields for ($i = 1; $i <= 20; $i++) { printf('<option value="%1$s">%1$s', $i); } printf('</select> '); printf('<input type="submit" class="knop" value="Create fields">'); printf('</form>'); ?> [/code:1:3053bc6144] Step 2 Creeer het aantal opgevraagde velden [code:1:3053bc6144] <? //create fields if(isset($_POST['files'])) { if ($_POST['files']) { echo "<FORM METHOD=POST ACTION=index.php?page=" . $_GET['page'] . "&map=". $_GET['map'] . "&module=". $_GET['module'] . "&action=". $_GET['action'] . ">"; //create list for ($i = 1; $i <= $_POST['files']; $i++) { printf('<input type="file" name="file_%s" size="30"><br />', $i); } printf('<input type="button" onclick="javascript: history.back(-1);" value="Go back">'); printf('<input type="submit" value="Upload files">'); printf('<input type="hidden" name="history_files" value="%s">', $_POST['files']); printf('</form>'); } } ?> [/code:1:3053bc6144] Step 3 De geselecteerde bestanden uploaden [code:1:3053bc6144] <? $upload_directory = $_SERVER['DOCUMENT_ROOT'] . "/dir/" . strtolower($sMap["map"]); $file_exts = array('.txt'); //upload files printf('<b>Result:</b><br><BR>'); for ($i = 1; $i <= $_POST['history_files']; $i++) { $_FILES['file_'.$i] = $_POST['file_'.$i]; $tmp_filename = $_FILES['file_'.$i]['tmp_name']; $filename = $_FILES['file_'.$i]['name']; printf('%s',$filename); $file_ext = strtolower(substr($filename,strrpos($filename,"."))); echo $file_ext; if (in_array($file_ext, $file_exts)) { $status = "Correct file"; } $filename = "rules_".strtolower($sMap["map"])."_"; $n = 1; $path=$_SERVER['DOCUMENT_ROOT'] . "/dir/" . strtolower($sMap["map"]) . '/'; while (file_exists($path . $filename . . $file_ext)) { $n=$n+1; } if (in_array($file_ext, $file_exts)) { if(move_uploaded_file($tmp_filename, $upload_directory.'/'.$filename.$n.$file_ext)) { $status = '<b> The uploading process went well..</b>'; } else { $status = '<b> There was an error..</b>'; } } else { $status = '<b> The uploading process failed: an empty field is not aloud.</b>'; } if($filename=="") $filename="------"; printf(' %s<BR>%s<BR><br>', ($filename)?$filename.$n.$file_ext:' ', $status); printf('%s',$tmp_filename); //printf('%s',$path); } ?> [/code:1:3053bc6144] Om de fout ergens te kunnen achterhalen heb ik wat echoos geplaatst in de script als ik deze 2 regels 1 voor 1 uitprint [code:1:3053bc6144] $tmp_filename = $_FILES['file_'.$i]['tmp_name']; [/code:1:3053bc6144]of[code:1:3053bc6144] $filename = $_FILES['file_'.$i]['name'];[/code:1:3053bc6144] Krijg ik alleen een 'C' terug in plaats van een hele reeks karakters. Waarom is dat ??
  • Je overschrijft de superglobal $_FILES met waarden uit de $_POST, waarom is dat? Ik vermoed ook dat dat de reden is waarom je script fout loopt. [code:1:8632162c99]$_FILES['file_'.$i] = $_POST['file_'.$i];[/code:1:8632162c99] Overigens, ik heb nog een oud scriptje liggen waarmee je dynamisch een aantal fileuploads kan toevoegen aan de pagina. Misschien vind je dat interessant om te gebruiken. [size=9:8632162c99]Disclaimer: werkt bij mijn weten niet in Firefox, maar zeker weten doe ik dat niet. Code is redelijk oud en ik kan 'm hier niet testen (Geen Fx op werkplek).[/size:8632162c99] [code:1:8632162c99] <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns='http://www.w3.org/1999/xhtml'> <head> <title>multiple file upload</title> <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' /> <style type="text/css"> body { font-family: tahoma, arial; font-size: 12px; } h1 { font-size: 16px; } select#currentuploads { width: 400px; height: 100px; margin-bottom: 10px; } input.upload { width: 400px; margin-right: 10px; margin-bottom: 10px; } div#uploadcontainer { display: none; } </style> <script type="text/javascript"> var n = 1; // counter var sFileAlreadyExists = "This file is already in the uploadlist."; var sFileUploadMaxReached = "No more file uploads allowed. Remove a file from the list before adding this one."; function removeUploadsFromList() { var oContainer = document.getElementById('uploadcontainer'); var oFileInput; var oSelect = document.getElementById('currentuploads'); var i = oSelect.options.length; while (i--) { if (oSelect.options[i].selected) { // remove upload input from form oFileInput = document.getElementById(oSelect.options[i].value); oContainer.removeChild(oFileInput); // remove item from selectbox oSelect.remove(i); } } } /** * Accepts an optional parameter (integer) to limit the amount of * allowed uploads to be added to the list. */ function addUploadToList() { var oContainer = document.getElementById("uploadcontainer"); var oCurrentInputDiv = document.getElementById("currentinput"); var oSelect = document.getElementById('currentuploads'); var oFileInput = document.getElementById('upload_' + n); var sFileName = oFileInput.value; // check if there is a maximum number of allowed uploads var i = oSelect.options.length; if (typeof arguments[0] != 'undefined' && i >= arguments[0]) { alert(sFileUploadMaxReached); return false; } // check if file already exists in the upload list var bFileExists = false; while (i--) { if (sFileName == oSelect.options[i].text) { bFileExists = true; alert(sFileAlreadyExists); break; } } // remove input from form oFileInput = oCurrentInputDiv.removeChild(oFileInput); // add filename to selectbox and move the input to a hidden div // if the file is not already in the list if (!bFileExists) { var oOption = document.createElement("option"); oOption.value = 'upload_' + n; oOption.innerText = sFileName; oSelect.appendChild(oOption); oContainer.appendChild(oFileInput); } // create a new file input n++; oFileInput = document.createElement("input"); var oAttribute = document.createAttribute("name"); oFileInput.setAttributeNode(oAttribute); oAttribute = document.createAttribute("id"); oFileInput.setAttributeNode(oAttribute); oAttribute = document.createAttribute("type"); oFileInput.setAttributeNode(oAttribute); oFileInput.setAttribute("name", "upload_" + n); oFileInput.setAttribute("id", "upload_" + n); oFileInput.setAttribute("type", "file"); oFileInput.className = 'upload'; oCurrentInputDiv.appendChild(oFileInput); return true; } </script> </head> <body> <h1>Multiple file upload</h1> <form action="upload.asp" method="post" enctype="multipart/form-data"> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td valign="top"> <div id="currentinput"> <input type="file" class="upload" id="upload_1" name="upload_1" /> </div> <div id="uploadcontainer"></div> </td> <td valign="top"> <input type="button" onclick="addUploadToList()" value="Add To List" /> </td> </tr> <tr> <td valign="top"> <select id="currentuploads" name="currentuploads" multiple="multiple"></select> </td> <td valign="top"> <input type="button" onclick="removeUploadsFromList()" value="Remove From List" /> </td> </tr> </table> <input type="submit" value="Upload Files" /> </form> </body> </html> [/code:1:8632162c99] p.s. de correcte vertaling voor 'toegestaan' in het Engels: allowed ;)
  • [quote:c10df514de="Annie"]Je overschrijft de superglobal $_FILES met waarden uit de $_POST, waarom is dat? Ik vermoed ook dat dat de reden is waarom je script fout loopt. [code:1:c10df514de]$_FILES['file_'.$i] = $_POST['file_'.$i];[/code:1:c10df514de] p.s. de correcte vertaling voor 'toegestaan' in het Engels: allowed ;)[/quote:c10df514de] hoi annie dank je wel voor je script en reactie! Ik probeerde van de volgende notice af te komen Notice: Undefined index: file_1 in maar dat doe ik dus niet goed als ik het ga overschrijven maar hoe kan ik het dan het beste oplossen ??
  • Je moet de $_FILES array in tact houden en op basis van de inhoud van die array je bewerkingen uitvoeren. De regel die ik heb gequote moet dus sowieso weg. Een loop door de $_FILES en per file je controles uitvoeren en opslaan of een melding geven, zou voldoende moeten zijn. Vergeet de $_POST voor de bestanduploads.
  • alleen, als ik die for-loop in stap 3 vervang met $_FILES , de quote weghaal en de rest van de code met rust laat: for ($i = 1; $i <= $_FILES['file_'.$i]; $i++) { } krijg ik die notice "Notice: Undefined index: file_1 in " juist weer en wordt er nix verzonden
  • bovenaan zetten: [code:1:25ebdd7fc4]var_dump($_FILES);[/code:1:25ebdd7fc4] weet je meteen wat voor vleesch je in de kuip hebt ;)
  • :-? vleesch van 0 dus array(0) { } ik zie door de bomen het bos niet meer :( zou iemand misschien met me mee kunnen kijken, dit is de code in z'n geheel .. :-? [code:1:47872d9559]<? error_reporting(E_ALL); ////////////////////////////////////////////////stap2 bestanden selecteren//////////// if($_GET['action']) { if ($_POST) { //velden creeeren if(isset($_POST['files'])) { if ($_POST['files']) { echo "<FORM METHOD=POST ACTION=index.php?page=" . $_GET['page'] . "&map=". $_GET['map'] . "&module=". $_GET['module'] . "&action=". $_GET['action'] . ">"; //lijst creeeren for ($i = 1; $i <= $_POST['files']; $i++) { printf('<input type="file" name="file_%s" size="50"><br />', $i); } printf('<input class="knop" type="button" onclick="javascript: history.back(-1);" value="Annuleer">'); printf('<input class="knop" type="submit" value="Upload documenten">'); printf('<input type="hidden" name="history_files" value="%s">', $_POST['files']); printf('</form>'); } } //////////////////////////////////////////stap 3 - bestanden uploaden///////////////// else {var_dump($_FILES); $upload_directory = $_SERVER['DOCUMENT_ROOT'] . "/dir/" . strtolower($smap["map"]); $file_exts = array('.txt','.csv'); //upload bestanden printf('<b>Resultaat:</b><br><BR>'); for ($i = 1; $i <= $_FILES['file_'.$i]; $i++) { $tmp_filename = $_FILES['file_'.$i]['tmp_name']; $filename = $_FILES['file_'.$i]['name']; printf(' %s<BR>filename gelukt?', $tmp_filename); $file_ext = strtolower(substr($filename,strrpos($filename,"."))); if (in_array($file_ext, $file_exts)) { $status1 = "Juiste bestand"; printf(' %s<BR>', $status1); } if (!in_array($file_ext, $file_exts)) { $status1 = "OnJuiste bestand"; printf(' %s<BR>', $status1); } $filename = "regels_".strtolower($smap["map"])."_"; $n = 1; $path=$_SERVER['DOCUMENT_ROOT'] . "/dir/" . strtolower($smap["map"]) . '/'; while (file_exists($path . $filename . $n . $file_ext)) { $n=$n+1; } if (in_array($file_ext, $file_exts)) { if(move_uploaded_file($tmp_filename, $upload_directory.'/'.$filename.$n.$file_ext)) { $status2 = '<b> Het verzenden van dit document is goed verlopen..</b>'; } else { $status3 = '<b> Het verzenden van dit document is slecht verlopen..</b>'; } printf(' %s<BR>%s<BR>', $status2, $status3); } else { $status4 = '<b> Het verzenden is mislukt: een lege veld is niet toegestaan. Alleen tekstbestanden zijn toegestaan.</b>'; } if($filename=="") $filename="------"; printf(' %s<BR>%s<BR><br>', ($filename)?$filename.$n.$file_ext:' ', $status4); } } } ///////////////////////////////////////stap 1 - aantal velden selecteren//////////////// else { echo "<FORM METHOD=POST ACTION=index.php?page=" . $_GET['page'] . "&map=". $_GET['map'] . "&module=". $_GET['module'] . "&action=new>"; printf('Aantal te verzenden bestanden : <br>'); printf('<select name="files">'); //creeer lijst met nummers for ($i = 1; $i <= 20; $i++) { printf('<option value="%1$s">%1$s', $i); } printf('</select> '); printf('<input type="submit" class="knop" value="Creëer velden">'); printf('</form>'); } } echo "</TD></TR>"; ?> [/code:1:47872d9559]
  • Heb niet heel je script doorgelopen, maar zie wel dat je form een [url=http://www.w3.org/TR/html4/interact/forms.html#adef-enctype]enctype="multipart/form-data"[/url] mist. Zonder die zal uploaden van bestanden sowieso niet werken.
  • echt heel suf dat ik dat niet zag :evil: ... it's solved ! thk u VERY much!

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.