Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Tiedostopäätteen tarkistus

alker [26.08.2009 21:57:26]

#

Eli tulee kokoajan:
Tervetuloa!

Antamassasi kuva tiedostossa on ei sallittu pääte

Mutta minulla on kaikki oikein

Käsittely koodi on:

<?PHP
include("session.php");
if (!$_SESSION['tunnus']) {
header("Location:login.php");
}
else {
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<title>Lataamokeskus :.: Tiedostoja sinulle</title>

<link rel="stylesheet" href="style.css" type="text/css" />

</head>
<body>


<div id="logo">
<div class="logo">
<img src="logo.png">
</div>
</div>
<div id="wrap">


<div class="navi">
<?PHP
include("navi.php");
?>
</div>


<div id="left">
<h1>Tervetuloa!</h1>



		<P>
<?php
include("fun.php");
if (!$_SESSION['tunnus']) {
header("Location:index.php");
}
else {
yhdista();
if (!$_POST['nimi'] or !$_POST['kuvaus']) {
echo "Jätit jonkun kohdan tyhjäksi!";
}
else {
define("UPLOAD_DIRECTORY", "upload/"); // määritellään tiedostojen uusi koti, eli minne tiedostot upitetaan
define("KUVA_KOKO", 778240); // yksittäisen tiedoston maksimikoko
define("LINKKI_KOKO", 41943040); // yksittäisen tiedoston maksimikoko
list($kuva_paate) = array_reverse(explode(".",$_FILES['kuva']['name']));
list($linkki_paate) = array_reverse(explode(".",$_FILES['linkki']['name']));
$linkki_paate = strtolower($kuva_paate);

if(!is_dir(UPLOAD_DIRECTORY)) {
    mkdir(UPLOAD_DIRECTORY, 0777); // jos hakemistoa ei ole olemassa, luodaan sellainen
}


$kuva_paatteet = array("gif", "png", "bmp", "tif", "tiff");
if (!in_array(strtolower($kuva_paate), $kuva_paatteet)) { die("Antamassasi kuva tiedostossa on ei sallittu pääte"); }
$linkki_paatteet = array("zip", "rar", "ZIP", "rar");
if (!in_array(strtolower($linkki_paate), $linkki_paatteet)) { die("Antamassasi kuva tiedostossa on ei sallittu pääte"); }
        if($_FILES['kuva']['size'] > KUVA_KOKO) { die ("Liian iso kuva tiedosto!<br>95kt on raja"); }
        if($_FILES['linkki']['size'] > LINKKI_KOKO) { die ("Liian iso kuva tiedosto!<br>5mt on raja"); }
$i = 1;
$tiedoston_nimi = $_FILES['kuva']['name'];
    while (is_file(UPLOAD_DIRECTORY.$tiedoston_nimi)) {
        $halkaistu = explode(".",$_FILES['kuva']['name']);
        $halkaistu[0] = $halkaistu[0]."_".$i;
        $tiedoston_nimi = implode(".",$halkaistu);
        $i++;
    }
$i2 = 1;
$tiedoston_nimi2 = $_FILES['kuva']['name'];
    while (is_file(UPLOAD_DIRECTORY.$tiedoston_nimi2)) {
        $halkaistu = explode(".",$_FILES['kuva']['name']);
        $halkaistu[0] = $halkaistu[0]."_".$i;
        $tiedoston_nimi2 = implode(".",$halkaistu);
        $i2++;
    }
        move_uploaded_file($_FILES['kuva']['tmp_name'], UPLOAD_DIRECTORY.$tiedoston_nimi); // tallennetaan tiedosto serverille
        move_uploaded_file($_FILES['linkki']['tmp_name'], UPLOAD_DIRECTORY.$tiedoston_nimi2); // tallennetaan tiedosto serverille

$nimi = mysql_real_escape_string($_POST['nimi']);
$linkki = mysql_real_escape_string("http://fames.jouluserver.com/".UPLOAD_DIRECTORY.$tiedoston_nimi2);
$kuvaus = mysql_real_escape_string($_POST['kuvaus']);
$kuva = mysql_real_escape_string("http://fames.jouluserver.com/".UPLOAD_DIRECTORY.$tiedoston_nimi);
$koko = $_FILES['linkki']['size'];
$tunnus = $_SESSION['tunnus'];
$kate = $_POST['kate'];
$sql = "insert into lataamo (id,tunnus,nimi,linkki,kuvaus,kuva,kate,koko) values (0,'$tunnus','$nimi','$linkki','$kuvaus','$kuva','$kate','$koko')";
$tulos = mysql_query($sql);
echo "Tiedoston lisäys onnistui!";
?>
<br>
<a href="index.php">Takaisin etusivulle</a>
<?php
}
}
?>
<br><br><br><br><br>
<P>
</p>


</div></div>

<div id="right">

<div class="box"><div class="box_padding">
<b>Mainos</b>
</div></div>

<div class="in">

		<p>
<?php include("sivu.php"); ?>
		</p>

		<p>

		</div>
		<div class="box"><div class="box_padding">
<b><?php include("linkki.php"); ?></b>
</div></div>


<div id="footer">
<div class="bottom">
<a href="index.php">Etusivu</a>&nbsp;&nbsp;
<a href="info.php">Info</a>&nbsp;&nbsp;
<a href="login.php">Kirjaudu</a>&nbsp;&nbsp;
<a href="register.php">Rekisteröidy</a>&nbsp;&nbsp;
<a href="tiedostot.php">Tiedostot</a>&nbsp;&nbsp;
<a href="etsi.php">Etsi</a>&nbsp;&nbsp;
<br />
<br /><br />
<br />
<div class="ftext">
© Joona "Tietovirus" Nevalainen & Aleksi "Alker" Tanskanen 2009<br><br>
<?php include("banner.php"); ?>
</div></div>
</div>


</body>
</html>
<?php
}
?>

Ja formi on tämä:

<?php
include("session.php");
if (!$_SESSION['tunnus'] ) {
header("Location:index.php");
}
else {
include("fun.php");
yhdista();
$sql = "select id,nimi from kate";
$tulos = mysql_query($sql);
?>
<html>
<head>
<title>Fin Web Design</title>
<link rel="stylesheet" type="text/css" href="tyyli.css">
</head>
<body>
<div id="sivu">
<div id="logo"><br><img src="logo.png"></div>
<div id="navi">
<?php
include("navi.php");
?>
</div>
<br>
<div id="sisalto">

Kuvan maksimi koko on 95kt.<br>
Lataustiedoston maksimi koko on 5mt.
<form method="POST" action="lisaa2.php">
Kirjoita sivupohjan nimi:<br>
<input type="text" name="nimi"><br>
Kirjoita kuvaus sivupohjalle:<br>
<input type="text" name="kuvaus"><br>
Anna lataustiedosto:<br>
<input type="file" name="linkki" size="75"><br>
Anna kuvatiedosto:<br>
<input type="file" name="kuva" size="75"><br>
Valitse kategoria sivupohjalle:<br>
<select name="kate">
<?php

while ($rivi = mysql_fetch_assoc($tulos)) {
echo "<option value=\"";
echo $rivi['id'];
echo "\" >";
echo $rivi['nimi'];"</option>";
}
?>
</select><br>
<input type="submit" value="Lisää sivupohja">
</form>
</div>
</div>
<div id="copy"><br>
&copy Fin Web Design
</div>
</body>
</html>
<?php
}
?>

Metabolix [26.08.2009 22:00:06]

#

$linkki_paate = strtolower($kuva_paate);
Sijoitat siis $linkki_paate-muuttujaan saman kuin kuvan päätteenä on, joten zip- ja rar-päätteet hyväksyvä tarkistus hylkää sen. Tarkistuksessa on väärä virheilmoitus.

Opettele oikeasti etsimään noita virheitä itsekin. Olisit voinut echolla tai virheilmoituksesta selvittää, mille riville asti skripti pääsee. Olisit voinut sitten echolla katsoa, mitä muuttujassa on, ja sitten ihan hakutoiminnolla etsiä kohdan, jossa kyseistä muuttujaa muokataan. $linkki_paate esiintyy koodissasi tasan kolme kertaa.

alker [26.08.2009 22:06:12]

#

Tuo ei ollut se mikä estää sen...

Lebe80 [26.08.2009 22:06:26]

#

Kyllä! Kunnon debugit kehiin, echot ruudulle ja esim. print_r:llä tulostat ruudulle, jos kyseessä on taulukko tai olio.

Näin saat muuttujien sisällöt oikeasti tietoon. Älä oleta olevasi oikeassa, jos ohjelmoimasi ohjelma ei toimikaan. Echota ennen jokaista if-lausetta tarkistettavat arvot niin, että näet mitä verrataan, ja mitä pitäisi saada. Lisäksi echota if-lauseen sisällä, jotta näet pääsikö ohjelma sinne asti.

Metabolix [26.08.2009 22:16:44]

#

Kyllä se melkoisen varmasti on juuri tuo. Toinen vaihtoehto on, että yrität ihan oikeasti lähettää vääränlaisia tiedostoja.

Tarkista nyt vielä, mitä se echo sanoo muuttujista.

Teuro [27.08.2009 07:35:41]

#

Yksi ihan hauska tapa debuggailla scriptejä on kirjoittaa alkuun esimerkiksi

<?php
define("DEBUG", true);
?>

Tällöin voi koodissa kirjoittaa suoraan kaikki debug tulosteet esimerkiksi seuraavasti

<?php
if(DEBUG){
  echo $muuttuja;
}
?>

Tällä tavalla voi kirjoitella kaikkien haluttujen muuttujien tulostukset valmiiksi, ja sitten kun ohjelma toimii oikein muuttaa vain tuon DEBUG arvon falseksi. Ihan mukavaa ottaa se nimittäin sitten käyttöön, kun huomataan ettei se ohjelma ihan vielä toimikaan...

alker [27.08.2009 14:08:47]

#

Näköjään. Jouluserver jotenkin tökkäili :)

Vastaus

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

Tietoa sivustosta