Cześć,
Zainteresowałem się prostym uploaderem plików https://www.codexworld.com/upload-file-using-javascript-php/#ProjectDemoDownload. Miałby on wgrywać pliki bez przeładowywania strony. I tutaj pierwsze pytanie - czy można bezkarnie używać pływających ramek - iframe? Pamiętam jak uczyłem się php na początku obecnego wieku, to już wtedy było w książce, żeby raczej odchodzić o używania iframe. Jak to jest obecnie?
Ale do rzeczy. W JavaScript ogólnie raczkuję. Ni epotrzafię znaleźć pczyczyny dlaczego nie wykonuje się warunek if (success == 1){ , czyli jest komunikat There was an error during file upload!.
index.html:
<http://december.com/html/4/element/html.html> <http://december.com/html/4/element/head.html> <http://december.com/html/4/element/script.html type="text/javascript"> function startUpload(){ document.getElementById('uploadProcess').style.visibility = 'visible'; document.getElementById('uploadForm').style.visibility = 'hidden'; return true; } function stopUpload(success,uploadedFile){ var result = ''; if (success == 1){ result = '<http://december.com/html/4/element/span.html class="sucess-msg">The file was uploaded successfully!<\/span><http://december.com/html/4/element/br.html/><http://december.com/html/4/element/br.html/>'; //Uploaded file preview var embed = document.getElementById("UploadedFile"); var clone = embed.cloneNode(true); clone.setAttribute('src',uploadedFile); embed.parentNode.replaceChild(clone,embed); }else { result = '<http://december.com/html/4/element/span.html class="error-msg">There was an error during file upload!<\/span><http://december.com/html/4/element/br.html/><http://december.com/html/4/element/br.html/>'; } document.getElementById('uploadProcess').style.visibility = 'hidden'; document.getElementById('uploadForm').innerHTML = result + '<http://december.com/html/4/element/label.html>File: <http://december.com/html/4/element/input.html name="myfile" type="file" size="30" /><\/label><http://december.com/html/4/element/label.html><http://december.com/html/4/element/input.html type="submit" name="submitBtn" class="sbtn" value="Upload" /><\/label>'; document.getElementById('uploadForm').style.visibility = 'visible'; return true; } </http://december.com/html/4/element/script.html> </http://december.com/html/4/element/head.html> <http://december.com/html/4/element/body.html> <http://december.com/html/4/element/form.html action="upload.php" method="post" enctype="multipart/form-data" target="uploadTarget" onsubmit="startUpload();" > <http://december.com/html/4/element/p.html id="uploadProcess">Uploading...<http://december.com/html/4/element/br.html/><http://december.com/html/4/element/img.html src="assets/loader.gif" /><http://december.com/html/4/element/br.html/></http://december.com/html/4/element/p.html> <http://december.com/html/4/element/p.html id="uploadForm" align="center"><http://december.com/html/4/element/br.html/> <http://december.com/html/4/element/label.html> File: <http://december.com/html/4/element/input.html name="myfile" type="file" size="30" /> </http://december.com/html/4/element/label.html> <http://december.com/html/4/element/label.html> <http://december.com/html/4/element/input.html type="submit" name="submitBtn" class="sbtn" value="Upload" /> </http://december.com/html/4/element/label.html> </http://december.com/html/4/element/p.html> <http://december.com/html/4/element/iframe.html id="uploadTarget" name="uploadTarget" src="#" style="width:0;height:0;border:0px solid #fff;"></http://december.com/html/4/element/iframe.html> </http://december.com/html/4/element/form.html> <!-- Uploaded file preview --> <http://december.com/html/4/element/div.html> <embed id="UploadedFile" src="" width="390px" height="160px"> </http://december.com/html/4/element/div.html> </http://december.com/html/4/element/body.html> </http://december.com/html/4/element/html.html>
<?php $success = 0; $uploadedFile = ''; //File upload path $uploadPath = 'uploads/'; $targetPath = $uploadPath . http://www.php.net/basename( $_FILES['myfile']['name']); if(@http://www.php.net/move_uploaded_file($_FILES['myfile']['tmp_name'], $targetPath)){ $success = 1; $uploadedFile = $targetPath; } http://www.php.net/sleep(1); ?> <script type="text/javascript">window.top.window.stopUpload(<?php http://www.php.net/echo $success; ?>,'<?php http://www.php.net/echo $uploadedFile; ?>');</script>
masz mase kodow jak sie robi upload przy pomocy ajax, lepiej skorzystaj z tego.
co do twojego kodu to w pliku upload.php ustawiasz $success na 1 albo 0. wiec sprawdz czy tam sie cos nie chrzani. W pierwszej kolejnosci sprawdz co zawiera $_FILES bo tam moze byc poprostu kod bledu.
Jesli to nie pomoze to usun malpe z move_uploaded_file
$_FILES zawiera to:
A masz wlaczone wyswietlanie wszystkich bledow?
No i upewnij sie co napewno zawiera $success
var_dump($success);
Tak, jest włączone wyświetlanie błędów, ale dodałem jeszcze error_reporting(E_ALL); na początku.
A takie głupie pytanie... gdzie to var_dump($succes) wrzucić żeby zobaczyć rezultaty? Bo po wrzuceniu w upload.php nie wyświetla nigdzie tego. Właściwie to nie do końca rozumiem chyba co tu się dzieje - odsyłam przez formularz do upload.php ale żadne echo z niego się nigdzie nie wyświetla. Natomiast formularz przechodzi, bo przecież $_FILES, które występuje tylko w upoad.php pokazuje co ma w sobie.
No to jak wyswietliles $_FILES skoro nie wiesz gdzie to sie wyswietla?
W konsolie przegldarki w zakladce networ masz tam wszystikie calle jakie robisz, i tam klikasz na dany request i widzisz co zwraca
Wypada odpisać, że problem rozwiązany. Nie wykonywała się ta linijka:
bo przecież katalog uploads znajduje się poziom wyżej. Trywialny błąd ze złą ścieżką.
if(http://www.php.net/move_uploaded_file($_FILES['myfile']['tmp_name'], $targetPath)){
Mowilem ci jak sprawdzic co zwraca call do IFRAME. Zrobiles to? Spradziles zakladke NETWORK w konsoli przegladarki?
Ech, że też tutaj na forum nie ma możliwości uploadu obrazka
Na moje to nie pokazuje błędu. Zobacz:
https://yourimageshare.com/ib/t3fyxHaR5u
Zmieniłem ścieżkę na złą. Oczywiście jest błąd-komunikat zdefiniowany przeze mnie, ale w konsoli go nie widzę.
Ty nie masz go widziec w consoli, tylko ty masz kliknac na dany request i tam w body/response bedzie pokazane co idzie z tego request do ciebie. Nie boj sie klikac samodzielnie gdzie popadnie, nie pracujesz w elektrowni jadrowej
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)