Muokkasin "hieman" tätä galleria scriptiä https://www.ohjelmointiputka.net/koodivinkit/24905-php-php-kuvagalleria-upload ja kyselisin gallerian bugeista ja tietoturva aukoista(siis muokkaamani). Julkaisen n. 700 riviä pitkän koodin, jos joku haluaa kokeilla ohjelmaa.
Ja tässä linkki galleriaan: http://84.248.87.212/kotisivut/juha127/kuvat/gallery2.php?
ps. Otsikko oli hankala keksiä ja on vieläkin outo
edit. Koodi:
<?php /* gallery.php Luo hakemistot upload, kuvat, thumbs ja niille kirjoitusoikeudet Käyttö omalla vastuulla, muokkaaminen sallittu ja jopa suotavaa. Koodailija: Tinqe ( #kumilenkki @ QuakeNet | tinqe (a) kumilenkki.com ) Koodiin lisännyt Juha127 - Kommentointi - Kommenttien muokkaus - Sivunumerointi - Kirjautuminen - Adminillä vain mahdollisuus uploadia ##### Seuraavassa on tietokantaan luotavien taulukoiden koodi, joka voidaan suorittaa PhpMyAdminillä CREATE TABLE kuvat ( id INT, nimi TEXT, filename TEXT ); CREATE TABLE user ( id INT, nimi TEXT, passu TEXT, arvo INT, nick TEXT ); CREATE TABLE kommentit ( id INT, img INT, nick TEXT, kommentti TEXT, aika INT, user_id INT ); */ ## Tästä voit muuttaa kuvan max kokoja $conf_maxfilesize = 1024; // kt $tmb_max_w = 160; // Thumb-kuvan max-leveys $tmb_max_h = 120; // Thumb-kuvan max korkeus $img_max_w = 640; // Kuvan max leveys $img_max_h = 480; // Kuvan max korkeus $error = ""; $conf_maxfilesize = $conf_maxfilesize*1024; ##Yhteys ## Määritetään tietokanta ja tietokannan osoite ja tunnukset $db = "gallery"; $db_tunnus = "tunnus"; $db_passu = "passu"; $db_osoite = "localhost"; ## Nyt muodostetaan yhteys $yhteys = mysql_connect($db_osoite, $db_tunnus, $db_passu); mysql_select_db($db, $yhteys); $max = "4"; // sivu numerointi $max_s = "3"; // Kuvia etusivulla ## Tiedoston nimi, jos käytät dynaamista sivujärjestelmää tulee tämä olla muodossa: esim: ndex.php?sivu=galleria& ## Ja yksittäisen tiedoston perään tulee ? ## Miksi näin? Tämä helpottaa paljon mukautumista, joten sinun ei tarvitse muuttaa 30 kohdasta tiedosto nimeä kun ## sen ## voi muuttaa alusta $f_n = "gallery2.php?"; // '.$conf_maxfilesize.' ## Otetaan selvää montako käyttäjää on ja ilmoitetaan ettei olla kirjauduttu sisään. $kysely = 'SELECT * FROM users ORDER BY id'; $haku = mysql_query($kysely) or die ("Virhe: ".mysql_error()); $kayttajia = mysql_numrows($haku) or die ("Virhe :".mysql_error()); $sisalla = FALSE; ## Tallentaan kommentti if ($_GET['mode'] == "komt") { ## Haetaan seuraavan kommentin id $kysely = 'SELECT * FROM kommentit WHERE img = ' . $_GET["img"]; $haku = mysql_query($kysely); $id = mysql_numrows($haku) + 1; ## Tarkistetaan että kentät ovat täynnä if (preg_match("/^([0-9]+)$/", $_GET["img"]) AND ! empty($_POST["nick"]) AND ! empty($_POST["kommentti"])) { if ($_COOKIE["flood"] < (time() - 60)) { setcookie("flood", time(), time() + 240); ##Asetetaan keksiin koska lähetettiin kommentti if (isset($_COOKIE["foorum_id"])) { $user_id = $_COOKIE["foorum_id"]; } else { $user_id = "0"; } $rivi = 'INSERT INTO kommentit (id, img, nick, kommentti, aika, user_id) VALUES (' . $id . ', ' . $_GET["img"] . ', "' . strip_tags(htmlspecialchars($_POST["nick"])) . '", "' . strip_tags(htmlspecialchars($_POST["kommentti"])) . '", ' . time() . ', '. $user_id . ')'; ## Tallennetaan kommentti mysql_query($rivi) or die ("Virhe:".mysql_error()); header('Location: '. $f_n .'img=' . $_GET["img"]); } else { $virhe .= "Eipas floodita!"; } ## Ilmoitetaan floodaamisesta } ## Jos hommassa tuli virhettä ilmoitetaan siitä else { $virhe .= " Kaikki kentät pitää täyttää!"; } header('Location: '. $f_n .'img=' . $_GET["img"] . '&virhe=' . $virhe); } ## Sisään kirjautuminen elseif ($_GET['mode'] == "login") { for ($i = 0; $i < $kayttajia; $i++) { if (mysql_result($haku, $i, "nimi") == $_POST['nimi'] AND mysql_result($haku, $i, "passu") == md5($_POST["passu"])) { setcookie("foorum_nimi", $_POST['nimi'], time() + 3600); setcookie("foorum_passu", md5($_POST['passu']), time() + 3600); setcookie("foorum_id", mysql_result($haku, $i, "id"), time() + 3600); header("Location: $f_n"); break; } } echo '<table> <form action="'.$f_n.'mode=login&id=12" method="post">'; if ($_GET['id'] == 12) { echo '<tr><td style=" color: red; ">Käyttäjätunnus tai salasana väärin! <small>Muista isoilla ja pienillä kirjaimilla on eroa.</small></td><td></td></tr>'; } echo '<tr><td>Käyttäjä tunnus: </td><td><input type="text" name="nimi"/></td></tr> <tr><td>Salasana: </td><td><input type="password" name="passu" /></td></tr> <tr><td></td><td><input type="submit" value="Log in" /></td></tr> </form> </table>'; } elseif ($_GET['mode'] == "logout") { setcookie("foorum_nimi", "", time() - 60 * 10); setcookie("foorum_passu", "", time() - 60 * 10); setcookie("foorum_id", "", time()- 60 * 10); header("Location: $f_n"); } else { for ($i = 0; $i < $kayttajia; $i++) { if (mysql_result($haku, $i, "nimi") == $_COOKIE["foorum_nimi"] AND mysql_result($haku, $i, "passu") == $_COOKIE["foorum_passu"]) { $sisalla = TRUE; $login_link = '<a class="valikko_link" href="'.$f_n.'mode=logout">Log out [' . $_COOKIE["foorum_nimi"] . '] </a>'; break; } } if ($sisalla == FALSE) { $login_link = '<a class="valikko_link" href="'.$f_n.'mode=login">Log in </a> <a href="'.$f_n.'mode=rek">Rekisteröidy</a>'; } } if ($_GET['mode'] == "edit_komt") { ## Tulostetaan kommentin muokkaus ruutu $keksi = $_COOKIE['foorum_id']; $image = $_GET['img']; $iidee = $_GET['id']; $kysely = ("SELECT * FROM kommentit WHERE user_id = \"$keksi\" AND img = \"$image\" AND id = \"$iidee\""); $haku = mysql_query($kysely); if (mysql_numrows($haku) == 0) { echo "Kommenttia ei ole. Tai sinulla ei ole oikeuksia muokata kuvaa"; } else { $kommentti = mysql_result($haku, 0, "kommentti"); echo "<form action=\"$f_n mode=tal_komt&img=", $_GET["img"], "&id=", $_GET["id"], "\" method=\"post\"> <textarea cols=\"40\" rows=\"4\"name=\" kommentti\" />$kommentti </textarea><br /> <input type=\"submit\" value=\"Muokkaa\" /> </form>"; } } ## Tallennetaan kommentin muutos elseif ($_GET['mode'] == "tal_komt") { if (preg_match("/^([0-9]+)$/", $_GET["img"]) AND $sisalla == TRUE) { ## Muokataan kommentti $foorum_id = $_COOKIE["foorum_id"]; $id = $_GET["id"]; $kommentti = strip_tags(htmlspecialchars($_POST["kommentti"])); $img = $_GET["img"]; $kysely = "UPDATE kommentit SET kommentti = \"$kommentti\" WHERE user_id = \"$foorum_id\" AND img = \"$img\" AND id = \"$id\""; $haku = mysql_query($kysely) or die ("Virhe: ".mysql_error()); header('Location: '. $f_n .'img='.$_GET["img"]); } echo "Virhettä muokkauksessa!<br />"; } ## Näytetään rekistöröitymis lomake if ($_GET['mode'] == "rek") { echo '<table> <form method="post" action="'.$f_n.'mode=kirjaa_user"> <tr><td>Käyttäjä tunnus: </td><td><input type="text" name="user_name" /></td></tr> <tr><td>Salasana: </td><td><input type="password" name="pass1" /></td></tr> <tr><td>Salasana uudestaan: </td><td><input type="password" name="pass2" /></td></tr> <tr><td></td><td><input type="submit" value="RekisTöröidy" /></td><tr> </table>'; } ##Käsitellään rekistöröinti lomake elseif ($_GET['mode'] == "kirjaa_user") { ##Tarkistetaan kuinka mones kättäjä $query = "SELECT * FROM users ORDER BY id"; $result = mysql_query($query) or die ("Virhe: rivi 20". mysql_error()); $id = mysql_numrows($result) + 1; ##Täsmäävätkö salasanat if ($_POST['pass1'] == $_POST['pass2'] AND isset($_POST['user_name'])) { $yes = TRUE; if (preg_match("/ä|ö|å|\(|\)|\/|\\|\.|\[|\]|\<|\>/",$_POST['user_name']) OR preg_match("/ä|ö|å|\(|\)|\/|\\|\.|\[|\]|\<|\>/", $_POST['pass1'])) { $yes = FALSE; } else { ##Jos... niin tarkistetaan, ettei käyttäjä tunnus ole jo käytössä for ($i = 0; $i < mysql_numrows($result); $i++) { if ($_POST['user_name'] == mysql_result($result,$i,"nimi")) { $yes = FALSE; break; } } } ##Jos arvot hyväksyttiin merkataan tietokantaan uusi käyttäjä if ($yes == TRUE) { $passu = md5($_POST['pass1']); $uus_aihe = 'INSERT INTO users(id, nimi, passu, arvo, nick) VALUES (' . $id . ',"' . strip_tags(htmlspecialchars($_POST["user_name"])) .'", "' . $passu . '", 0, "'. strip_tags(htmlspecialchars($_POST["user_name"])) .'"); '; mysql_query ($uus_aihe) or die ("Virhe: ". mysql_error()); header("Location: $f_n"); } ##Jos arvot olivat virheelliset palataan lomakkeeseen ja näytetään virheilmoitus else { echo '<p style=" color:red; ">Käyttäjä tunnus jo käytässä!</p>'; echo '<table> <form method="post" action="'.$f_n.'mode=kirjaa_user"> <tr><td>Käyttäjä tunnus: </td><td><input type="text" name="user_name" /></td></tr> <tr><td>Salasana: </td><td><input type="password" name="pass1" /></td></tr> <tr><td>Salasana uudestaan: </td><td><input type="password" name="pass2" /></td></tr> <tr><td></td><td><input type="submit" value="Rekistöröidy" /></td><tr> </table>'; } } ## Ilmoitetaan virheestä else { echo '<p style=" color:red; ">Salasanat eivät täsmää!</p>'; echo '<table> <form method="post" action="'.$f_n.'mode=kirjaa_user"> <tr><td>Käyttäjä tunnus: </td><td><input type="text" name="user_name" /></td></tr> <tr><td>Salasana: </td><td><input type="password" name="pass1" /></td></tr> <tr><td>Salasana uudestaan: </td><td><input type="password" name="pass2" /></td></tr> <tr><td></td><td><input type="submit" value="Rekistöröidy" /></td><tr> </table>'; } } echo $login_link, "<br /><b><a href=\"$f_n\">Galleriasivu</a></b><br><br>"; ##Admin voi uploadia if ($_COOKIE["foorum_nimi"] == "admin") { print('<form enctype="multipart/form-data" action="'.$f_n.'" method="POST"> <input type="hidden" name="MAX_FILE_SIZE" value="10000000" /> Tiedosto: <input name="file" type="file" /> Nimi: <input type="text" name="nimi" /> <input type="submit" name="submit" value="Send File" /> </form>'); if(isset($_POST['submit'])) { // selvitetään kuvan koko ja tyyppi list($width, $height, $type) = getimagesize($_FILES['file']['tmp_name']); // Tarkastetaan tiedosto $file_check = TRUE; if($_FILES["file"]["size"] > $conf_maxfilesize) { $file_check = FALSE; $error = $error."Tiedosto on liian suuri!<br>"; } if($_FILES["file"]["size"] == 0) { $file_check = FALSE; $error = $error."Tiedoston koko on 0!<br>"; } // Tarkistetaan tiedoston koko if( $file_check ) { if($type == 2) // JPEG { $original_image = imagecreatefromjpeg($_FILES["file"]["tmp_name"]); $new_ext = 'jpg'; } elseif($type == 1) // GIF { $original_image = imagecreatefromgif($_FILES["file"]["tmp_name"]); $new_ext = 'gif'; } elseif($type == 3) // PNG { $original_image = imagecreatefrompng($_FILES["file"]["tmp_name"]); $new_ext = 'png'; } else { // Tiedostomuoto ei ole tuettu, poistetaan $error = $error."Tiedostomuoto ei ole tuettu!<br>"; $file_check = FALSE; unlink($_FILES["file"]["tmp_name"]); } // Kuvan koon muuttaminen ja tallennus palvelimelle if($file_check) { // Lasketaan thumbin uusi koko, kuvasuhteen määrittely $new_w = $width/$tmb_max_w; // 1024 / 640 = 1,6 $new_h = $height/$tmb_max_h; // 2000 / 480 = 4,17 if($new_w > $new_h || $new_w == $new_h) { /* Lasketaan kuvasuhde siten, että kuva mahtuu thumbille määrättyyn arvoon */ $tmb_w = $width / $new_w; $tmb_h = $height / $new_w; } elseif($new_w < $new_h) { $tmb_w = $width / $new_h; $tmb_h = $height / $new_h; // Käytä $new_h } // Luodaan määrätyn kokoinen thumbnail-kuva $thumb = imagecreatetruecolor($tmb_w, $tmb_h); // Resample (parempi resize) imagecopyresampled($thumb, $original_image, 0, 0, 0, 0, $tmb_w, $tmb_h, $width, $height); // Tallennetaan kuva tiedostoon $time = time(); if($type == 2) // JPEG { imagejpeg($thumb, 'thumbs/'.$time.'.jpg'); $paate = ".jpg"; } elseif($type == 1) // GIF { imagegif($thumb, 'thumbs/'.$time.'.gif'); $paate = ".gif"; } elseif($type == 3) // PNG { imagepng($thumb, 'thumbs/'.$time.'.png'); $paate = ".png"; } $query = "SELECT * FROM kuvat ORDER BY id"; $result = mysql_query($query); $id = mysql_numrows($result) + 1; $rivi = 'INSERT INTO kuvat (id, nimi, filename) VALUES (' . $id . ', "' . $_POST["nimi"] . '", "' . $time . $paate . '")'; mysql_query($rivi); // Thumb tallennettu, nyt luodaan normikokoinen kuva // Lasketaan kuvalle uusi koko siten, että kuvasuhde säilyy $new_w = $width/$img_max_w; // 1024 / 640 = 1,6 $new_h = $height/$img_max_h; // 2000 / 480 = 4,17 if($new_w > $new_h || $new_w == $new_h) { /* Lasketaan kuvasuhde siten, että kuva mahtuu thumbille määrättyyn arvoon */ if($new_w < 1) { // Jos alkuperäinen kuva on pienempi kuin luotava, luodaan alkuperäisen kokoinen kuva $new_w = 1; } $img_w = $width / $new_w; $img_h = $height / $new_w; } elseif($new_w < $new_h) { if($new_h < 1) { // Jos alkuperäinen kuva on pienempi kuin luotava, luodaan alkuperäisen kokoinen kuva $new_h = 1; } $img_w = $width / $new_h; $img_h = $height / $new_h; // Käytä $new_h } // Luodaan määrätyn kokoinen thumbnail-kuva $image = imagecreatetruecolor($img_w, $img_h); // Resample (parempi resize) imagecopyresampled($image, $original_image, 0, 0, 0, 0, $img_w, $img_h, $width, $height); // // Tallennetaan kuva tiedostoon if($type == 2) // JPEG { imagejpeg($image, 'kuvat/'.$time.'.jpg'); } elseif($type == 1) // GIF { imagegif($image, 'kuvat/'.$time.'.gif'); } elseif($type == 3) // PNG { imagepng($image, 'kuvat/'.$time.'.png'); } // // Tallennetaan alkuperäinen tiedosto, poista kommentti jos haluat talteen alkuperäisen tiedoston // move_uploaded_file($_FILES["file"]["tmp_name"], 'upload/'.$time.'.'.$new_ext); print('Lisätty: '.$_FILES["file"]["name"].'<br><img src="kuvat/'.$time.'.'.$new_ext.'" border="1"><br>'); } // Poistetaan uploaded temp-tiedosto unlink($_FILES["file"]["tmp_name"]); } // Jos muuttuja $error ei ole tyhjä, voidaan olettaa että on sattunut jokin virhe if($error !== '') { // Tulostetaan virheet print($error); } } } if(isset($_GET['img'])) { $query = "SELECT * FROM kuvat ORDER BY id"; $result = mysql_query($query); $kuvia = mysql_numrows($result); ## Sivu numerointi if ($_GET["img"] == 0) { echo "1 "; } else { echo "<a href=\"$f_n img=0\">1</a> "; } ## Jos kuvia on vähemmän kuin kerrallaan näytettäviä if ($kuvia < $max) { for ($i = 1; $i < $kuvia; $i++) { echo "<a href=\"$f_n img=", $i, "\" />", ($i + 1) , "</a> "; } } ## Jos kuvia on enemmän kuin kerraal näytettäviä elseif ($kuvia > $max) { ## Määritellään Mistä kohtaa tulostetaan $alk = $_GET["img"] - $max; $lop = $_GET["img"] + $max; ## Jos ollaan lopussa ei tulosta olemattomia linkkejä if ($lop > $kuvia - 1) { $lop = $kuvia - 1; } ## Miinus merkkisiä sivuja ei ole if ($alk < 1) { $alk = 1; } ## Tyylikkäät pisteet if ($_GET["img"] > 4) { echo "..."; } for ($i = $alk; $i < $lop; $i++) { if ($i == $_GET["img"]) { echo ($i + 1), " "; ##Ei tulosteta nykyisen sivun linkkiä, siitä näkee missä ollaan nyt } else { echo "<a href=\"$f_n img=", $i, "\" />", ($i + 1) , "</a> "; } } if ($_GET["img"] < $kuvia - 5) { echo "..."; } } if ($_GET["img"] == $kuvia - 1) { echo $kuvia, " "; } else { echo "<a href=\"$f_n img=", $kuvia - 1, "\">", ($kuvia), "</a> "; } ## Tulostetaan kuva echo "<br />", mysql_result($result, $_GET["img"], "nimi"), "<br /><img src=\"kuvat/", mysql_result($result, $_GET["img"], "filename"), "\" alt=\"", mysql_result($result, $_GET["img"], "nimi"), "\" />"; $kysely = 'SELECT * FROM kommentit WHERE img = ' . $_GET["img"]; $haku = mysql_query($kysely); $id = mysql_numrows($haku); echo "<table>"; ## Tulostetaan kommentit ja muokkaa linkki for ($i = 0; $i < $id; $i++) { echo "<tr><td width=\"50\">", mysql_result($haku, $i, "nick"), ": </td><td><small><small>", date("H:i j.n.Y ",mysql_result($haku, $i, "aika")), " <a href=\"", $f_n ,"mode=edit_komt&img=", $_GET["img"], "&id=", mysql_result($haku, $i, "id"), "\">Muokka</a></small></small><br />", mysql_result($haku, $i, "kommentti"), "</td></tr>"; } ## Ilmoitetaan virheestä echo '<tr><td></td><td>'.$_GET["virhe"]; echo "</td></tr><tr><td>"; ## Kommentointi lomake echo '<form action="'.$f_n.'mode=komt&img=' . $_GET["img"] .'" method="post">'; ## Kirjautuneena ei tarvitse kirjoittaa nimeä if ($sisalla == TRUE) { echo '<input type="hidden" name="nick" value="' . $_COOKIE["foorum_nimi"] .'" />'; } else { echo 'Nick: </td><td><input type="text" name="nick" /></td></tr>'; } echo '<tr><td>Kommentti: </td><td><textarea rows="4" cols="40" name="kommentti" /></textarea></td></tr> <tr><td></td><td><input type="submit" value="Kirjoita" /> </form></td></tr> </table>'; } else { ## Tulostetaan listaus kuvista $query = "SELECT * FROM kuvat ORDER BY id"; $result = mysql_query($query); $kuvia = mysql_numrows($result); ## Sivu numerointi if (! isset($_GET["page"])) { $_GET["page"] = 0; } if ($_GET["page"] == 0) { echo "1 "; } else { echo "<a href=\"$f_n page=0\">1</a> "; } ## Jos kuvia on vähemmän kuin kerrallaan näytettäviä if ((round($kuvia / $max_s)) < $max_s) { for ($i = 1; $i < ceil($kuvia / $max_s); $i++) { echo "<a href=\"$f_n page=", $i, "\" />", ($i + 1) , "</a> "; } } ## Jos kuvia on enemmän kuin kerraal näytettäviä elseif ($kuvia / $max_s >= $max_s) { ## Määritellään Mistä kohtaa tulostetaan $alk = $_GET["page"] - $max; $lop = $_GET["page"] + $max; ## Jos ollaan lopussa ei tulosta olemattomia linkkejä if ($lop > $kuvia / $max_s - 1) { $lop = ceil($kuvia / $max_s - 1); } ## Miinus merkkisiä sivuja ei ole if ($alk < 1) { $alk = 1; } ## Tyylikkäät pisteet if ($_GET["page"] > 4) { echo "..."; } for ($i = $alk; $i < $lop; $i++) { if ($i == $_GET["page"]) { echo ($i + 1), " "; ##Ei tulosteta nykyisen sivun linkkiä, siitä näkee missä ollaan nyt } else { echo "<a href=\"$f_n page=", $i, "\" />", ($i + 1) , "</a> "; } } if ($_GET["page"] < ceil($kuvia / $max_s) - 5) { echo "..."; } } if ($_GET["page"] == ceil($kuvia / $max_s) - 1) { echo ceil($kuvia / $max_s) , " "; } else { echo "<a href=\"$f_n page=", ceil($kuvia / $max_s) - 1, "\">", ceil($kuvia / $max_s), "</a>"; } echo "<br />"; if ($_GET["page"] <= 0) { $o = 0; } else { $o = $_GET["page"] * $max_s; } if ($kuvia < $max_s) { $u = $kuvia; } else { $u = ($max_s * $_GET["page"]) + $max_s; } // Ei kuvia nyt loputtomasti ole =) if ($u > ceil($kuvia / $max_s)) { $u = $kuvia; } // Tulostetaan kuvat for ($i = $o; $i < $u; $i++) { echo "<a href=\"$f_n img=", $i, "\"><img src=\"thumbs/", mysql_result($result, $i, "filename"), "\" alt=\"", mysql_result($result, $i, "nimi"), "\" /></a><br />", mysql_result($result, $i, "nimi") , "<br />"; } } ?>
Siis, miten voimme etsiä bugeja/aukkoja jos emme näe koodiasi?
Nyt näkyy koodi
Aihe on jo aika vanha, joten et voi enää vastata siihen.