Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: kuvanlataamis ongelma

manninen [25.11.2010 15:08:35]

#

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">&nbsp;</td></tr>
<tr>
<td style="background:white; width:15%;">
    <input type="hidden" name="" value="">
    <br />&nbsp;Kuvatiedosto:</td>
    <td> <input type="file" name="kuva"></td>
</tr>
<tr>
<td style="width:15%;">&nbsp;Kuvateksti : </td>
<td><textarea name="kuvateksti"></textarea></td>
</tr>
<tr>
<td style="width:15%;">&nbsp;Käytetäänkö kuvaa taustakuvana? </td>
<td><input type="checkbox" name="tausta" value="1"></td>
</tr>

<tr>
<td style="width:15%;">&nbsp;Pysty vai vaakakuva? </td>
<td>Pysty : <input type="radio" name="valinta" value="1"> &nbsp; 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">&nbsp;</td></tr>
</table>

</form>
</body>
</html>

manninen [26.11.2010 08:36:50]

#

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?

Metabolix [26.11.2010 10:13:00]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta