Mam problem z wrzucaniem plików na serwer.
Poniższy kod działa prawidłowo jako osobny plik ale jak go wrzucę do innego gdzie jest już inny formularz wrzucający dane do bazy to upload plików nie działa. Dziwne jest to ze kiedyś działał ale aplikacja była mniej rozbudowana o kod tak PHP jak i js. Oczywiście isset wskazuje na inny input niż główny do edycji rekordu w bazie. Nie wiem jak do tego podejść, zacząłem już czytać o podwójnym formularzu na stronie ale nie wiem czy to dobry kierunek. Czytałem też to https://www.w3schools.com/TAgs/att_button_formenctype.asp ale nie do końca rozumiem działanie. Jakieś porady jak to ogarnąć?
<?php require('db.php'); ?> <!DOCTYPE HTML> <html lang="pl"> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> <title>Upload file</title> </head> <body> <form action="" method="post" enctype="multipart/form-data"> <fieldset> <legend>Upload file</legend> <label for="zl">Zlecenie</label><input type="text" name="zl" id="zl"><br> <input type='file' id='file' name='file'><br> <input name='submit' type='submit' value='Dodaj'></br> </fieldset> </form> <?php if (isset($_POST['submit'])) { #retrieve file name from file $fileName = $_FILES['file']['name']; #max mb $fileSize = $_FILES['file']['size']; #temporary file name to store file $tname = $_FILES['file']["tmp_name"]; #get file ext from file $fileExt = explode('.', $fileName); #change to lower case $fileActualExt = strtolower(end($fileExt)); #allowed ext $allowed = array('jpg','jpeg','png','pdf'); if (in_array($fileActualExt,$allowed)){ if($fileSize <= 5000000){ #file name with a random number so that similar don't get replaced $pname = rand(1000,10000)."-".$fileActualExt; #upload directory path $uploads_dir = 'uploads'; #TO move the uploaded file to specific location move_uploaded_file($tname, $uploads_dir.'/'.$pname); echo "OK"; }else{ echo "File too big"; } }elseif(!in_array($fileActualExt,$allowed)){ echo "Bad format"; } } if(isset($_POST['submit'])){ $zl = $_REQUEST['zl']; $upload = "UPDATE guitars SET img2 ='".$pname."' WHERE ID=$zl"; mysqli_query($con,$upload); } ?> </body> </html>
Hej Mariusz,
Musiałbyś pokazać, w jaki sposób łączysz te dwa formularze w jednym pliku. Bez tego to trochę jak wróżenie z fusów.
Generalnie tendencja jest taka, że kod HTML wyświetlający dany formularz jest w innym pliku, niż kod PHP obsługujący dane z formularza. Wtedy mając jeden plik z widokiem, na którym masz wiele różnych formularzy – każdy z formularzy miałby parametr action odpowiadający plikowi przetwarzającemu jego dane.
Wtedy nie masz też problemu z wieloma zmiennymi o tych samych nazwach, które mogłyby przyjść z różnych formularzy.