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> <a href="info.php">Info</a> <a href="login.php">Kirjaudu</a> <a href="register.php">Rekisteröidy</a> <a href="tiedostot.php">Tiedostot</a> <a href="etsi.php">Etsi</a> <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> © Fin Web Design </div> </body> </html> <?php } ?>
$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.
Tuo ei ollut se mikä estää sen...
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.
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.
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
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...
Näköjään. Jouluserver jotenkin tökkäili :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.