Mazani pomoci $get – JavaScript, AJAX, jQuery – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Mazani pomoci $get – JavaScript, AJAX, jQuery – Fórum – Programujte.comMazani pomoci $get – JavaScript, AJAX, jQuery – Fórum – Programujte.com

 

tribalcz0
Super člen
4. 6. 2013   #1
-
0
-

ahoj mam script kterym mazu pomoci $get vse funguje jak ma ale chci se vyhnout tomu abych soubor ktery obsluhuje detabazi tj.smaz.php existoval milionkrat protoze script jako takovy obsluhuje vice casti webu

kod pro predavani dat pro smazani

		<?php
            if(!$data=mysql_query("select * from prestavba  ORDER BY id DESC LIMIT 1")) 
                {echo "<h2>Nepodařilo se připojit k tabulce prestaveb.</h2>\n"; break;}
              while($zaznam=mysql_fetch_array($data)){
                $a = $zaznam["id"];
                $b = $zaznam["text"]; 
				echo '<div class="zprava" id="'.$a.'">
					<span class="text">"'.$b.'"</span>
					<a href="#" class="smazat">smazat</a>
				</div>';
                }
		?>

smaz.js

$(document).ready(function(){
	$('a.smazat').click(function() {
		var zprava = $(this).parent();  
		var zprava_id = zprava.attr('id');

		$.get("smaz.php", { id: zprava_id },
			function(data){
				zprava.slideUp('slow', function() { $(this).remove(); } );
			}
		);

		return false;
	});
});
<?php
    include "../connect2.php";
    
    $id = mysql_real_escape_string($_GET['id']);

                $sql= mysql_query("DELETE FROM uzivatele WHERE id='$id'") or die(mysql_error());
                    echo'<div class="success">Novinka byla úspěšně smazána!</div>';

?>
Nahlásit jako SPAM
IP: 178.209.131.–
Ericsko+3
Stálý člen
7. 6. 2013   #2
-
0
-

Priznam sa, ze som celkom nepochopil: ktory script sa ti opakuje a nechces, aby sa opakoval?

smaz.php?

Chces mat jeden script, ktorym budes mazat data v roznych tabulkach databazy?

Okrem toho: ako zabezpecis, aby som ti nezmazal vsetky zaznamy? Teda aby som script nemohol volat priamo cez url v browseri? Na to si uz myslel? Alebo je uz svet krasne a bezpecne miesto pre nase scripty? ;)

Nahlásit jako SPAM
IP: 95.103.231.–
tribalcz0
Super člen
7. 6. 2013   #3
-
0
-

pochopil si me skvele chci pomoci smaz.php jednoho kodu mazat z ruznych db napadlo me prenaset nazev tabulky pomoci promene v get jelikoz se jedna o script bez znovunacteni tak uzivatel neuvidi url co se zabezpeceni je dvoji mzat muze pouze admin + jedna osoba kterou urci admin a dale adminum se generuje UID jedna se o serii cisel a pismen ktere se jednou za tyden zmeni pokud chces neco smazat tak se veri platnost pokud neni platne vyskoci okenko pro zadani uid tyho zadas do db se udela zapis s casem platnost uid bude cca 5 minut pokud tuto dobu presahnes zaznam se z db smaze  a budes muset uid napsat znovu + script smaz.php. se bude nachazet jinde v jine slozce a prave diky mazani bez znovu nacteni se ona url k uzivateli nedostane vubec 

Nahlásit jako SPAM
IP: 178.209.131.–
tribalcz0
Super člen
10. 6. 2013   #4
-
0
-

takr by to mohlo jit udelat ze by se to zjednodusilo o to s tim uid tim ze by se uid vygenerovalo a zapsalo do db  ihned pri zapisu do db a mazalo se ne pomoci id ale uidktere by bylo rekneme 20 mistne nebo trebas. 5 mistne ale zahasovane sha1

Nahlásit jako SPAM
IP: 178.209.131.–
peter
~ Anonymní uživatel
4014 příspěvků
10. 6. 2013   #5
-
0
-

Ty jo, jaky slozity popis. Opet nerozumim vubec nicemu :) Michas nekolik nesouvisejicich veci, mi prijde.
Jestli to spravne chapu, tak chces pro mazani z nekolika tabulek pouzit jeden soubor. Nechapu, proc to musi byt soubor a ne funkce? smaz($tabulka,$id); Kdyz to je soubor, ktery spousti sql prikazy, tak bych ho nazval treba sql.php, parametry bych mu dal sql=1&id=5 (id sql prikazu, dalsi parametry, u delete je to id radku).

No, ale kazdopadne v tom souboru nemas zadne zabezpeceni (viz Ericsko).

- musi tam byt prikaz, ktery kontroluje, kdo je prave prihlasen (vuci session, treba), aby, kdokoliv si prostuduje tvuj JS kod, ktery nejde skryt pred zvedavci, nemohl prikazu pouzit ke smazani postupne vsech id mezi 1 az 1.000.000

- vystup toho souboru by nemel byt ani chybova hlaska (or die), ani uspesne provedeno (echo), aby takovy hacker nezjistil uspesnost. Jen mne nenapada, jak predavat vysledek, mozna session, mozna db.

- nemas tam zadnou kontrolu parametru, treba u id je dobre provest prevod na cislo a porovnat, zda je cislo vetsi nez 0 (autoincrement dava prvni id 1) a zda je to cele cislo (integer). Kdyz ti tam ted zadam nesmysl nebo pismeno, tak ti to zkape na or die a vypis chyby isto toho, aby to preskocilo jeste pred odeslanim chyby do databaze.

Jinak si myslim, ze to (ten treti kod v prvnim prispevku) klidne muzes pouzit. Ze tam jen pridat jmeno tabulky a melo by to fungovat. Si na jednoduche sql prikazy udelej tridu, class. ja tam pouzivam takoveto podobne konstrukce. Data predavam v poli a ty funkce si to pak prevedou do sql prikazu, pouziji mysql_real_escape_string a tak

...
$keys   = "`".implode("`,`",array_keys($_data))."`";
$values = array();
foreach ($_data as $key=>$value)
  {
  $values[] = $this->escape($value);
  }
$query  = "INSERT INTO `".$_table."` (".$keys.") VALUES (".implode(", ",$values).")";
...
foreach ($_iduser as $key=>$value)
  {
  $key     = mysql_real_escape_string($key);
  $where[] = "`$key`=" . $this->escape($value);
  break;
  }
foreach ($_data as $key=>$value)
  {
  $key = mysql_real_escape_string($key);
  $values[] = "`$key`=" . $this->escape($value);
  }
$where = implode(' AND ',$where);
$query = "UPDATE `".$_table."` SET ".implode(", ",$values)." WHERE ".$where;
...
foreach ($_iduser as $key=>$value)
  {
  $key     = mysql_real_escape_string($key);
  $where[] = "`$key`=" . $this->escape($value);
  break;
  }
$where = implode(' AND ',$where);
$query = "DELETE FROM `".$_table."` WHERE ".$where;


Pak jen zavolam treba

$SQL->delete('uzivatele',array('id'=>5));
$SQL->insert('uzivatele',array('name'=>'Lojza'));
$SQL->update('uzivatele',array('name'=>'Pepa'),array('id'=>5));

Navic tam predavam usera a datum, abych ulozil posledni zmenu zaznamu a kdo to menil.

Nahlásit jako SPAM
IP: 193.84.207.–
Ericsko+3
Stálý člen
10. 6. 2013   #6
-
0
-

Chcelo by to trosku nastudovat veci ohladom autentifikacie, prihlaseny uzivatel, ktory ma prava na dane operacie operacie (CUD) by mal byt nejak standardne autentifikovany a stav prenasany v session. Potom samozrejme kazde overenie by malo prebiehat interne, nemusi sa posielat v GET, ci POST, kto robi zmeny. Samozrejmostou je SSL.

Ina situacia je ovsem vtedy, ak by si ten script chcel pouzit ako webservis, povedzme pre mobilnu aplikaciu, ale to je tiez asi trosku vyssia skola. Tam musi byt nejaky auth session key, ktory sa ziska pri logine a potom sa posiela s kazdym requestom.

Kazdopadne, ja by som to riesil nejakym REST servisom. Usetris si kopec casu a nervov, ked budes chciet jedneho dna riesit nejaku mobilnu aplikaciu, pripadne nejake realtime zmeny na webovom frontende (websockets).

Teda pre zhrnutie, skus urobit nejake REST API, ktore budes volat formou https://domain/…er/action/id (napr: https://domain/…ele/delete/4). Samozrejme aby to bolo take nice, musis pouzit mod_rewrite, inak to bude vyzerat napr. takto: https://domain/api.php?controller=uzivatele&action=delete&id=4

Pomohlo?

Nahlásit jako SPAM
IP: 87.197.170.–
tribalcz0
Super člen
10. 6. 2013   #7
-
0
-

takze po jednom cely web je postaveny na overovani udaju pomoci UID neboli unikatní id uživatele genreruje se pri zalozeni uctu ktery může založit jen admin nikdo jiný formular pro registraci je proto krit podminkou ktera overuje zda ste za a) online a za b) zda jste admin dale vygenerovane UID je 10-ti mistne ale jeho delku lze prodlouzit pripadne zahashovat UID se prenasi pomoci session v minulosti sem mel pro mazani jednoduchy formular zadalo se id prispevku a UID podminka vse overila pokud bylo vse ok prispevek se smazal nyni chc pouzivat toto z duvodu rychlosti ale jelikoz sem novy v oblasti jquery tak nekollika vecem nerozumim a to presneji tomu proc cely system nefunguje pokud mam v cilovem php nejakou podminku pokud by to nebylo prekazkou vse by se resilo jednoduse podminka by overila za a) ste-li admin a za b) je li uid predavane pomoci session shodne s tim v db 

Nahlásit jako SPAM
IP: 178.209.131.–
Ericsko+3
Stálý člen
10. 6. 2013   #8
-
0
-

#7 tribalcz
Uf. Vsimol si si odstavce v mojom prispevku?

Lebo tu kopu pismen, co si napisal som precital, ale na prvy raz nepochopil. Tak skusim niekedy vecer v klude na druhy raz. ;)

Nahlásit jako SPAM
IP: 87.197.170.–
tribalcz0
Super člen
10. 6. 2013   #9
-
0
-

zvlastni ted mi to facha i kdyz v php mam podminku takze prvni v uvozovkach obranou linii sem uklohnil takto

<?php
    session_start()
?>

<?php
    include "./connect.php";
      if(!$data=mysql_query("select * from uzivatele"))
  while($zaznam=mysql_fetch_array($data)){
  }    
    $id = mysql_real_escape_string($_GET['id']);
    
    if($zaznam['login']==$_SESSION['login']){*/overim zada login v session souhlasi s loginem v db/*
  }
  elseif($zaznam['uid']==$_SESSION['uid']){*/overim zada uid v session souhlasi s uid v db/*
  }
  else{
    
    $sql= mysql_query("DELETE FROM uvodka WHERE id='$id'");
    }
?>
Nahlásit jako SPAM
IP: 178.209.131.–
peter
~ Anonymní uživatel
4014 příspěvků
11. 6. 2013   #10
-
-1
-
Mimo téma

Php s js nema nic spolecneho. V php si neco uvaris na serveru, odesles uzivateli, prevezme to prohlizec a pokusi se to pomoci html, css a js technologie vykreslit uzivateli na obrazovku.

Pokud si tedy zmastis php kod, pak je problem tam. Ze diky tomu nasledne nefunguje spravne html, to je uz jiny problem.

Prerusovani php je zcela zbytecne.

?>

<?php

Mimochodem, je dobre, kdyz si php a mysql vyresis v jedne php znacce, ulozis do promennych a do stranky jen vypises. Spousta lidi ze skoly pochyti totiz spatny navyk, kdy udela cyklus a pomoci echa vypisuje radek po radku (to se da resit pres ob_start();). Takovy kod se pak strasne spatne opravuje. Tezko se hleda chyba, kdyz zapomenes html znacku. V html (prohlizec - zdrojovy kod) na to prijdes snadno, kde ti co chybi. Ale pak musis mezi php kodem hledat html kod.

Nahlásit jako SPAM
IP: 193.84.207.–
tribalcz0
Super člen
11. 6. 2013   #11
-
0
-

no ta funkce pro odeslani v js je jen zprostredkovatel tedy neco co jen preda data dal takze zabezpeceni php je na miste ty sice muzes znat muj js script ale pokud neprojdes kontrolou tak mas smulu nebo ne???? to je muj nazor pokud chybny mohl by mi nekdo ukazat jak zabezpecit ten js kod

Nahlásit jako SPAM
IP: 178.209.131.–
Ericsko+3
Stálý člen
11. 6. 2013   #12
-
0
-

#10 peter
Nepomylil si si forum?

Nahlásit jako SPAM
IP: 87.197.170.–
tribalcz0
Super člen
12. 6. 2013   #13
-
0
-

mohli by jste mi ted poradit jak to zabezpecit pripadne  pres js

Nahlásit jako SPAM
IP: 178.209.131.–
Ericsko+3
Stálý člen
12. 6. 2013   #14
-
0
-

Pokial si riadne autentifikovany a mas v session ulozeny stav (napr. napr. priamo rola=admin, prihlaseny=true, kazdy request, ktory odide (aj ajax) bude pouzivat tuto session. 

Staci ti potom zavolat vzdy na zaciatku nejaku jednoduchu metodu na overenie, napr:

function delete($table, $id) {
  if (isAdmin()) {
    // delete action
  }
}

Overenie bude vyzerat nejako takto:

function isAdmin() {
  if ($_SESSION["prihlaseny"] == true && $_SESSION["rola"] == "admin")
    return true;
}

Takze potom v javascripte by som to riesil nejak takto (jQuery)

$(".smazat").on("click", function() {
  $.get($(this).href(), function(data) {
    $('.result').html(data);
    alert('Zaznam bol zmazany');
  });
})

Za predpokladu, ze html vyzera nejak takto:

echo '
  <div class="zprava" id="'.$a.'">
	<span class="text">"'.$b.'"</span>
	<a href="api.php?controller=tablename&action=delete&id='.$a.'" class="smazat">smazat</a>
  </div>
';

Subor api.php by mohol vyzerat napr. takto: 

switch ($_GET["action"]) {
  case "delete":
    delete($_GET["controller"], $_GET["id"]); // doporucujem este osetrit na zaciatku scriptu proti sql injection
    break;

  case "edit":
    edit();
    break;

  a tak dalej..
}

Overenie isAdmin, pripadne hasRole("delete") si mozes potom implementovat aj v tom api.php aby si to nemusel zakazdym volat v jednotlivych metodach.

Celkovo by sa to dalo postavit jednoducho, ale aj zlozito.. Ale ako urcenie smeru ti to dufam staci. 

Nahlásit jako SPAM
IP: 87.197.170.–
peter
~ Anonymní uživatel
4014 příspěvků
13. 6. 2013   #15
-
0
-

Ericsko - Proc? Tribalcz tady dava php kody do js fora. Zrejme nabyl dojmu, ze $ v js (jquery) je to same jako $ v php. Pokusil jsem se na to upozornit, aby neplytval zbytecne silami to tady dal rozebirat.

Nahlásit jako SPAM
IP: 193.84.207.–
Ericsko+3
Stálý člen
13. 6. 2013   #16
-
0
-

#15 peter
Len som mal pocit, ze reagujes na iny prispevok.

Nahlásit jako SPAM
IP: 87.197.170.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 9 hostů

Podobná vlákna

Mazaní komentářu — založil Jakub Kahoun

Mazání složek — založil

Mazání cookies — založil kardon

Mazání string — založil Petr

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý