Autor Zpráva
Pevel.Sojak
Profil *
Dobrý den,
prosil bych o nejspíš jednoduchou radu. Snažím se docílit toho, aby se při vymazání hlavní kategorie vymazali také její podkategorie a obrázky ke každé podkategorii. Narazil jsem však na problém při plnění sql dotazů. Ve scriptu níže se mi vždy podaří vymazat jen hlavní kategorii, vyhodí mi to kladnou hlášku, ale na ostatní věci se to vykašle, ikdyž je cnt vyšší, než 0. Prosím o radu, zdali existuje i jiné řešení, jak tento problém vyřešit :(

if ($_REQUEST['action'] == 'delete') {
        $sql['delete_main'] = mysql_query('DELETE from admin_web_products WHERE id='.$_REQUEST['data']['id'].'');
        if($sql['delete_main']) {
          $cnt['delete_sub'] = mysql_result(mysql_query('SELECT COUNT(id) FROM admin_web_products_sub WHERE category=\''.$_REQUEST['data']['seo'].'\''),0);
          if($cnt['delete_sub']> 0) {
          $row_sub = mysql_result(mysql_query('SELECT * FROM admin_web_products_sub WHERE category=\''.$_REQUEST['data']['seo'].'\''),0);
          $sql['delete_sub'] = mysql_query('DELETE from admin_web_products_sub WHERE category='.$_REQUEST['data']['seo'].'');
            if($sql['delete_sub']) {
              $cnt['delete_img'] = mysql_result(mysql_query('SELECT COUNT(id) FROM admin_web_products_img WHERE reference_id=\''.$row_sub['id'].'\''),0);
              if($cnt['delete_img']> 0) {
                $row_delete_img = mysql_fetch_array(mysql_query('SELECT * FROM admin_web_products_img WHERE reference_id='.$row_sub['id'].''));
                @unlink ($_SERVER['DOCUMENT_ROOT'].'/files/images/'.$row_delete_img['image_name']);
                $sql['delete_img'] = mysql_query('DELETE from admin_web_products_img WHERE reference_id='.$row_sub['id'].'');
                if($sql['delete_img']) {
                $done_log = 'Obrázek byl úspěšně přidán do databáze';
					    	require './err/done_document_all.php';
                }
                else {
                $error_log = 'Došla chyba při vymazávání obrázku podkategorií, zkuste to prosím později.';
                require './err/error_document_all.php';
                }
              } 
              else {
              $done_log = 'Kategorie byla úspěšně vymazána';
					    require './err/done_document_all.php';
              }
            }
            else {
            $done_log = 'Kategorie byla úspěšně vymazána';
					  require './err/done_document_all.php';
            }
          }
          else {
          $done_log = 'Kategorie byla úspěšně vymazána';
					require './err/done_document_all.php';
          }
        } 
        else {
        $error_log = 'Došla chyba při vymazávání kategorie, zkuste to prosím později.';
        require './err/error_document_all.php';
        }       
}
jenikkozak
Profil
Pevel.Sojak:
Ve scriptu níže se mi vždy podaří vymazat jen hlavní kategorii, vyhodí mi to kladnou hlášku, ale na ostatní věci se to vykašle, ikdyž je cnt vyšší, než 0.
Ten dotaz ti vrátí pole, tedy prvek $cnt['delete_sub'] obsahuje také pole. Proto podmínka if($cnt['delete_sub']> 0) { funguje asi obráceně, než očekáváš.
pcmanik
Profil
Pevel.Sojak:
Nepouzivaj pole request, ale priamo metody post, get, session, cookie atd... Kvoli vyssej bezpecnosti.
jenikkozak
Profil
pcmanik:
Nepouzivaj pole request, ale priamo metody post, get, session, cookie atd... Kvoli vyssej bezpecnosti.
To „atd.“ má znamenat co? Pokud vím, tak standardně hodnoty session v tom poli uložené nejsou.
okolojdouci
Profil *
Pevel.Sojak:
Nechápu, k čemu tam máš ty dotazy s COUNT. A až na ten dotaz, kterým získáváš názvy souborů, nepotřebuješ ani ty SELECTy.
Začni tím, že si projdeš soubory (SELECT), smažeš je a zbytek zařídí dvojí DELETE. Všechno by se mohlo vejít do nějakých 8 řádků.
Medvídek
Profil
Pevel.Sojak:
Na to je lepší FOREIGN KEY, ale nevim, jakej používáš Engine
YoSarin
Profil
pcmanik:
Nepouzivaj pole request, ale priamo metody post, get, session, cookie atd... Kvoli vyssej bezpecnosti.
tady jsme imo dospěli k závěru, že $_REQUEST neskrývá žádnou bezpečnostní díru. Jediné co se při používání $_REQUEST může vymstít je nepořádek v aplikaci a stejně pojmenované $_GET, $_POST a $_COOKIE parametry (čemuž by se stejně měl každý raději vyhnout) a následný zmatek v tom kde se to vzalo.

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