Autor Zpráva
tachov
Profil
Ahoj. hledám pomoc s vyvolání php funkce unlink.

mám script pro vypisování obrázků ze složky :

<?php 

@$soubor = fopen("img", "r");
while(!feof($soubor))
{
$a = fgets(@$soubor);
 
foreach (glob('img/*.png') as $image)
{                                                                                                                                   
    echo "<div class='imageframe'><a href='unlink.php?soubor=$image'  target='_blank'  ><img src='./img/cross.png' style='width:20px;height:20px;' id='kross' title='' /></a><a class='odkaz' href='$image'  title='$a'><img src='$image' class='img' title='$a' /></a></div>\n";

 }         
}
?>

v němž odkaz
<a href='unlink.php?soubor=$image'  target='_blank'  ><img src='./img/cross.png' style='width:20px;height:20px;' id='kross' title='' />
odkazuje na php ve tvaru:
<?php


  if(isset($_SESSION["id"])){ 
    echo "Jsi přihlášen jako ".$_SESSION["nick"]."."; 

$file = $_GET['soubor'];
if(strpos($file, "./") === false && strpos($file, $soubor) === false && is_file($file)) {
  unlink($file);
}
else {
  echo "Pokus o smazání selhal";
}

  } else {
    echo "Nejsi přihlášen.";
  }
?>

php jako takové funguje.
ale nedaří se mi to vytvořit tak aby se soubor smazal aniž by se otevřelo okno nebo se na něj stránka přesměrovala.

v php i javasriptu jsem dost levej.
prosím o radu či pokud možno nějaký script ve kterém bych pochopil jak pracuje ani strejda google mi nedokázal poradit tak abych to pochopil.
KryVosa
Profil
Máš tam obyčejný odkaz, který otevře nové okno.

To, co ty asi potřebuješ je AJAX. Ten zařídí "otevření" nového okna, pro uživatele neviditelného, kterým něco pošle na server. Teoreticky, pokud ti nevadí, že nebudeš mít od serveru žádný feedback, to můžeš udělat jednoduše pingnutím na server přes obrázek.
Druhá možnost je includnout na konec unlink.php stránku s fotkama (asi index?).

Představoval bych si to nějak takto:
function deleteImg(soubor){
    if (window.XMLHttpRequest)
    {
        var xmlhttp=new XMLHttpRequest();
    }
    else
    {
        var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.open("GET","unlink.php?soubor="+soubor,true);
    xmlhttp.send();
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            alert(xmlhttp.responseText);
        }
    }
    
}
Všechny odkazy pak budou vypadat takto: <a href='javascript:deleteImg($image);' target='_blank' >


Omlouvám se, chybička se vloudila. V odkazu rozhodně nemá být terget="_blank".
tachov
Profil
KryVosa:
ano přesně tohle jsem myslel. dík.
něco podobnýho už jsem i zkoušel ale stejně mi to hodí chybu :

Uncaught ReferenceError: deleteImg is not defined(anonymous function) @ VM3409:1
a poukazuje na : deleteImg(img/wall.png); což by odpovídalo.
je problém někde v odkazu na soubor ?
KryVosa
Profil
Všiml jsem si jedné své drobné chyby, s tímto errorem nesouvisející: Ve volání funkce z linku musí být uvozovky:
<a href='javascript:deleteImg(\'$image\');'>
Pro jistotu jsem uvozovky vložil escapovaně, aby to nerozhazovalo možné uvozovky v PHP.

Zpět k tvé aktuální chybě:
Problémem je, že javascript nezná funkci "deleteImg", což znamená, že celý můj script ve stránce ještě není (Nebo se nenahrál kvůli chybě.) Jakým způsobem a kde je script připojen?
Můžeš mi poskytnou živou ukázku webu, kde máš tenhle problém?
tachov
Profil
KryVosa:
stránky si dělám pro sebe abych je mohl odkukoliv upravovat jejich obsah . je to spíš takový vlastní redakční systém.
zatim jen dělám na správě galerie.

marektachov.maweb.eu
login je zatim marecek a heslo taky

jinak ten script mám vyloženě na stránce kde mám všechny scripty, pak to předělám aby se načítaly ze souboru.
KryVosa
Profil
Tak taková chyba se mi nepovadla už dlouho :D
Chyba je, že v deklaraci funkce je deleteImg("soubor"){...} místo deleteImg(soubor){...}
Kdyby byl jakýkoliv další problém, tak řekni.
Výsledný script:
function deleteImg(soubor){
    if (window.XMLHttpRequest)
    {
        var xmlhttp=new XMLHttpRequest();
    }
    else
    {
        var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.open("GET","unlink.php?soubor="+soubor,true);
    xmlhttp.send();
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            alert(xmlhttp.responseText);
        }
    }   
}
Konečná podoba linku:
<a href='javascript:deleteImg(\'$image\');'>
tachov
Profil
vtip je v tom že i předtím jsi to měl bez uvozovek ale stejně se vypisujou ... chyba je u mě. ale stejně to nefunguje když jsem to odmazal. už si s tím lámu hlavu 3 dny.
KryVosa
Profil
Ještě jedna drobnost: unlink.php vrací celou kostru webové stránky. Správně by neměl vracet žádný HTML, jen "echnutí", že bylo smazáno/nesmazáno.

EDIT: Vidím ještě jednu chybu: do odkazu posíláš špatné hodnoty, a uvozovky jsou každá jiná: <a href="javascript:deleteImg(\" img="" cross.png\');'="">
V HTML by měl odkaz vypadat takto: <a href="javascript:deleteImg(\"cross.png\");">


Koukám realtime na tvé úpravy: Ve volání funkce z odkazu teď chybí uvozovky úplně.
tachov
Profil
KryVosa:
to byla moje chyba protože jsem to zkoušel i s uvozovkama ale stejně to nefunguje.
s těma esc. uvozovkama to ani neukáže jméno obrázku.
tet tam mám tu tvojí 1.ní verzi.
KryVosa
Profil
Problémem je, že v odkazu ty uvozovky musí být. Bez uvozovek bude javascript hledat proměnou "img" a dělit jí "obrazek.png", přičemž ani jedna z těchto proměnných neexistuje. Ty potřebuješ javascriptu poslat string (řetězec, text...) s cestou k obrázku.
Takže nakonec musí odkaz vypadat v HTML takto: <a href="javascript:deleteImg('cross.png');">
tachov
Profil
asi budu muset najít jinej způsob jak vypisovat obsah složky dvojité uvozovky mi do echa nejdou.
KryVosa
Profil
Takhle: echo "<a href='javascript:deleteImg(\"$image\")'>
Říká se tomu escapování uvozovek.
tachov
Profil
KryVosa:
aha .. už jsem z toho uplně mimo už to šlape. já dávál ty uvozovky opačně. super . Moc děkuju tet jdu študovat jak to přesně funguje.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

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

0