Hei! Miksi seuraava koodinpätkä antaa ladata vain yhden kuvan. Satunnaisesti menee useampikin :)
<title>Tiedoston lataaminen palvelimelle</title> </head> <body> <table class="nav"> <tr> <td><a href="hallinta.php">Takaisin hallintasivulle</a></td> </tr> </table> <br />
<?php $valittukuva = ''; $valittukuva = $_FILES["kuva"]; if(!empty($_POST["lahetys"])){ LataakuvaPalvelimelle($valittukuva); } function extension($f) { $info = pathinfo($f); $e = &$info["extension"]; return $e; } function LataakuvaPalvelimelle($valittukuva){ $kansionnimi = 'images'; $kanta = ''; $kanta = $_REQUEST['tausta']; // Tarkistetaan onko kuvaa valittu if(empty($valittukuva)){ return; } if(empty($valittukuva["type"])){ $valittukuva["type"] = 'image/'.extension($valittukuva["name"]); } // Tarkistetaan onko kuvan tyyppinä jpeg tai gif, jos on mennään eteenpäin if($valittukuva["type"] == 'image/jpg' || $valittukuva["type"] == 'image/jpeg' || $valittukuva["type"] == 'image/gif' || $valittukuva["type"] == 'image/jfif' || $valittukuva["type"] == 'image/pjpg' || $valittukuva["type"] == 'image/pjpeg' ){ // merkki @ estää virheet siltä varalta, että hakemisto on jo olemassa. @mkdir("$kansionnimi"); $kuvahakemisto = "$kansionnimi/"; // Muutetaan nimi turvallisemmaksi $korvattavat = array("ä", "ö", "å", " "); $kuvannimi = str_ireplace($korvattavat, "", "$valittukuva[name]"); # Tarkistetaan onko tiedosto jo olemassa if (file_exists("$kuvahakemisto" . "$kuvannimi")) { echo "<p class='ilmoitus'>Samanniminen tiedosto on jo ladattu!</p>"; return; } /* Tarkistaa, onko parametrina annettu tiedosto kelvollinen www-lomakkeen kautta palvelimelle ladattu tiedosto ja siirtää sen lisäksi tiedoston haluttuun paikkaan. */ if($file["error"] != 0 && $valittukuva["size"] <= 0){ echo 'Virhe kuvan latauksessa.'; return; } if(move_uploaded_file($valittukuva["tmp_name"], $kuvahakemisto . $kuvannimi)){ $kuva = $kansionnimi.'/'.$kuvannimi; $paikka = strpos($valittukuva["name"], "."); if($paikka !== false) { $katkaisu = substr($valittukuva["name"], 0, $paikka); } if($kanta == 1){ $taulu = 'tausta'; } else{ $taulu = 'kuvagalleria'; } $k = sprintf("INSERT INTO $taulu SET kuva='%s', nimi='%s', sijainti=%d, kuvateksti='%s', suunta=%d", get_magic_quotes_gpc() ? mysql_real_escape_string(stripslashes(trim($kuva))) : mysql_real_escape_string(trim($kuva)), get_magic_quotes_gpc() ? mysql_real_escape_string(stripslashes(trim($katkaisu))) : mysql_real_escape_string(trim($katkaisu)), 0, get_magic_quotes_gpc() ? mysql_real_escape_string(stripslashes(trim($_REQUEST['kuvateksti']))) : mysql_real_escape_string(trim($_REQUEST['kuvateksti'])), intval($_REQUEST['valinta']) ); if(!($t = mysql_query($k))){ echo mysql_error(); return; } //header("location:lataakuva.php"); echo '<p>Kuvan lataaminen on onnistunut</p>'; } else { echo "<p>Kuvan siirtäminen haluttuun kansioon on epäonnistunut</p>"; } } else{ echo "<p>Kuvan tunniste on väärä. Salitut muodot on jpeg, jpg sekä gif. Jos tyyppi on kuitenkin oikea, ei kuvan tyyppiä voitu tunnistaa.</p>"; } } ?>
<form enctype="multipart/form-data" action="" method="post"> <table border="0" style="width:100%; border:1px solid black;" cellspacing="0"> <tr><td style="background:#66CC66;" colspan="2"> </td></tr> <tr> <td style="background:white; width:15%;"> <input type="hidden" name="" value=""> <br /> Kuvatiedosto:</td> <td> <input type="file" name="kuva"></td> </tr> <tr> <td style="width:15%;"> Kuvateksti : </td> <td><textarea name="kuvateksti"></textarea></td> </tr> <tr> <td style="width:15%;"> Käytetäänkö kuvaa taustakuvana? </td> <td><input type="checkbox" name="tausta" value="1"></td> </tr> <tr> <td style="width:15%;"> Pysty vai vaakakuva? </td> <td>Pysty : <input type="radio" name="valinta" value="1"> Vaaka : <input type="radio" name="valinta" value="0"></td> </tr> <tr> <td colspan="2"><input name="lahetys" type="submit"value="Lähetä"> <br /> <br /> </td> </tr> <tr><td style="background:#66CC66;" colspan="2"> </td></tr> </table> </form> </body> </html>
Ongelmahan sijaitsee tässä kohtaan.
if(move_uploaded_file($valittukuva["tmp_name"], $kuvahakemisto . $kuvannimi))
Joidenkin kuvien kohdalla
$valittukuva['tmp_name']
on tyhjänä. Minkä vuoksi?
Minusta seuraava ehto näyttää omituiselta:
if($file["error"] != 0 && $valittukuva["size"] <= 0){
Nythän hyväksyt myös tiedostot, joille on ilmoitettu jokin koko mutta joiden lataus on mennyt pieleen. Kokeilepa ottaa jälkimmäinen osa pois tai laittaa &&:n paikalle ||. Itse en ole koskaan tarkistanut kokoa, koska errorin pitäisi joka tapauksessa kertoa onnistumisesta.
Aihe on jo aika vanha, joten et voi enää vastata siihen.