Autor Zpráva
Lamič
Profil *
Ahoj, mám kod s nahráváním screenshotů do jedný tabulky, názvy souborů odděluji ;
teďkon mi de o mazání jednotlivých souborů vytvořil sem si

if (isset($_GET['delete_screen'])){
	$del = MySQL_Query("DELETE FROM matches WHERE id = ".$_GET['edit_match']." LIMIT 1 ");


teďkon mě ale vůbec nenapadá jak zvolit právě ten správný název souboru pro smazání

screenshoty se mi ukládaj ve sloupci screeny
jenikkozak
Profil
Lamič:
názvy souborů odděluji ;
Znamená to, že v jedné buňce máte více hodnot, které jsou oddělené středníkem? V takovém případě navrhuji vytvořit novou tabulku, do níž se budou jednotlivé hodnoty ukládat včetně s id matche, ke kterému patří. Poté bude změna jednoho záznamu jednodušší, aniž by bylo nutno manipulovat s ostatními.
Spectator
Profil
Pokud chceš smazat jeden údaj v tabulce, pak nepoužívej DELETE, ale UPDATE a nahraď hodnotu nějakým nulovým prvkem, který máš nastaven pro danou tabulku (NULL, 0, ...)
xmark
Profil
Spectator:
cože??

Lamič:
screenshoty se mi ukládaj ve sloupci screeny

Objasni vztah mezi tvými výrazy screenshot a soubor, dále pak mezi $_GET['delete_screen'] a $_GET['edit_match']. Záznamy v tabulce i soubory můžeš mazat podle jejich názvů.
Lamič
Profil *
jenikkozak:
Tohoto sme se právě chtěl vyvarovat, ale asi mi nci jiného nezbývá.
xmark:
screenshot - název obrázku, který je nahrán v tabulce matches ve sloupci screeny např. 1.jpg;2.jpg;3.jpg; atak dále...
soubor - je vlastně to samé jako screenshot :)
$_GET['delete_screen'] - pomocí adresy např. www.mujweb.cz/admin.php?page=zapasy&delete_screen=1.jpg smaže z databáze daný údaj
$_GET['edit_match'] - zjístí aktuální ID zápasu ve kterém se screenshoty nacházejí
jenikkozak
Profil
Lamič:
Tohoto sme se právě chtěl vyvarovat, ale asi mi nci jiného nezbývá.
Proč ses chtěl vyvarovat správného řešení?
xmark
Profil
Lamič:
screenshot - název obrázku, který je nahrán v tabulce matches ve sloupci screeny např. 1.jpg;2.jpg;3.jpg; atak dále...

Aha, tak stačilo toto. To je chybná konstrukce, která zjednoduší prvotní vytvoření a dříve nebo později přinese přesně ty problémy, na které jsi teď narazil. Tak opravit, přesypat data a příště máš o zkušenost víc :) Správné řešení je jen jedno: pomocí dvou tabulek.
Lamič
Profil *
Dobře, díky za rady ;)
Lamič
Profil *
Tak už to mám skoro hotový, akorát mám zase problém, že mi to maže všechny screenshoty v tom zápase.
Přitom by to mělo smazat ten údáj, který odpovídá ID.

muj kod:

<?php
$sql_screeny = MySQL_Query("SELECT * FROM screenshoty WHERE id_match = ".$_GET['edit_match']."");
 while ($row_screen = MySQL_Fetch_Array($sql_screeny)) {
 

if (isset($_GET['delete_screen'])){
	$del = MySQL_Query("DELETE FROM screenshoty WHERE id = ".$row_screen['id']."");
     if (!$del){
    	error("Nastala chyba!");
       } else { 
         ok("Screen byl úspěšně smazán!");
        
  }
}  
echo "<td><a href='images/screen/".$row_screen['img']."' target='_blank'><img src='images/screen/".$row_screen['img']."' width='200' height='200'></a><br>
<strong>ID screenu: ".$row_screen['id']."</strong>";
echo'<a href="?strana=zapasy_edit&edit_match=' . $_GET['edit_match'] . '&delete_screen=' . $row_screen['id'] . '" onClick="return confirm(\'Opravdu smazat screen?!?\');"><img src="images/ico_delete.gif"></td>';

         }
?>
xmark
Profil
Máš nějak zmatek v těch ID. Musí to být tak, že budeš mít tabulku matches a tabulku screenshoty, kde u každého screenshotu bude mj. sloupec IDmatch. Z formuláře pak můžeš podle potřeby předat ID match nebo ID screenshotu a podle jednoho nebo druhého v tabulce screenshotů mazat.
Lamič
Profil *
Tabulku matches a screenshoty mám.
Výpisy mi fungují správně, u screenu udávám i jaký má ID. ID screenu: ".$row_screen['id']."
$row_screen['id'] je ID screenu, který chci smazat
tudíš provedu:
 DELETE FROM screenshoty WHERE id = ".$row_screen['id']."
xmark
Profil
Takže jestli tomu dobře rozumím, tak ty si jedním dotazem řekneš o všechny sloupce z tabulky screenshoty, kde souhlasí id_match a pak v cyklu smažeš každý ten řádek zvlášť. Nebylo by lepší udělt to takhle?

DELETE FROM screenshoty WHERE id_match = ".$_GET['edit_match']

A doplním, že mazat můžeš podle jednoho nebo druhého sloupce. Jestli chceš smazat jeden screenshot, dělej to na základě jeho ID.
Lamič
Profil *
Ano, první dotazem si vyžádám, aby se mi zobrazily všechny screenshoty, který odpovídají id_match. Druhým dotazem mažu screenshot podle jeho id.

xmark:
Nebylo by lepší udělt to takhle?

- chci mazat pouze jeden screenshot na který kliknu, nikoliv všechny screenshotu který obsahují id_match tedkon jak to mám tj.
DELETE FROM screenshoty WHERE id = ".$row_screen['id']." se mi mažou všechny screenshoty který obsahují id_match přitom by mělo smazat pouze to id

A doplním, že mazat můžeš podle jednoho nebo druhého sloupce. Jestli chceš smazat jeden screenshot, dělej to na základě jeho ID.

ano, to vím proto to chci mazat podle id, nechápu proč mi to nefujguje
xmark
Profil
Lamič:
nechápu proč mi to nefujguje

A já nechápu, kde a jak předáváš tomu dotazu konkrétní ID obrázku. Vidím jen $_GET['edit_match']
Lamič
Profil *
".$row_screen['id']." - zjíštujě ID obrázku

DELETE FROM screenshoty WHERE id = ".$row_screen['id']."



<a href="?strana=zapasy_edit&edit_match=' . $_GET['edit_match'] . '&delete_screen=' . $row_screen['id'] . '" onClick="return confirm(\'Opravdu smazat screen?!?\');"><img src="images/ico_delete.gif">
xmark
Profil
Lamič:
Ještě jednou. Kde v tomto dotazu
DELETE FROM screenshoty WHERE id = ".$row_screen['id']."

vidíš $_GET['delete_screen']?
Lamič
Profil *
nemám, předávám číslo pomocí ".$row_screen['id']."
teď když sem udělal
DELETE FROM screenshoty WHERE id = ".$_GET['delete_screen']."


tak mi to maže stejně jako předtím, tj všechny screenshoty v daném zápase
xmark
Profil
Jsem si jist, že to smaže všechny řádky, kde id = hodnota předaná tím GETem. Jestli máš takových řádků víc, máš špatně nastaveno chování pole ID.
Lamič
Profil *
Tak mazání už mi funguje jak má :) Moc díííky :)

teď ještě abych nemusel zakládat nové vlákno, jak udělat přidávání více polí, aby se mi přidávalo samo id teď se mi přidává pouze jeden údaj
$editimg = $_POST["editimg"];
                	$zapis = MySQL_Query("INSERT INTO screenshoty SET id = '', id_match = '$editid', img = '$editimg' ");
                    if (!$zapis){
                    	error("Chyba při ukládání screenshotu!");
                    } else {
                    	ok("Screenshot/y přidan/y!");
                
       }

<div class="field"><label>Screenshot:&nbsp;&nbsp;&nbsp;<input type="text" name="editimg[]"></label></div>
Lamič
Profil *
předtím sem to měl řešené v jednom sloupci oddělující ; takže sem měl
$addimg = implode(";", $_POST[addimg]);
a to mi fungovalo vpoho, ted mě nějak nenaúadá jak udělat aby mi to vytvořilo klidně i 5 záznamů naráz

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: