Anonymní profil fix – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

Anonymní profil fix – Programujte.comAnonymní profil fix – Programujte.com

 

Příspěvky odeslané z IP adresy 92.240.177.–

PHP › Mazání z databáze
16. 5. 2018   #220887

"že si ho napatláš"? :-D Podle to skončí nějakou výjimkou, kterou musím nějak ošéfovat ne? No zkusím to a případně se ještě ozvu.

Zatím díky moc vám oběma.

PHP › Mazání z databáze
16. 5. 2018   #220885

To je sice pěkné, ale jak se na to bude tvářit web? Co tahle relace nebo jak se tomu říká vlastně zajistí?

PHP › Mazání z databáze
12. 5. 2018   #220850

Ahoj,

prosím si o radu.

Mám v databázi např:

1. Tabulku uživatelů

2. Tabulku uživatelských skupin, které každý uživatel implementuje, kde uzivatele.skupina = skupina.id

Jak vyřešit v PHP, aby nešla smazat uživatelská skupina, dokud uživatelská skupina bude obsahovat nějaké uživatele (nebude prázdná(nebude existovat uživatel, který by byl do skupiny přiřazen)).

Něco mi říká, že by se mělo využít nějakého klíčování v databázi, ale to je furt jen v databázi. Jak by se to v tom případě řešilo na webu?

Teď mě třeba ještě napadlo, nechat skupinu normálně smazat s tím, že ty uživatelé, kteří budou ve skupině, tak všude, kde se vypisuje jejich skupina, tak dát kontrolu if(skupina neexistuje) echo "Skupina již neexistuje nebo nemá přiřazenou žádnou platnou skupinu"

Nicméně uvědomuji si to, že to není asi zrovna ideální.

Otazka: Jak to řešit? Jak byste to řešili Vy? Jak se to řeší v praxi?

Děkuji za radu.

PHP › SELECT z databáze
12. 5. 2018   #220841

Je to postavené, tak že je nezbytné, aby každý uživatel byl v nějaké skupině. Nemělo by nastat, že by existoval uživatel bez skupiny, ale pokud by nějak nastalo, tak by tomu uživateli nic nefungovalo a celý web by měl rozbitý. Nicméně adminovi by se v té tabulce zobrazila ta chybová hláška, což je lepší, Takže LEFT JOIN jsi zvolil dobře, děkuji.

PHP › SELECT z databáze
11. 5. 2018   #220837

#6 Kit

Děkuji ti, né že bych to nedal takhle do kupy, ale je pravda, že by mi to chvilku trvalo a ušetřil si mi tím tak 10 minut práce googlení a zkoušení. :-D Když už tak bych použil jediný JOIN se kterým mám zkušenost a to INNER JOIN. :-D

PHP › SELECT z databáze
11. 5. 2018   #220835

#4 Kit
V hlavním cyklu, který vytváří pole pro předání JSONem je a proč by musel být i v tom druhém cyklu, který převádí číslo na název uživatelské skupiny nechápu, mělo by to fungovat stejně, ale udělám to tak.

Proč otevírám a zavírám spojení s databází nevím, dobrý postřeh, děkuji.

Výpis udělat jedním dotazem, to asi myslíš nějaký typ JOINu mezi tabulkou uzivatele a tabulkou skupiny? To by mi podstatně ulehčilo práci.

Tedy to předělám dle tvých rad, děkuji za tvůj čas.

PHP › SELECT z databáze
11. 5. 2018   #220833

   

<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

/* Database connection start */
require('../../nastaveni.php');

$conn = mysqli_connect($servername, $username, $password, $dbname) or die("Connection failed: " . mysqli_connect_error());

/* Database connection end */


// storing  request (ie, get/post) global array to a variable  
$requestData= $_REQUEST;


$columns = array( 
// datatable column index  => database column name
	/*0 => 'id', 
	1 => 'nazev_firmy',
	2 => 'nazev_pobocky',
	3 => 'ic',
	4 => 'dic',
	5 => 'ulice',
	6 => 'cp',
	7 => 'mesto',
	8 => 'psc'*/
	
	0 => 'id', 
	1 => 'prijmeni', 
	2 => 'jmeno',
	3 => 'login',
	4 => 'firma',
	5 => 'email',
	6 => 'mobil',
);

// getting total number records without any search
$sql = "SET NAMES utf8;";
$sql = "SELECT id, skupina, prijmeni, jmeno, login, firma, email, mobil";
$sql.=" FROM uzivatele";
$query=mysqli_query($conn, $sql) or die("chyba ordie soubor /admin/firmy/data.php");
$totalData = mysqli_num_rows($query);
$totalFiltered = $totalData;  // when there is no search parameter then total number rows = total number filtered rows.


//$sql = "SELECT id, nazev_firmy, nazev_pobocky, ic , dic, ulice, cp, mesto, psc";
$sql = "SELECT id, skupina, prijmeni, jmeno, login, firma, email, mobil";
$sql.=" FROM uzivatele WHERE 1=1";
if( !empty($requestData['search']['value']) ) {   // if there is a search parameter, $requestData['search']['value'] contains search parameter
	$sql.=" AND ( id LIKE '".$requestData['search']['value']."%' ";    
	$sql.=" OR jmeno LIKE '".$requestData['search']['value']."%' ";
	$sql.=" OR skupina LIKE '".$requestData['search']['value']."%' ";
	$sql.=" OR prijmeni LIKE '".$requestData['search']['value']."%' ";
	$sql.=" OR pozice LIKE '".$requestData['search']['value']."%' ";
	$sql.=" OR mobil LIKE '".$requestData['search']['value']."%' ";
	$sql.=" OR email LIKE '".$requestData['search']['value']."%' ";
	$sql.=" OR login LIKE '".$requestData['search']['value']."%' ";
	$sql.=" OR firma LIKE '".$requestData['search']['value']."%' ";
	$sql.=" OR pobocka LIKE '".$requestData['search']['value']."%' )";
}
$query=mysqli_query($conn, $sql) or die("employee-grid-data.php: get employees");
$totalFiltered = mysqli_num_rows($query); // when there is a search parameter then we have to modify total number filtered rows as per search result. 
$sql.=" ORDER BY ". $columns[$requestData['order'][0]['column']]."   ".$requestData['order'][0]['dir']."  LIMIT ".$requestData['start']." ,".$requestData['length']."   ";

/* $requestData['order'][0]['column'] contains colmun index, $requestData['order'][0]['dir'] contains order such as asc/desc  */	
$query=mysqli_query($conn, $sql) or die("chyba ordie soubor /admin/firmy/data.php");

$data = array();
while( $row=mysqli_fetch_array($query) ) {  // preparing an array
	$nestedData=array(); 
	$nestedData[] = $row["id"];
			
		$id = $row["skupina"];
		$conn = new mysqli($servername, $username, $password, $dbname);
		if ($conn->connect_error) {die("Connection failed: " . $conn->connect_error);}

		$sql = "SELECT nazev FROM `skupiny` WHERE id= ".$id."";

		$result = $conn->query($sql);

		if ($result->num_rows > 0) {
			while($row = $result->fetch_assoc()) {
				$nazev = $row["nazev"];
			}
		} else {
			$nazev = "Chyba: #15618";
			//$nazev = $sql;
		}
		$conn->close();

	
	$nestedData[] = $nazev;
	
	//$nestedData[] = $row["skupina"];
	$nestedData[] = $row["prijmeni"];
	$nestedData[] = $row["jmeno"];
	$nestedData[] = $row["login"];
	$nestedData[] = $row["firma"];
	$nestedData[] = $row["email"];
	$nestedData[] = $row["mobil"];
	$nestedData[] = 
	'	
	<div style="display: inline-block;width: 100%;text-align:center;">
	<i class="pe-7s-edit clickable" onclick="updateFunction('.$row["id"].')" ></i>
	<i class="pe-7s-trash clickable" onclick="deleteFunction('.$row["id"].')" ></i>
	</div>
	';
	
	$data[] = $nestedData;
}

$json_data = array(
			"draw"            => intval( $requestData['draw'] ),   // for every request/draw by clientside , they send a number as a parameter, when they recieve a response/data they first check the draw number, so we are sending same number in draw. 
			"recordsTotal"    => intval( $totalData ),  // total number of records
			"recordsFiltered" => intval( $totalFiltered ), // total number of records after searching, if there is no searching then totalFiltered = totalData
			"data"            => $data   // total data array
			);

echo json_encode($json_data);  // send data as json format

?>
PHP › SELECT z databáze
11. 5. 2018   #220831

Ahoj,

prosím o radu: "Proč se mi děje, co se mi děje"? Viz screenshot.

Uvítám nápady, jak to dát do cajku, aby se neignorovalo vypisování ostatních sloupečků u existujících hodnot v poli $row["nazev"]

Děkuji všem.

Připojen obrázek.

Offtopic › Znalost programovacieho jazyka
14. 4. 2018   #220400

#5 KIIV

Máš pravdu, odlišný pohled na věc, který mi přijde lepší než můj původní, souhlasím, nepřej si vidět můj kod :-D PHP soubor a v něm namaštěné snad tisíce řádků  Žádné OOP, prostě gulášek. :-D

#6 Kit

To o čem oba mluvíte jsem myslel, že už v praxi řeší nějaký SW inženýr nebo tak něco. Někdo, kdo se zabývá dependabilitou, odolností vůči závadám, N-variantní programování, analýzy selhání služby, samokrontrola a samodiagnostika komponent apod. Ale svým způsobem je to taky programátor, ale žádného až takhle dobrého programátora neznám, možná jich bude v republice jen pár desítek :-) Nemám vůbec představu.

JavaScript, AJAX, jQuery › Jak předat text parametrem f…
13. 4. 2018   #220397

#8 peter

No i tohle už jsem vyřešil, beru to z databáze přímo tím PHP souborem, takže ve finále předávám jen ID. Teď už to tak řešit můžu, když jsem udělal tu kontrolu oprávnění k tomu záznamu s daným ID.

Mno, ja ti napsal funkce, jak to resim ja.
Kdyz tam davas url, tak ji escapujes pres urlencode.
Kdyz to davas do html, tak escapures pres htmlspecialchars.
A protoze se ty funkce jmenuji pokazde jinak, tak behem 10 let pouzivaji jsem sjednotil ty nazvy takhle.
A pridal jsem ti zapis, jak se to pouziva, co na url a pak to cele prevadis na html, jeste.

Rozumím, děkuji, už je mi jasné k čemu slouží.

Tech funkci mam asi 10. Ale ty nepotrebujes. Napriklad, kdyz potrebujes napsat pres php do html onclick uvozovky (kdyz jich kombinujes vic), tak na to mam spesl funkci, ktera to prevadi na &quote;.
Ty funkce mam definovane ve func.php nebo ruzne obdoby.

Máš to vychytané to mi připomíná, že bych v kódu asi neměl mít "&" ale "&amp;" :-D

Tve minus, kdyz si z te fukce odstranis tu hlavni cast, htmlescape. To pak davas prilezitost hackerum.

No ale v tomhle případě hacker snad nic nezmůže, jen ze stránky udělá paskvil ne. Je fakt, že na ošetření vstupů házím bobek no, alespoň dokud toho někdo nezneužije.
To mas jak ten sql kod, cos psal jinde. Davas tam primo udaj ze session. zadne sql escapovani. staci v session prepsat, pridat apostrof nebo OR a smazu ti celou databazi :)

Jo vím co myslíš, možná se tomu říká SQL inijection a dokonce i vím z hlavy, že by se to mělo ošetřit něčím jako mysql_real_espace_string() , nicméně nevěděl, sem, že klient může takhle si hrát se session, narozdíl od cookies. Díky za super informaci, že i session se dá takhle libovolně zneužít.

DELETE * FROM tab WHERE user_id=".$_SESSION['user_id'] - takovy prikaz maze celou tabulku|
DELETE * FROM tab WHERE user_id=1 OR 1=1 - takovy prikaz maze celou tabulku|
$SESSION['user_id'] = '1 OR 1=1'
Pouziti apostrofu
DELETE * FROM tab WHERE user_id='...'
DELETE * FROM tab WHERE user_id='' OR '1'='1''
$SESSION['user_id'] = '\' OR \'1\'='\1'

Fííha, díky za lekci z bezpečnosti internetových aplikací.

Offtopic › Znalost programovacieho jazyka
13. 4. 2018   #220393

Já si myslím, že každý úkol se dá vyřešit, je to jen otázka času.

Já sem amatér plácal, používám více jak z poloviny cizí (hlavně examples) kódy co najdu na internetu a když jsem úzkých, naučil jsem se v posledních pár dnech chodit si sem pro radu od zkušenějších.

Takže za mě programátor jakéhokoliv levelu musí umět dokončit úkol, jinak se vůbec nemůže nazývat programátorem. Takže jestli úkol dokončí či nikoliv bych nebral jako směrodatné, spíš jak dlouho mu to bude trvat a jestli to zvládne z hlavy.

NEprogramátor: Nedokončí úkol

Programátor noob (můj případ): Dokončí úkol za dlouho a většinu nedá do hromady s hlavy a třeba se i s někým poradí

Programátor guru (Kitův případ): Mrská to jak když bičem mrká a většinu kódu sesmolí z hlavy. Chceš bubblesort? Za chvilku ho má, max se podívá na pseudocode, pro příklad.

Takhle to alespoň vidím já svýma amatérskýma očima.

JavaScript, AJAX, jQuery › Jak předat text parametrem f…
13. 4. 2018   #220389

Ajo vlastně už si vzpomínám mezera se vlastně upraví na něco jako 20% a data se zdeformují.

No zkusím to nějak tedy formulářem, přijde mi to divné, jsem zvyklý formulář používat tam, kde opravdu fyzicky formulář je, ale tak jestli to dobře chápu, tak ten formulář tambude v kodu a všechny inputy budoou hidden nebo display:none nebo tak něco?

Mimochodem, momentálně sem si uvědomil, že jsem vlastně v tom PHP souboru udělal kontrolu zda ten kdo ten script volá má na to oprávnění, takže vlastně už můžu pomocí GET tomu scriptu předat jen ID a on si ten odstavec už nám načte z databáze v tom cílovém skriptu a nemusím to takhle barbarsky předávat, tedy problém je vyřešen.

Ale děkuji za myšlenku využívání form a rady.

fix
JavaScript, AJAX, jQuery › Javascript alert funguje jen…
13. 4. 2018   #220386

#11 Kit
Ten heredoc, vypadá taky dobře, nějakou pobodnou konstrukci jsem používal v c#, díky za tip, až se zase budu topit v závorkách, zkusím to použít.

fix
JavaScript, AJAX, jQuery › Javascript alert funguje jen…
13. 4. 2018   #220385

#12 peter

Já sem samozřejmě věděl jak na troubleshooting. Že se mám podívat do zdrojáku co vrací PHP a viděl jsem, že ten konstruktor té showModal funkce je rozbitý. Buď oříznutý a nebo jinak zdeformovaný a věděl sem na 100%, že je problém v závorkách, se závorkami občas bojuji, když jich je tam víc, nevím co s nimi. Teď řeším podobný problém se závorkami, a nepomáhá ani to, když si to rozepíšu, mnohdy používám něco jako kombinace " a ' a takový sekvence se zpětným lomítkem nějak vůbec nepoužívám, ale nastuduji si to, abych v tom měl už konečně jasno a nemusel s tím vždycky bojovat metodou pokus-omyl. :-D Každopádně děkuji za reakci.

fix
JavaScript, AJAX, jQuery › Jak předat text parametrem f…
13. 4. 2018   #220383

#2 peter
Na httprequest jsem koukal, ale to mi přijde zbytečně složité.

To jako takhle?:

Víš, že v tom odstavci žádné HTML tagy nejsou? Jsou to klasické věty, nikoliv URL či HTML, ale chápu to tak, že at použiji jakoukoliv z těch funkcí, které jsi uvedl, tak by to mělo fungovat..


//Z databáze: 
//id = 115; 
//odstavec = "nějaký text s mezerami, odstavec"; 

function escapeHtml($str) {return $str);} 

$nestedData[] = '<i class="pe-7s-mail clickable" onclick="sendFunction('.$row["id"].', escapeHtml( '.$row["odstavec"].') )" > </i>';



function sendFunction(id,odstavec) {

varURI = 'upravit.php?id='+id.toString()

+'&odstavec='+odstavec.toString()

window.location.href=varURI

}
fix
JavaScript, AJAX, jQuery › Javascript předání ID záznam…
13. 4. 2018   #220382

#8 peter
Panečku, ty jsi se rozepsal, díky za vysvětlení hned si to jdu přečíst.

Mas divne dotazy. Zkusim ti objasnit, jak to funguje, jak se to obvykle dela, bez vetsiho zabezpeceni.

- Ty si pohlidas v php kodu, treba pomoci session, zda je uzivatel prihlasen, overis si jeho loginy ze session, pripadne nejake session id. (To je jeden include radek na externi php soubor, ktery ho pri spatnem loginu presmeruje na logovaci stranku, treba. Takze nic sloziteho, pokud ten kod uz pouzivas jinde.)

Ano, tak to mám
- Pak mu dovolis normalne spustit smazani. Je jedno, zda pres get, ale lepe pres post.

Ano, tak to mám
- Neni problem, paranoidne zkontrolovat prava pred kazdym sql dotazem, resp. tvoji funkci. A tez se dela odpojeni po ukonceni sql dotazu, ihned. Preberes data pres fetch a odpojis. Po te data treba zobrazujes nebo zpracovavas dal.

Ano, tak to mám, vlastně nemám, ukončuji dotaz nějak takhle $conn->close(); a na konci souboru, přestože, těch dotazů je v souboru více. Ale hádám, že to není důležité.

Samozrejme, ted jde spustit treba 10x smazat. To se da vyresit presmerovanim na jinou stranku pomoci header.

Ano, tak to mám, přesměrovává pomocí header z pohledu uživatela na stejnou stránku a v levo dole vyskočí notivifka ce úspěšném smazání nebo neúspěšném v případě, že by byl smazán cizí záznam (ano, už jsem to pošéfoval i na straně serveru, takže hotovo).


Cili, ten mazaci kod budes mit treba smaz.php, form action=smaz.php. A smaz.php ho pres header vrati na puvodni stranku, treba index.php. Tu stranku si muzes taky odeslat formularem, odkazem.
K presmerovani pripojis do adresy treba parametr, ktery uzivateli vypise chybu nebo, ze akce probehla v poradku.

Mám to podobně, akorát ne přes form, ale onclick a get požadavkem k PHP souboru který zkontroluje, odkoho ten GET je (podle login session) a jestli ten záznam je jeho.
Pokud se jedna o hackera a spusti ti tam neco 10x, tak s tim mnoho nenadelas. Ale 10x nesmaze radek z db, protoze radky maji sve autoincrement id, obvykle, a takove tam existuje jen 1x. Jenom ti hacker trochu zatizi server.

Jde zmáčknout jen jednou, protože je to javascriptem, nikoliv formulářem jak radíš. Takže zmáčknout muže jen jednou v tom případě se záznam smaže, tabulka se přepíš a podruhé už nebude mít na co zmáčknout a i kdyby měl, napíše mu to, že přístup je odepřen, protože ten záznam ani neexistuje. Ano id mám unikátní.
Samozrejme se da vyuzit toho, ze se uzivatel neodhlasil, odesel od pc a spustit tam nejake dalsi kody. Ale s tim ty mnoho neudelas, session je platne, nemuzes vedet, ze tam uz nesedi puvodni uzivatel.

Na to prdím, nedělám internetové bankovnictví pro rajfku.

Mno, co se tyce sql. K sql se pripojujes z php kodu na sveho univerzalniho uzivatele, treba fix_www / heslo. Ten je univerzalni pro kazdeho uzivatele webu. Ty tedy hlidanim prav v php musis zabezpecit, aby se tedy nespustil zadny sql dotaz, pokud uzivatele radne neoveris.

Hotovo. Viz výše. Přidělal jsem tam kontrolu oprávnění,  problém je vyřešen.
Tady je moznost, pokud to hosting umozni, udelat si nad databazi vic uzivatelu. A pak se muzes k sql pripojovat ruznymi uzivateli s ruznymi sql pravy. Ale to se obvykle neda, obvykle mas 1 usera (free db hostingy). Ale ta moznost je, na localhostu nebo lepsim hostingu.
Muzes pak nastavit prava treba fix_quest, ktery si smi prohlizet treba jen nektere tabulky a at posila jake chce prikaxy pres php, tak sql ho nepusti k tem ostatnim. Takze, pokud to jde a vis, co delas, rozhodne doporucuji.

Zbytečně složité a na vlastní server je škoda to dávat, bude to mít malou návštěvnost, ale chápu, že definovat si to takhle přímo v databázi je to nejlepší co může být.

Jenze, stale to zavisi na tom, jak dobre poresis prava pres php, aby te quest nzziskal nekde admin prava. Dobre reseni je obvykle pracne. Tys zadal jednoduche, bohuzel.

Řekl bych, že si myslím, že je to teď dobře, ale jsem začátečník a myslet si to můžu, vždycky to jistě nějak jde. Získání admin práv je u mě jednoduché přečíst si configurační soubor, čímž získá přístup do DB, a tam si jen vytvořit uživatele co bude mít ve sloupčku "admin" = 1 :-D

Díky za informace a zkušenosti, můžeme to považovat za uzavřené.

fix
JavaScript, AJAX, jQuery › Jak předat text parametrem f…
13. 4. 2018   #220375

Ahoj, prosím poraďte začátečníkovi jak předat text např: "nějaký text s mezerami, odstavec" pomocí parametru funkci. Kdy že to string bez mezer, tak mi to funguje, jakmile je tam mezera, tak mi prohlížeč v konzoli po kliknutí na button s onclick píše: SyntaxError: missing ) after argument list na řádku 1 prej :-D

Věřím, že to zase bude nějaká banalita v závorkování. Díky za radu.

Mám např.:

//Z databáze:
//id = 115; 
//odstavec = "nějaký text s mezerami, odstavec";
 
$nestedData[] = '<i class="pe-7s-mail clickable" onclick="sendFunction('.$row["id"].','.$row["odstavec"].')" ></i>';

function sendFunction(id,odstavec) {
            varURI = 'upravit.php?id='+id.toString()
            +'&odstavec='+odstavec.toString()
            window.location.href=varURI
        }
fix
JavaScript, AJAX, jQuery › Javascript předání ID záznam…
13. 4. 2018   #220374

#6 gna

Myslím že chápu, chceš mi říct, že jakákoliv snaha o to aby se PHP zavolalo pomocí JS tlačítka je špatně, vždycky to může klient obejít nějakou editací lokálního zdrojového kódu a proto není jiná cesta než udělat kontrolu i ve všech PHP souborech. Jestli to dobře, chápu, tak tedy nemám radost, dalo mi práci vychytat to, aby se tlačítko zobrazovalo jen komu se zobrazovat má a teď ještě na strane serveru kontrola, to abych se naučil OOP :-(  Nebo si udělám nějaký univerzální kod a použiji include(); :-D Děkuji za vysvětlení, udělám tedy i kontrolu oprávnění přímo ve všem PHP souborech, který pristupují k databázi.

fix
JavaScript, AJAX, jQuery › Javascript předání ID záznam…
13. 4. 2018   #220372

#4 MilanL

Jo tak to mám, zobrazují se správným uživatelům správné záznamy a správná tlačítka.

Problém se spíš v tom php souboru.

Tedy dotaz položím srozumitelněji: Jak pomocí tlačítka s onClick zavolat PHp pro smazání záznamu aniž by se ten php  soubor dal zavolat i bez tlačítka? A zároveň abych to nemusel řešit nějak složitě pomocí generování nějakých tokenů apod. Tím myslím, předat tím onclick ID tak nějak jako POST metodou než GET, aby potom nikdo nemohl používat parametry v URL typu smazat.php?id=$id

fix
JavaScript, AJAX, jQuery › Javascript předání ID záznam…
13. 4. 2018   #220363

#2 gna

Nedokážu to pochopit ani z php.net :-) Resp tuším, jak to funguje a myslím, že to v mém případě použít nelze, páč ten soubor smazat.php?id=id je pro všechny přihlášené uživatele stejný.

Já to potřebuji omezit už na úrovni toho tlačítka, aby ID šlo poslat jen tím tlačítkem nikoliv pomocí GET.

Toto mi tedy vyhovuje, akorát potřebuji, aby to fungovalo jinak než přes zneužitelné editovatelné GET.

function deleteFunction(id) {
            if (confirm("Opravdu chcete tento záznam smazat?") == true) {
                varURI = 'smazat.php?id='+id.toString();
                window.location.href=varURI
            } else {}
 }
fix
JavaScript, AJAX, jQuery › Javascript předání ID záznam…
12. 4. 2018   #220361

Ahoj všem,

dělám první takovou větší aplikaci a prosím někoho zkušenějšího, který by mi poradil, jak umožnit uživateli smazat záznam z DB, aby to nešlo zneužít a zároveň to bylo jednoduché řešení pro amatéra jako jsem já. :-)

Protože ve stávající fázi jak to mám, tak jakýkoliv uživatel může přistoupit k smazat.php?id=<sem může zadat jakékoliv ID a smaže cizí záznam>, což není zrovna ideální. Kontrola zda na tu stránku má uživatel přístup by musela být na úplně každé stránce a to mi přijde moc složité. Tak to mám tak, že kontrola obsahu, který je dostupný je jen na hlavní stránce pro tabulku se záznamy a každému se zobrazují v tabulce jen ty záznamy, které se jim zobrazovat mají a u každého záznamu mají ikonku, viz níže.

Díky moc všem za rady.

Moje HTML:

$nestedData[] = '<div style="display: inline-block;width: 100%;text-align:center;">
            <i class="pe-7s-trash clickable" onclick="deleteFunction('.$row["id"].')" ></i>
</div>';

Moje JS:

function deleteFunction(id) {
            if (confirm("Opravdu chcete tento záznam smazat?") == true) {
                varURI = 'smazat.php?id='+id.toString();
                window.location.href=varURI
            } else {}
 }

Moje PHP smazat.php:

<?php

session_start();
if($_SESSION['login']!=""){

if (isset($_GET['id'])) {
    $id = $_GET['id'];
    $conn = new mysqli($servername, $username, $password, $dbname);
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }
    $sql = "DELETE FROM zavady WHERE id=$id";

.....

?>
fix
PHP › Uprava W3school upload scriptu
7. 4. 2018   #220282

Problém nebyl v samotném uploadu, jelikož jak jsem zmiňoval, problém nastával až v opakovaném uploadu stejného souboru, prvotní upload proběhl bez problémů. Už mi to funguje, ani nevím jak sem si s tím poradil. :-)

Každopádně díky za snahu pomoci.

fix
PHP › Uprava W3school upload scriptu
6. 4. 2018   #220280

Ahoj,

prosím si o pomoc, už pár hodin se snažím upravit upload script z W3 Schools upravit tak, aby se podle aktuálního datetime() generoval, název suboru při nahrání a bylo by tak možná nahrávat i soubory, jejichž název již na serveru je, aniž by mě otravovala hláška "file is exist!"

$target_dir = "../../uploads/zavady/prilohy/";
$dateTime = date("Ymdhisa");
$target_file = $target_dir . $dateTime . basename($_FILES["fileToUpload"]["name"]);
$target_file = str_replace(" ","_", $target_file);
echo $target_file;
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
//if(isset($_POST["submit"])) {
    // $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    // if($check !== false) {
        // //echo "File is an image - " . $check["mime"] . ".";
        // $uploadOk = 1;
    // } else {
        // echo "Příloha není ve správném tvaru.";
        // $uploadOk = 0;
    // }
//}
// Check if file already exists
if (file_exists($target_file)) {
    echo "Není možné tuto přílohu nahrát na server, jelikož již existuje.";
    $uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 5000000) {
    echo "Soubor nebyl nahrán, jelikož je příliš velký.";
    $uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
    echo "Příloha není ve správném formátu.";
    $uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
    echo "Soubor není možné nahrát na server.";
// if everything is ok, try to upload file
} else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
		//echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
		//$soubor = $dateTime .basename( $_FILES["fileToUpload"]["name"]);
        $url = $target_file;
		echo "testtttttttttttttttttttttttttttttttt";echo "<a href=". $url. ">". $url. "</a>";
		//echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
    } else {
        echo "Soubor se nepodařilo nahrát, prosím kontaktujte nás.";
    }
}

Podařilo se mi to tak nějak z půlky, nechápu kde je problém při opětovném nahrávání mi to spadne do:

else {
        echo "Soubor se nepodařilo nahrát, prosím kontaktujte nás.";
    }

Kdyby měl někdo nějaký typ, co by to mohlo dělat, prosím dejte vědět.

Děkuji všem za případné rady.

Mazec
JavaScript, AJAX, jQuery › Javascript alert funguje jen…
6. 4. 2018   #220276

#9 Kit
Super funguje to, asi si to jen nerozepsal, ale i jsi tam udělal nějakou neekvivalentní úpravu právě v závorkách.

Díky za pomoc, rozepsat si to mě taky napadlo, ale v zápětí sem to zapomněl vyzkoušet.

Chtěl jsem ti dát +1 ale prý neregistrovaní uživatelé nemohou hlasovat, budu se muset pro příště registrovat.

Tedy vyřešeno, děkuji i ostatním

Mazec
JavaScript, AJAX, jQuery › Javascript alert funguje jen…
6. 4. 2018   #220274

#6 Kit

Jinak to bohužel nejde. Muselo by se to celé přeprogramovat a to nechci, jelikož využívám obří js knihovnu datatables a naprogramování to tak jak potřebuji by mi trvalo měsíc každodenního vývoje. A toa to prostě umí jen tak, že předává data pro tabulku v jsonu a v html je pouze záhlaví tabulky a o zbytek se stará již dataTables

Mazec
JavaScript, AJAX, jQuery › Javascript alert funguje jen…
6. 4. 2018   #220273

Všiměte si prosím v prvním kodu, jak se láme barva textu ve: $row["popis"]

Kde: $row[" je červeně

Kde: popis"] je černě

Mazec
JavaScript, AJAX, jQuery › Javascript alert funguje jen…
6. 4. 2018   #220271

Ne o to co je na jsbin vubec nejde jde především o tohle:

$nestedData[] = '<i class="pe-7s-comment clickable" onclick="showModal('.'$row["popis"]'.')"></i>'; 

Přičemž pole $nestedData[] ta jde potom do dalšího pole a to se potom předává dalšímu javascriptu v podobě JSON a ten to potom vypisuje v tabulce.

Problém je v tom, že:

Funguje:  

<i class="pe-7s-comment clickable" onclick="showModal(565666556)"></i>

Ale tohle už nefunguje:

<i class="pe-7s-comment clickable" onclick="showModal('nejaky text')"></i>

A tohle co chci používat také nefunguje:

<i class="pe-7s-comment clickable" onclick="showModal('.'$row["popis"]'.')"></i>

 Pouze takový něco jako pseudokod, pro zvýreznění předchozího vysvětlení

 

pokud ("SELECT popis FROM table WHERE id=$id" obsahuje číslelnou hodnotu např.: 45678654) {

alert // funguje správně, ale pro číselné hodnoty já to nepotřebuji

} ale pokud ("SELECT popis FROM table WHERE id=$id" obsahuje textový řetězec např.: "ukazkovy text") {

alert() // nefunguje, po kliknutí na ikonku alert nevyskočí, pro textové hodnoty, pro které to potřebuji alert právě bohužel nefunguje

}

Už mi rozumíte? A máte pravdu bude to asi spíš problém v PHP kodu.

Omlouvám se za předchozí blbé popsání problému.

Mazec
JavaScript, AJAX, jQuery › Javascript alert funguje jen…
6. 4. 2018   #220265

Ahoj všem, prosím o kontrolu mého velmi krátkého kodu, jistě tam má jen špatně uvozovky nebo něco podobného.

polo-živá ukázka:

https://jsbin.com/ziyivowoyi/edit?html,js,output

Děkuji moc všem za radu.

 

 

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