[ bobans72 @ 01.02.2021. 07:11 ] @
Pozdrav !!!

Imam problem sa insertom u tabli (zip_name) odabirom datoteka i kreiranjem u zip fajlu nema problema sve su odabrane datoteke u zip fajlu zapakovane i kreirane
u (zip_datoteke) folderu kako treba ali ne može da uradi insert (zip_name) u tabli ne prijavljuje nikakvu grešku ali nema ni unosa u tabli.
Ako neko hoće da pogleda dole u kodu u čemu je problem i šta je greška.
Hvala unapred.

Code:

<?php        
include('konekcija.php');    
if(isset($_POST['nova_datoteka'])){

    $zip = new ZipArchive();
    $zip_name = getcwd(). "/zip_datoteke/". time() . ".zip";
    $zip->open($zip_name, ZIPARCHIVE::CREATE);
    for ($a = 0; $a < count($_FILES["files"]["name"]); $a++)
    {
    $newFile = file_get_contents($_FILES["files"]["tmp_name"][$a]);
    $zip->addFromString($_FILES["files"]["name"][$a], $newFile);
    } 
    $zip->close();
  
if (mysqli_query($db, "INSERT INTO tab_dat (file) VALUES ('$zip_name')")){ 
echo "OK !";
} else {
echo ("GREŠKA !". mysqli_error($db));
}
}
mysqli_close($db);
header('location:index.php');
exit();
?>

//index.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>FILE UPLOAD</title>
</head>
<body>
<form method="POST" action="upload.php" enctype="multipart/form-data">
 <input type="file" name="files[]" required="required" multiple="multiple"/>
 <button type="submit" name="nova_datoteka">SNIMI</a></button>  
 </form>   
</body>
</html>

[ bokinet @ 01.02.2021. 12:57 ] @

- Niste postavili koja je greska dobijena kao povratna info.

- Eascape value za deo koji se odnosi na vrednost polja zip_name
[ bobans72 @ 01.02.2021. 20:17 ] @
Hvala na odgovoru.
Nijednu grešku ne prikazuje samo u tabli ne uradi insert ostane prazno kao da nije ni uradjen submit.
Meni je potrebno da upiše putanju i naziv fajla odakle bih mogao da se preuzme taj zip fajl.
Probao sam odabirom jedne datoteke ne zip nego txt,jpg,jpeg itd... i onda uradi insert u tabli ali sa drugim kodom a sa ovim zip neće.
Evo koda ovako uplouduje datoteku i uradi insert u tabli npr. slika.jpg u koloni (file) bez problema a sa zip-om neće samo zapakuje odabrane datoteke i uplouduje u folderu (zip_datoteke) ali ne radi insert sa putanjom i nazivom datoteke.
Kod nije nešto u radu a ne mogu pronaći šta je u pitanju pa ako neko zna neka pomogne ako hoće.

Code:

<?php
//upload.php        
include('konfiguracija.php');    
if(isset($_POST['nova_datoteka'])){
      $errors= array();
      $file_name = $_FILES['file']['name'];
      $file_size =$_FILES['file']['size'];
      $file_tmp =$_FILES['file']['tmp_name'];
      $file_type=$_FILES['file']['type'];
      $fileend=explode('.',$file_name);
      $file_ext=strtolower(end($fileend));
      
      $extensions= array("mp4","txt","jpeg","jpg","png","pdf");
      
      if(in_array($file_ext,$extensions)=== false){
       
         $errors[]="Ekstenzija datoteke nije podržana.";
      }
      
      if($file_size > 5242880){
      
         $errors[]='Veličina datoteke mora biti tačno ( 5 MB ).';
      }
      
      if(empty($errors)==true){
         move_uploaded_file($file_tmp,"datoteke/".$file_name);
        echo "U redu !";
      }else{
         print_r($errors);
    
      }  

if (mysqli_query($db, "INSERT INTO tab_dat (file) VALUES ('$file_name')")){ 
echo "OK !";
} else {
echo ("GREŠKA !". mysqli_error($db));
}
}
mysqli_close($db);

header('location:index.php');
}
exit();

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>FILE UPLOAD</title>
</head>
<body>
<form method="POST" action="upload.php" enctype="multipart/form-data">
 <input type="file" name="file" required="required"/>
 <button type="submit" name="nova_datoteka">SNIMI</a></button>  
 </form>   
</body>
</html>









[ Zlatni_bg @ 01.02.2021. 21:20 ] @
Code:
  <button type="submit" name="nova_datoteka">SNIMI</a></button>  


Kakav a tag ovde zatvaras, izmedju ostalog? Vidim da su neki delovi vrlo pedantno uradjeni, neki nisu, kao da su dve osobe ovo radile, ili je copy/paste delova?
[ bobans72 @ 01.02.2021. 21:44 ] @
</a> to je bespotrebno to sam izvukao deo iz koda koji je ponovo proveren pre postavljanja ovde da bih vama bilo lakše i preglednije a nisam to obrisao ali i sa tim i bez toga isto radi.
Evo kako izgleda i tabla u bazi :
id - tip (int 11) AUTO-INCREMENT PRIMARY KEY
file - tip (text) utf8_general_ci
A i kada je file - tip-(varchar) nikakve promene nema.
Samo posle snimi uključio sam prikaz grešaka i prikazuje (Konekcija u redu) i (0 zapisa u tabli) i ništa drugo što se tiče upload zip koda a ovaj drugi radi insert kako treba.
Juče celog dana i danas celog popodneva i dalje isprobavam i pokušavam da pronadjem šta nije u redu i ništa od toga. Ako neko išta vidi što ja ne vidim u ovom kodu koja je greška uvek dobrodošla pomoć a ja i dalje ću pronalaziti rešenje sve dok ne pronadjem pa makar i za mesec dana . Hvala unapred.
[ djoka_l @ 01.02.2021. 22:28 ] @
Daješ potpunoi nebitan deo koda, bitne stvari propuštaš.

U prvom skriptu radiš include konekcija.php, u drugom (koji radi) include konfiguracija.php
Otkud da znamo da si uopšte otvorio konekciju prema mysql bazi.

Dodaj neki debug echo, uradi echo varijable zip_name, stavi SQL upit u varijablu, pa uradi echo da vidimo šta dobiješ.

Daj opis tabele u formi sql komande (create table ...).
[ Zlatni_bg @ 01.02.2021. 22:56 ] @
Necu biti od pomoci, bar ne trenutno ali na duze staze mozda da. Daki i ostatak ekipe koja radi moderaciju moze slobodno da me sankcionise ukoliko smatra da nije na mestu.

Pazi, da bi uopste mogao da pratis greske, moras da imas neku koegzistentnost u kodu. Vidim da ti PHP nije primarna delatnost, i necu zalaziti u to - ne mora da bude. Ono kako mogu da ti pomognem je par saveta, jer se ovde ne radi o tome zasto nesto nece da udje u bazu i slicno, vec problem oko debaginga problema i nalazenja greske ili propusta koji nije greska.

Prvo, ne mozes pisati logiku programa na srpskom i engleskom. Promenljive, baza, tabele i slicno moraju da koriste jedan jezik. Inace ces poludeti, veruj mi, kad stvari krenu da se komplikuju, ti udjes u deseti sat kucanja koda neces znati sta ti se kako zove.

Drugo, nemoj da skracujes nazive tabela, promenljivih, funkcija, metoda, klasa, bilo cega. Mnogi misle u pocetku da je sto bolje staviti $i umesto $increment i to je sasvim okej kad se radi o takvim petljama, ali funkciju koja tipa radi sanitizaciju unosa, recimo StripCharactersForDBInput() ne mozes da nazoves scfdbi(). Kad kod krene da se siri, neces znati koja promenljiva ti sta sadrzi.

Trece, malo pogledaj tipove u MySQL bazi - text je ultra-sport u odnosu na ograniceni varchar. Ovo je next-level ali na vreme kreni da razmisljas o tome da bi stvorio dobre navike. Isto tako, gledajuci poslednji post i ono kako ti je strukturisana tabela, "file" kolona meni ne govori nista o tome sta se u njoj nalazi. Ocekivao bih bukvalno kompletan fajl da se tu nalazi. Nazovi to file_name, file_path ili tako nesto.

Cetvrto, iako vidim da ne koristis OOP, pocni da radis neki autoloading, makar bio preko jednog fajla. Onda preko PHPa radi redirekcije koje su ti potrebne u JS, iako postoje i pedantniji nacini. Zato nam je i tesko da vidimo ceo kod ako ne znamo sta fajl koji include-ujes sadrzi, i ukljuci error reporting za sve.

Peto i ono sto mi deluje primarno ovde - copy/paste je dobra stvar kad ti je ono sto ti treba finalno. Ako je neki srednji deo koda ili pocetni a ti ne razumes kako radi, bices u problemu jer moze da se desi da ne odradi ono sto zelis, i onda neces znati zasto ti nesto ne radi, a to je ostalo u nekom delu koji ti je radio. I kad odradis copy paste (radimo ga svi ponekad kad trazimo resenja), RAZUMI taj deo koda, procitaj, pogledaj sta se tu desava. Verujem da je zato 99% problema oko ovog zip fajla nastalo. Vidim to kroz "==" i "===", vidim kroz "Datoteka mora biti tacno 5MB" i slicno.

Nemoj ovo shvatiti negativno, nisam ti pomogao oko ovog problema, ali kad razradis ovaj problem i nastavis sa funkcionalnostima, naleteces na druge probleme. Miksujes OOP kad ti je ponudjen online kao resenje, koristis proceduralno programiranje... nemoj tako. Iz ovoga ne mozemo da vidimo da li je problem u kodu, u toj klasi ZipArchive koju koristis, u filesystem dozvolama na samom serveru, u tome sto na serveru nema instaliran plugin ili softver za zip da bi to uopste radilo, bukvalno moze 10 stvari da bude.
[ bobans72 @ 01.02.2021. 23:24 ] @
konekcija.php je u pitanju nego još uvek testiram i isprobavam pa je greška u nazivu.
Evo je konekcija.php:
Code:

<?php
$db = mysqli_connect("localhost","root","","upload_zip");
if (mysqli_connect_errno())
 {
 echo "Povezivanje sa mysql-om nije uspelo: " . mysqli_connect_error()."<br>";
 }else{
 echo "Konekcija je u redu !"."<br>";
 }
?>

Evo upload.php
Code:

<?php
include('konekcija.php');
if(isset($_POST['nova_datoteka'])){

    $zip = new ZipArchive();
    $zip_name = getcwd(). "/zip_datoteke/". time() . ".zip";
    $zip->open($zip_name, ZIPARCHIVE::CREATE);
    for ($a = 0; $a < count($_FILES["files"]["name"]); $a++)
    {
    $newFile = file_get_contents($_FILES["files"]["tmp_name"][$a]);
    $zip->addFromString($_FILES["files"]["name"][$a], $newFile);
    } 
    $zip->close();
  
if (mysqli_query($db, "INSERT INTO tab_dat (file) VALUES ('$zip_name')")){ 
echo "OK !";
} else {
echo ("GREŠKA !". mysqli_error($db));
}
}
mysqli_close($db);
header('location:index.php');
exit();
?>

Evo index.php
Code:

<?php        
include('konekcija.php');
$datoteka=$_POST['file'];
$sql = "SELECT * FROM tab_dat WHERE file='$datoteka";
$result = mysqli_query($db, $sql);

if (mysqli_num_rows($result) > 0) {
  // Izlazni podaci svakog reda
  while($row = mysqli_fetch_assoc($result)) {
    echo "Id: " . $row["id"]. " Datoteka: " . $row["file"] . "<br>";
}  
} else {
  echo "0 zapisa u tabli !";
}
mysqli_close($db);
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>FILE UPLOAD</title>
</head>
<body>
<form method="POST" action="upload.php" enctype="multipart/form-data">
 <input type="file" name="files[]" required="required" multiple="multiple"/>
 <button type="submit" name="nova_datoteka">SNIMI</button>  
 </form>   
</body>
</html>

Evo SQL baze:
Code:

-- phpMyAdmin SQL Dump
-- version 4.9.1
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1
-- Generation Time: 02. Feb 2021. u 01:32
-- Verzija servera: 5.5.45
-- PHP Version: 7.3.13

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */;
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;
/*!40101 SET @[email protected]@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Database: `test`
--

-- --------------------------------------------------------

--
-- Struktura tabele `tab_dat`
--

CREATE TABLE `tab_dat` (
  `id` int(11) NOT NULL,
  `file` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Indexes for dumped tables
--

--
-- Indexes for table `tab_dat`
--
ALTER TABLE `tab_dat`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `tab_dat`
--
ALTER TABLE `tab_dat`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
COMMIT;

/*!40101 SET [email protected]_CHARACTER_SET_CLIENT */;
/*!40101 SET [email protected]_CHARACTER_SET_RESULTS */;
/*!40101 SET [email protected]_COLLATION_CONNECTION */;



Prikazuje mi echo iz ovog kompletnog koda:
Konekcija je u redu !
0 zapisa u tabli !
Ako vam ovo ne znači ništa a to je kompletan kod iz koga ne dobijam insert nego samo zip fajl sa datotekama u folderu (zip_datoteke).
Pošto sada proveravam ostale greške sada ću da proverim i echo $zip_name pa javljam ali nema nijedna druga informacija sem ove što sam napisao.


[Ovu poruku je menjao bobans72 dana 02.02.2021. u 01:33 GMT+1]
[ bobans72 @ 02.02.2021. 00:03 ] @
Posle inserta u phpmyadmin-u daje informaciju: MySQL je vratio prazan rezultat (nula redova). (Query took 0.0005 seconds.)
A echo $zip_name; ne prikazuje nikakvu informaciju.
Inače koristim IIS 8.5 ako vam to nešto znači.
[ Zlatni_bg @ 02.02.2021. 00:34 ] @
Je l' moze dump/screenshot od phpinfo() ? Imas PECL?
[ djoka_l @ 02.02.2021. 00:39 ] @
Stavio si autocommit=0
da bi se upisalo, moraš da daš eksplicitni commit. Ili da postaviš autocommit=1
Možda...
[ Branimir Maksimovic @ 02.02.2021. 00:53 ] @
Bice da je to.