Autor Zpráva
pito
Profil
Zdravím,

Mám galerií fotek, kde v administraci si nahraju foto které se mi uklada do slozky na server a take se uloží jméno fotky př.: 256.jpg do databáze a také to i odstraňuji přes administraci kde nejprv vyberu kategorií a po vybraní se mi zobrazí fotografie dané kategorie kterou jsem si vybral.Potom po kliknutí na fotku se mi odstraní jak ze složky tak z db.Jenže teď nedávno sem musel přehodit všechen web na jiný hosting a od té doby mi nejde odstranit foto z databaze.Nevím kde může být chyba, ze složky jde,ale z databaze nikoliv.

Nevím jestli to pomůže když dám zde script:

<?
if (!isset($_GET['k'])){


if (!isset($_POST['kategorie'])){
?>
<h3>Vyber kategorii</h3><br>
<form method="post">
    
     <select size="1" name="kategorie">
                              <?php require "config.php";
                              $dotaz=mysql_query("SELECT kategorie FROM slozky")or die(mysql_error());
                              while ($vysledek=mysql_fetch_array($dotaz)):
                                  echo "<option value=\"$vysledek[kategorie]\">$vysledek[kategorie]</option>";
                                endwhile;?>
                                  echo "</select>
        <input type="submit" name="kat" value="Odeslat">
  </form>

<br><br><br>


<?php
}else{
$kat=$_POST['kategorie'];
echo"<h3>Vyber obrazek k odstranění - po kliknutí na fotografií ji odstraníš </h3><br>
";
require "config.php";
$radek=mysql_query("SELECT * FROM $kat ")or die (mysql_error());
while($vysledek=mysql_fetch_array($radek)):
$img= ereg_replace(".jpg","mini.jpg",$vysledek['obrazek']);

$k=$vysledek['obrazek'];

echo "<a class=\"d\" href=\"index.php?id=odstranit&amp;k=$k&amp;kat=$kat\"><img src=\"../images/".$kat."mini/".$img."\"></a>";
endwhile;

}

}else{
echo "<p>".$_GET['k']."</p>";
  $q=$_GET['k'];
  $kat=$_GET['kat'];
    $a= ereg_replace(".jpg","mini.jpg",$q);
    $b= ereg_replace(".jpg","big.jpg",$q);
      $soubor_mini="../images/".$kat."mini/".$a."";
      $soubor_big="../images/".$kat."big/".$b."";
        unlink($soubor_mini);
        unlink($soubor_big);
          require "config.php";
          mysql_query("DELETE FROM $kat WHERE obrazek='$k'");
}

?>



ale myslím si jestli to není náhodou tím, že jsem mněl dysi na hostingu jméno serveru brambora.kapusta.cz a teďka mám jméno serveru jen localhost tak nevím.
Alphard
Profil
Tak jestli výpisy fungují, jste k databázi připojen správně. Vypište případnou chybu pomocí mysql_error() a dumpněte si složený dotaz (a zkontrujte, jestli jsou dosazeny správné proměnné).
Tori
Profil
Řádek 51: místo $k má být
mysql_real_escape_string($_GET['k'])
, na předchozím serveru bylo zřejmě zapnuté register_globals a na aktuálním není.
Nemáte nijak ošetřené vstupy z formuláře, někdo vám může smazat libovolný soubor z libovolného adresáře (-li se dobře koukám) - názvy souborů ošetřujte alespoň basename. Stejně tak je nutné ošetřit data, která jdou do SQL dotazu - např. tou funkcí mysql_real_escape_string, aby vám nějaký šťoural nesmazal celou tabulku.
pcmanik
Profil
pito:
Taktiez nepouzivajte kratky zapis php tj. <? ale piste <?php Totizto niektore hostingy mozu mat zablokovane kratke direktivy.
pito
Profil
Tori:
 Řádek 51: místo $k má být
mysql_real_escape_string($_GET['k'])

To nejde.jak to nahradím tym $k tak stránka je bila nic tam není.Možná to mám špatně napsané.

Zkoušel jsem přidat do .htaccess register_globals= on ale nefunguje to tak nevím.
Tori
Profil
pito:
$kat = mysql_real_escape_string($_GET['kat']);
$obrazek = mysql_real_escape_string($_GET['k']);
mysql_query("DELETE FROM `$kat` WHERE obrazek='$obrazek' LIMIT 1") or die(mysql_error());

..opraveno, doufám
Alphard
Profil
[#6]
Tori, zabezpečíš jedno a další díra je hned vedle, proměnná $kat je z GET. Dosadit tam něco jako users -- a je to :-)
Kromě toho to vypadá, že pito má pro každou kategorii vlastní tabulku, což nepovažuji za šťastné.
pito
Profil
Tori:
Moc děkuji.Už je to funkční,ale stejně nechápu jak to, že to na tým prvním hostingu fungovalo a na tým druhým ne.
Tori
Profil
Alphard:
A jo, omlouvám se, nejsem zvyklá na to že se používají proměnné zvenku jako názvy tabulek, tak mi to v tu chvíli nedošlo.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0