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

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

 

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

PHP › HTML v GET parametru proměnné
12. 7. 2022   #390214

Tak v prvním případe pomohlo urlencode() a ve druhé htmlspecialchars(), jako správný noob jsem na tom zabil minimálně 40 minut života, ale nakonec jsem to poskládal. :-D Takže snad vyřešeno. :-)

PHP › HTML v GET parametru proměnné
12. 7. 2022   #390213

Vyřešil jsem to pomocí urlencode($popis); teď mám podobný problém na straně zpracování toho get parametru.

/index.php?popis=update=19&nameid=test popisek2&popis=<img+src%3D"https%3A%2F%2Fwww.omegamacesh.cz%2Fdata%2Fkategorie%2F56%2Ffoto%2Fstadion2018.jpg"+alt%3D"Planek+stadionu"+%2F>

Výsledkem je, potřebuji to nějak zaobalit,aby nedocházelo na kolizi uvozovek formuláře a uvozovek HTML, které má být jako obsah value toho formuláře.

<input type="text" class="form-control" name="newpopis" value="<img src=" https:="" www.sigmafotbal.cz="" data="" kategorie="" 56="" foto="" stadion2018.jpg"="" alt="Planek stadionu">

To jak zařídit prosím?

PHP › HTML v GET parametru proměnné
12. 7. 2022   #390212

 Prosím o naprosto noobskou radu.


$row["popis"] = " <"'> ";
echo "
<i class='nc-icon nc-settings-90'
onClick='
location.href=\"
?nameid=".$row["nazev"]."
&popis=".$row["popis"]."
\"
'></i>

";

Snažil jsem se to obalit v něčem jako htmlentities($row["popis"]) nebo mysqli_real_escape_string($conn,$row["popis"]),
htmlspecialchars($row["popis"]), ale k ničemu to nebylo.

Problém: V DB je HTML načítané v rámci proměnné $_GET['popis'], ale pokud HTML obsahuje speciální znaky jako uvozovky, tak na tlačítko nelze kliknout, to ale obsahuje vždy.

Jak to prosím řešit, aby to HTML nerozbíjelo to ikonkové tlačítko onclick?

Děkuji pěkně za tipy.

JavaScript, AJAX, jQuery › Změna obrazku po kliknutí
28. 3. 2022   #390045

Ahoj lidi, prosím si o pomoc.

Jak prosím zde: https://jsfiddle.net/cfkzrgsu/

Zařídit, aby se po změně čísla v poli ten QR kod přegenerovat podle value toho inputu?

Všimněte si, že se value inputu se vyplňuje na konec URL QR kodu.

Děkuji moc.

Offtopic › Kolejné :)
31. 8. 2021   #388502

Peněz lidé mají sice víc, ale neadekvátně k cenám spotřebního koše. Za chvíli nikdo na svoje bydlení ani nebude mít a všichni budou jen v nájmech. :-)

Valorizační schéma říká, důchodcům by se mělo přidat kvůli inflaci 1200 Kč, aby nemuseli živořit, ale tak dáme jim alespoň 500 Kč, jen aby neumřeli. To samé důchodové spoření jsem si teď vypočítal. Sice zaplatím třeba 500 táců a vlivem uroku a státního příspěvku tam sice budu mít 700 táců, ale budou mít kupní sílu jen 400 tisíc. :-D Tím chci říct, že lidi mají víc peněz, ale stejně jsou na pořád nenápadně jen o trochu hůř a hůř.

@peter: Dal jsem like GNA za tebe, protože vím, že jsem v programování marnej. :-D

Prodejci na tom nechtějí vidět, jen nemohou tratit. Když se jim zdražuje materiál, musí zdražit i oni. Kdo pravidelně nezdražuje, ten okrádá svoji rodinu. :-)

Offtopic › Kolejné :)
30. 8. 2021   #388498

Tenhle finanční systém je tragédie. Není transparentní, bůhví kam ty peníze furt tečou. Už to zkurvili tak, že že ekonomika funguje jen kvůli tomu, že lidi utrácí a nešetří. Kdyby teď začali všichni šetřit a spořit, tak se systém položí. Jenže inflace neumožňuje spořit. Kdo spoří, ten dobrovolně dává skrytou daň ve formě snižování kupní síly svých úspor. Peníze mu nemizí z účtu fyzicky, ale jejich kupní síla klesá. Je to sice cca. 4 % ročně, ale když někdo spoří 200 táců po dobu 10 let, tak už se to nasčítá a přijde už o pěkný ranec peněz, přestože mu třeba spořící účet dá pár drobečku navíc, ve finále bude stejně brutálně škodný díky snížení kupní síly. A co tak čtu, tak kvůli tištění peněz skrytých za coronavirovou krizí bude inflace ještě mnohem větší.

Pomaličku se vyvíjí nestátní finanční systém Jménem Bitcoin, který kombinuje výhody všech předchozích možností směny jako barter, zlato apod., zároveň se z nich poučil a neobsahuje jejich nevýhody. A řeší všechny problém jako inflace, inflaci nemá žádnou, naopak je lehce deflační. Jediná jeho současná nevýhoda je rychlá, ale pořád ne dostatečně rychlá adopce. Přijetí nového finančního systému potrvá mnoho desítek let. Už dnes jsou státy, které ho integrují do své země jako měnu, tak to třeba tak rychle trvat nebude, ale je to klíč ke všemu. Konec zkorumpovaným politikům a jejich machinací, konec všem finančním zločinům. :-)

MySQL › Unikátní ID napříč více tabu…
30. 7. 2021   #388271

souviselo to s mým předchozím ticketem na autoincrement prefix. Už to nepotřebuji, raději to tedy předělám, abych měl správnější koncept databáze. Díky.

MySQL › Auto increment prefix
30. 7. 2021   #388270

Ok, to bude lepší no. Díky za nasměrování správným směrem.

PHP › Jak pracovat s array?
30. 7. 2021   #388269

Díky moc. Hodně mi to pomohlo, ale stejně jsem se s tím snad 2 hodiny sral, abych to nejak dokázal přizpůsobit, aby to šlo zapasovat domého kodu. BTW: Vůbec tenhle zjednodušený způsob programování v PHP neznám, říká se tomu nějak?

JavaScript, AJAX, jQuery › Jak vzít data z tabulky?
6. 4. 2021   #387732

Teoreticky jsem našel řešení: http://live.datatables.net/farozutu/1/edit?…

jsbin sice dole ukazuje 5 errors a 1 warning, ale funguje to. :-D

Má to ale jeden háček funguje to dost jinak, a to tak, že zprostředkovatl dat z databáze je zřejmě ten "ajax": "/ssp/objects.php", v rámci server-side, tomu jsem se chtěl vyhnout, protože potom je všechna logika jako i to vyhledávání apod. řešena přímo na serveru a celá ta logika je nakydaná v tom object.php, kde je obrovský moloch v podobě tisíci řádkového generátoru SQL dotazu. Tomu bych se tedy rád vyhnul.

JavaScript, AJAX, jQuery › Jak vzít data z tabulky?
6. 4. 2021   #387731

Mám pocit, že se nechápe, že jsem to špatně vysvětlil, uvedu tedy ukázku s příkladem.

Mám toto: http://live.datatables.net/saxivebu/1/edit?…

1. Do instant search napíši "London"

2. Vrátí to dvě stránky 10+3 (celkem 13 nalezených  záznamů).

3. Pro těchto 13 záznamů potřebuji tlačítko "do CSV".

Dá se to nějak?

Jak si moje amatérská hlava přestavuje, že to může fungovat:

A) Nějak z klienta (prohlížeče) dostat těch 13 záznamů převést do JSON, ten pak poslat nějak přes tlačítko nad tabulkou AJAXem zpět do PHP, který ho zpracuje, vytvořit z něj CSV na straně PHP už zvládám.

B) Nějak z klienta (prohlížeče) dostat těch 13 záznamů uložit do pole, to pole použít jako vstup pro javascript funkci generujCSV($pole), přes tlačítko v tabulce.

C) Odchytit nějak to klíčové slovo, které vepíšu do instant search, a poslat ajaxem jen to klíčové slovo funkci, terá bude mít neco jako SELECT * FROM zaznamy WHERE jmeno LIKE "%$searchkw%" OR city LIKE "%$searchkw%", což bude sloužit jako data pro generátor CSV, mělo by to fungovat stejně, ale jak to klíčové slovo přes javascript z té tabulky dostat. Možná přes input.change event by se upravovalo URL tlačíka "do CSV" na /csvexport.php?kw=<kw>, myslíte, že je to reálné?

@peter

1. Data z PHP vycucám do pole je k ničemu. Vznikly by dvě verze:

A) 1:1 data v PHP v poli

B) Tabulka přes JS odfiltruje jen některé záznamy a o ty jde, ne o všechny v tom poli v A)

2.Ano generuji z PHP do HTML tabulky, a ta HTML tabulka se poté přes JS filtruje. Do CSV potřebuji přímo ten odfiltrovaný výstup, který je vytvořen někde na pozadí v datatables.

Získat data z tabulky přes javascript a ty data poslat přes AJAX do PHP právě chci, jen nevím jak to udělat. TO je ale asi nerealizovatelné, protože tabulka má paginaci (stránkování), fungovalo by to jen pro první stránku, prvních 10 záznamů, další by to ignorovalo. Proto mi přijde logické to udělat přímo na straně klieta, a nevracet to nijak zpět do PHP.

Odešli filtry do PHP nechápu jak myslíš. Filtry jsou součástí datatables.

3. Ten tvůj psudokod bych asi nějak zvládl dát dohromady aby fungoval, ale podle mě to bude brát právě jen první stránku té tabulky.

@Peter Jo, asi jsem máslo, ale AJAX jsem už dohromady jednou dal, jen jsem přes něj neposílal žádná pole, jen spustil PHP funkci na smazání záznamu nebo co to bylo.

@kit Jo, asi se tomu říká přetěžov\ání, dělám to rád, jen proto, že neznám důvod proč to nedělat, když si umím v hlavě vybavit posloupnost kodu, šetří to paměť ne? :-)

@gna Ne nevyhovuje, funguje to úplně jinak. Bavíme se o doselekci přes instant search, když budu chtít vyselektovat všechny Londýny z example a bude jich tisíc, tak budu muset tisíckát kliknout a všechny je označit. Má to poslat celý obsah tabulky po odfiltrování záznamů přes instant search. Resp vlastně by to asi nějak šlo, kdyby se namísto označování ty záznamy poslaly všechny (celá již odselektovaná tabulka).

@kit Kdepak, to přece nebude fungovat, to pošle zpět do PHP 1:1 to stejné, co PHP poslalo klientovi. Nemělo by to přece žádný význam.

PHP › Univerzální přidání do datab…
30. 4. 2020   #385943

Jo už blbnu, však sem si to už udělal, aby to tak fungovalo to je to:

foreach ($_GET as $key => $value) {
    $$key = $value;
}

Prepared statements, jestli dobře chápu, tak použít v mém případě nelze. Zabezpečit nějak by to asi chtělo, ale podle mě inijection by jít nemuselo, případně ty vstupy můžu asi ošetřit obalením nějaké příslušné funkce, podle mě tím nebudu posílat taková data, aby to tomu nějak vadilo. Navíc, aby to hacker mohl napadnout, tak by hádám potřeboval znát název databáze, jinak bude zpracování dotazu failovat.

No zatím mám toto, což funguje:

Vstup: ?tabulka=tablename&test=data&test2=data2&test3=data3

Výstup: INSERT INTO test (test,test2,test3,) VALUES (data,data2,data3,)

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

/*$keys=array();
$values=array();*/

$totalKeys = "";
$totalValues = "";

$i = 0;	
foreach ($_GET as $key => $value) {
    $$key = $value;

	if($i > 0) {
		$totalKeys .= $key . ",";
		$totalValues .= $value . ",";
	}
	
	$i++;
	/*array_push($keys,$key);
	array_push($values,$value);*/
}

/*echo "Klíče: " . $totalKeys;
echo "<br>Values: " . $totalValues;*/

/*print_r($keys);
print_r($values);*/

$keys = explode(",", $totalKeys);
$table = $keys[0];

$sql = "INSERT INTO $table ($totalKeys)
VALUES ($totalValues)";

/*
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

if ($conn->query($sql) === TRUE) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
*/

?>




PHP › Univerzální přidání do datab…
30. 4. 2020   #385940

Já sem hold takový amatérský šmelař. Všechno mi nějak funguje, ale správnou cestou to určitě nikdy nedělám. :-D PDO obcházím, jak velkého vzteklého psa. Funguji stylem, nezahlcovat si hlavu novými věcmi, když to jde jednoduše špatnou cestou. Tím myslím i prepare statements, vím k čemu jsou dobré a v čem je jejich síla, ale nechápu jak v mém případě mohou fungovat, ale to je jedno, tohle je zrovna věc, kterou bych pořádně chtěl mít, jakmile budu mít čas, tak se s tím zkusím nějak poprat. Pokud jsou ale tvé myšlenky špatně nebo nefunkční, pochybuji, že to nějak dám do kupy pro můj případ. :-D Ale zkusím to při nejhorším to udělám styl nejvetsi noob /toDB.php?sloupec1nazev=id&sloupec1data=&sloupec2nazev=entita&sloupec2data=<nazev entity>&sloupec3nazev=element&sloupec3data=<nazev elementu> apod. :-Dsice to přidá trochu délku URL, ale nic závratného, ale věřím, že tvá kontrukce implode to array by použít šla, jen nevím či se mi podaří to PDO bindování a prepared statements, ale zkusím to. Zatím děkuji moc všem.

MySQL › Převod porovnání databáze do…
15. 1. 2020   #385242

Ahoj všem, prosím o radu.

Do databáze jsem špatným způsobem nahrával data a kvůli tomu mám teď databázi plnou hieroglyfů jako třeba: "DolejÅ¡ Å¡kolení"

Dotaz zní: Jak to opravit převodem hieroglyfů do správného tvaru "Dolejší školení" ideálně přímo databází?

Děkuji všem za tip
 

MySQL › Neustálé problémy s diakriti…
15. 1. 2020   #385240

Pokud set_names dám:

Nikam: V databázi hieroglyfy a na webu v pořádku (nynější stav)

Jen před INSERT: Do databáze se přidají ve správném tvaru, ale na webu se data přestanou zobrazovat.

Je před SELECTEM: Do databáze se nadále přidávají hieroglify, které se 1:1 zobrazují i na webu.

Před INSERTEM i SELECTEM: To funguje skvěle s velkým háčkem. A to tak, že se správně zobrazují jen ty data, které jsou správně i v databázi. Tedy všecny data doposud nasbírané je potřeba z hieroglyfů převést do správné podoby.

Existuje na to nějaký převaděč? Ideálně už přímo v databázi.

MySQL › Neustálé problémy s diakriti…
15. 1. 2020   #385236

Ahoj všem, našla by se tu prosím hodná duše, která by mi polopaticky v bodech vysvětlila co všechno obnáší to, aby mi fungoval web na databázi se správnou diakritikou, řazením českých znaků.

  • Databáze má porovnání utf8_czech_ci.
  • Tabulky mají porovnání utf8_czech_ci.
  • Sloupečky mají porovnání utf8_czech_ci.
  • <meta charset="utf-8" />
  • A před insertem volám ještě: $conn->query("SET NAMES utf8;"); což mi zajišťuje, že se to do té databáze napíše správně s háčkama a čárkama, ne s hieroglyfy.

Zapomněl jsem ještě na něco? Nemám používat třeba utf8mb4 nebo tak něco mám pocit, že to můj hosting upřednostňuje. Jakým dotazem mohu ověřit, kde je chyba a proč mi to takto zlobí?

Pokud v databázi mám:

a) školení - toto slovo se na webu nezobrazuje nic

b) skoleni - na webu se zobrazuje "skoleni"

c) Å¡kolení - na webu se zobrazuje správně "školení", nynější stav před tím než jsem přidal řádek $conn->query("SET NAMES utf8;");, ale nevyhovuje mi, že v databázi je to takhle rozbité.

Děkuji moc za rady a tipy.

Při nastavování collation jsem nastavil takhle jak manuálním nastavením, tak i příkazem pomocí ALTER:

https://mediatemple.net/community/products/dv/204403914/default-mysql-character-set-and-collation

Edit: Nový poznatek, když před SELECT předstrčím zmíněné "$conn->query("SET NAMES utf8;"); ", tak se na webu začne zobrazovat stejný nesmysly, tak jak jsou v databázi např.: "Jiří "

PHP › Ukládání do souboru
8. 5. 2019   #383659

Hotovo, díky moc.

MySQL › Řazení podle české abecedy
6. 10. 2018   #381879

Přišlo mi moc práce mazat celou databázi a znovu ji vytvářet, tak jsem použil ALTER TABLE, doufám, že výsledek by měl být stejný, nicméně to nefunguje, bezezměny. 

Připojen obrázek.Upravil jsem i všechny sloupce té tabulky

Připojen obrázek.

alter table <some_table> convert to character set utf8 collate utf8_unicode_ci;

Nenapadá tě prosím nějaké možnosti troubleshootingu? Kam a na co se podívat, co zkusit?

MySQL › Řazení podle české abecedy
6. 10. 2018   #381877

#4 Kit
Omlouvám se nevím co myslíš, co mám dělat? COLLATE přímo na tabulkách? Myslel jsem, že to je nastavené dobře?

MySQL › Řazení podle české abecedy
6. 10. 2018   #381869

Myslíš tohle? Jestli chápu co myslíš, tak to není latin*, ale zdá se: utf8_general_ci

Toho unicode si nevšimej, to k tomu nepatří, to smažu, zkoušel sem našeptávač měst, států a zemí. :-D

Připojen obrázek.

Záznamy v databázi jsou oloženy se ymboly jako y = ý , á = á, č = Ä apod.

MySQL › Řazení podle české abecedy
6. 10. 2018   #381867

Ahoj všem zkušenějším, o pomoc se řazením databáze. Jistě jste to v začátcích také řešili.

Jestli se nepletu, správné řazení řádků podle sloupce by mělo vypadat podle tohoto vzoru:

A, a, Á á, B, b, C, c, Č, č

Mě to ale řadí takto: áéí,.......,a,b,c,d,e,.... (Diakritiku řadí na začátek)

Podle těchto rad: https://forum.c4.cz/mysql-abecedni-razeni-cestiny-t502.html

Jsem přidal do příkazu: COLLATE utf8_czech_ci;

A po připojení k databázi samozřejmě začínám příkazem $sql = "SET NAMES utf8;";

Máte prosím někdo radu, jak na to? Můj příkaz zjednodušeně vypadá takto:

SET NAMES utf8;
SELECT * FROM kontroly LEFT JOIN `kontakty` ON kontroly.id_kontaktu=kontakty.id WHERE 1=1 ORDER BY kontakty COLLATE utf8_czech_ci ASC LIMIT 0 ,100
PHP › Otazníky místo diakritiky
20. 9. 2018   #381712

Diakritika opravena aktualizací (tedy nahráním tcpd), protože na serveru vůbec záhadně nebyla. Hustá to anomálie. A dal jsem font DeJaVu a už to zdá se šlape jak se patří. Díky všem.

Ale klidně mi fakt dejte vědět, jak je možné, že mi doteď ta třída fungovala, přestože sem na na serveru ve svém kořeni nahranou neměl...

PHP › Otazníky místo diakritiky
20. 9. 2018   #381711

Ale co třeba haluška, kde mnou přiložený kód souboru pdf.php má jako require once třídu tcpdf, která neexistuje? :-D Viz screenshot s lokací adresáře souboru, který spouštím. Nikde na serveru tu třídu tcpdf nemám, ale funguje a instance mohu vytvářet, i PDF generuje. :-D

Můžete mi to prosím zatím někdo vysvětlit, než si poradím s tím fontem? :-D

Připojen obrázek.

PHP › Otazníky místo diakritiky
20. 9. 2018   #381710

#6 Kit
Proč tam máš MIME text/html, když generuješ PDF?

Protože sice generuji PDF ale text je html :-D Je to správně. :-P Jinak by se prohlížeč snažil ten soubor načítat jako PDF a to by se mu nepovedlo.

Problém bude pravděpodobně ve fontu, takže by ho mohlo vyřešit vygenerování fontu, který potřebné znaky zaručeně obsahuje.

Takže se tomu fakt nevyhnu jo. :-)  Divný, že neexistuje již hotový font, který umí i znaky, co potřebuji. :-)

PHP › Otazníky místo diakritiky
19. 9. 2018   #381705

Naopak, všechny potřebné tebou zmíněné přepínače tam mám, nebo se pletu?:

PHP header funkce:

header("Content-Type: text/html; charset=utf-8");
 

Objekt třídy PDF má také utf:
$obj_pdf = new TCPDF('P', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

SET NAMES sem zatím nedeklaroval, jednoduše proto, že zobrazující se chyby nemají s databází nic společného. Když si všimneš, tak všechny data co mají něco společného s MySQL jsou zakomentované. A tudíž tento přepínač je zbytečný, když s databází vůbec nepracuji?
 

PHP › Otazníky místo diakritiky
18. 9. 2018   #381700

#2 MilanL
No samozřejmě sem googlil a na stránce kterou jsi poslal jsem byl také. Otázkou je spíš jak mi ta stránka měla pomoct, pochybuji, že je nutné v shellu generovat vlastní fonty... :-)

Zde je tedy zdrojový kód:

<?php  
header("Content-Type: text/html; charset=utf-8");
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);



 function fetch_data()  
 {  
      $output = '';  
	  require('../../nastaveni.php');
      $conn = mysqli_connect($servername, $username, $password, $dbname);
      $sql = "SELECT * FROM firmy ORDER BY id ASC";  
      $result = mysqli_query($conn, $sql);  
      while($row = mysqli_fetch_array($result))  
      {       
							// <td>'.$row["id"].'</td>  
                          // <td>'.$row["firma"].'</td>  

      $output .= '<tr>  
                          
						  <td>nevím co je špatně</td>
						  <td>velký špatný</td>
						  <td>nefunguje ani iconv</td>
                     </tr>  
                          ';  
      }  
      return $output;  
 }  
 if(isset($_POST["generate_pdf"]))  
 {  
      require_once('tcpdf/tcpdf.php');  
      $obj_pdf = new TCPDF('P', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);  
      $obj_pdf->SetCreator(PDF_CREATOR);  
      $obj_pdf->SetTitle("Generátor do PDF");  
      $obj_pdf->SetHeaderData('', '', PDF_HEADER_TITLE, PDF_HEADER_STRING);  
      $obj_pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));  
      $obj_pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));  
      $obj_pdf->SetDefaultMonospacedFont('helvetica');  
      $obj_pdf->SetFooterMargin(PDF_MARGIN_FOOTER);  
      $obj_pdf->SetMargins(PDF_MARGIN_LEFT, '10', PDF_MARGIN_RIGHT);  
      $obj_pdf->setPrintHeader(false);  
      $obj_pdf->setPrintFooter(false);  
      $obj_pdf->SetAutoPageBreak(TRUE, 10);  
      $obj_pdf->SetFont('helvetica', '', 11);  
      $obj_pdf->AddPage('L');  // na šířku
	  //$test = iconv('UTF-8', 'windows-1252', "ěščřžýá");
      $content = '';  
	  $content .= '  
      <h4 align="center">Něco na ukázku</h4><br /> 
      <table border="1" cellspacing="0" cellpadding="3">  
           <tr>  
				<th width="3%">Id</th>  
				<th width="28%">Číslo</th>  
				<th width="6%">Masíčko</th>  
				<th width="8%">Čokoláda</th>  
  
						
           </tr>  
      ';  
      $content .= fetch_data();  
      $content .= '</table>';  
      $obj_pdf->writeHTML($content);  
      $obj_pdf->Output('pdf.pdf', 'I');  
 }  
 ?>  
 <!DOCTYPE html>  
 <html>  
      <head>  
           <title>Generátor PDF</title>  
		   <meta http-equiv="content-type" content="text/html; charset=utf-8" />
           <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />            
      </head>  
      <body>  
           <br />
           <div class="container">  
                <h4 align="center">Generátor  PDF</h4><br />  
                <div class="table-responsive">  
                	<div class="col-md-12" align="right">
                     <form method="post">  
                          <input type="submit" name="" class="btn btn-danger" value="Vrátit se zpět" />  
                          <input type="submit" name="generate_pdf" class="btn btn-success" value="Generovat PDF" />  
                     </form>  
                     </div>
                     <br/>
                     <br/>
                     <table class="table table-bordered">  
                          <tr>  
				<th width="3%">Id</th>  
				<th width="28%">Číslo</th>  
				<th width="6%">Masíčko</th>  
				<th width="8%">Čokoláda</th>  
                          </tr>  
                     <?php  
                     echo fetch_data();  
                     ?>  
                     </table>  
                </div>  
           </div>  
      </body>  
</html>
PHP › Otazníky místo diakritiky
17. 9. 2018   #381698

Ahoj, hraji si s tcpdf a ať se snažím jak chci, nedaří se mi zařídit, aby ve vygenerovaném PDF byly správně symboly jako : ěščřžýáíéĚŠČŘŽÝÁÍÉ. Beru zpět, znaky s čárkou jako ýáíé fungují, nefunguj jen s háčkem jako: ěščřž Namísto nich se zobrazují jen otazníky. Jako kdyby to písmo, které tam je přednastavené neumělo, ale ta helvetica by tam měla být.

Zkoušel jsem funkci iconv, ale podařilo se mi najít jen variantu, která to ještě zhorší.

Máte prosím pěkně pro mě nějaký typ? V příloze je, jak to vypadá. Případně dodám i kód.

Připojen obrázek.

Díky moc všem co poradíte.

PHP › Jak funguje podmínka if?
23. 8. 2018   #381351

Já spíš myslel jestli neexistuje nějaký speciální případ, ve kterém by bylo možné, aby nastalo co jsem popsal, tedy vykonání všech bloků splňujících podmínku, i když to prostě nemůže být, když to klíčové slovo "else" vylučuje.

No nic tedy neřešte udělám nějaké logování a pořádně to prověřím. Přitom amatérky  programuji přes 10 let, ale dnes si přijdu jako kdyby první den. Takhle se mi if chová prvně. Napsal jsem to imperativně, je to pěkný guláš, vnořené podmínky apod, možná mi něco uniklo, odkrokuji si to a přijdu na to. Napsal jsem sem, jen protože sem na rybách vrtá mi to hlavou a nudím se. :-D

PHP › Jak funguje podmínka if?
23. 8. 2018   #381345

Ahoj,

potřebuji radu ohledně fungování podmínky if.

Uvedu příklad:

if (splněna) {

   akce1();

} else if (také splněna) {

   akce2();

} else {

   akce3();

}

Dotazy:

1. Pokud jsou splněny obě podmínky, tak se vykoná akce1(); i akce2(); ? Intuice mi říká, že to určitě má vykonat jen první podmínku a dál se konstrukcí podmínky nezabývá, najde první splňující platnou podmínku a zbytek zahodí. Problém je, že se mi algoritmus opravdu chová tak, že vykonává obě akce, což mě dost mate.. :-D

2. Pokud odpověď na první otázku je ANO, tak mi prosím poraďte, zda tam funguje neco jako  break? V návodech to nevidím.

PHP › Session a uživatelská skupina
28. 7. 2018   #381051

Já si taky právě myslím a když zvořu a dostane se k editaci session, tak už stejně název té proměnné přece nehraje roli. Takže mám na salámu. :-) Díky za vysvětlení.

PHP › Session a uživatelská skupina
27. 7. 2018   #381047

#10 peter

To jo no místo admin tu proměnnou nazvu nejak jinak, třeba opravneni731 :-D Díky za upozornění, to mi vůbec nedošlo. Člověk se musí napřed hackovat, aby věděl web udělat pořádně. :-)

Jinak položit admin rovno 1 mu nepomůže stejně bude muset dosadit do databáze hash s heslem, ale když je to v době, kdy má přístup ke zdrojovým souborům, tak je to hračka.

No když už sme zabředli do tohodle. Chtělo by se ti mě poučit jak by se hacker dostal k tomu aby mohl upravit session?

PHP › Session a uživatelská skupina
24. 7. 2018   #381025

#7 peter
Super, díky moc za moc super informací. Taky dělám asi blbost, že do session ukládám něco jako $admin = 1 nebo 0; :-D

Každopádně, na generování hashů apod kašlu, nejde o citlivá data a nechci to s tou bezpečností přehánět.

PHP › Session a uživatelská skupina
24. 7. 2018   #381024

#6 Kit
Jo, přesně takhle mám výpisy do tabulky, ale výpisy jsou jen jedna část, ale když v tom selectu vypíši více atributů. Akorát v session neuchovávám id, ale login.

PHP › Session a uživatelská skupina
22. 7. 2018   #381004

#4 Kit
Teď vůbec nevím o čem píšeš, nespletl sis vlákno?

Případně nějaký kod pro ukázku bys prosím neměl?

Jak jsem to napsal já, že to udělám, tak je to špatné řešení?

Jako výpisy mám joinem sloučené uživatele a záznamy které mají vidět, to jo. Tam mám selekci už v dotazu pro výpis.

PHP › Session a uživatelská skupina
22. 7. 2018   #381002

Hele ani nevím, asi sem to zkopíroval již s example pro přihlašovací formulář. :-D

Jasně udělám to taky tak, před načtením obsahu stránky zavolám nějakou funkci, která složeným dotazem vyčte z DB veškerá oprávnění a podle vyýpisu z DB sestaví stránku, tak, aby to odpovídalo uživatelské skupině uživatele.Díky.

PHP › Session a uživatelská skupina
22. 7. 2018   #381000

Ahoj všem,

prosím si radu ohledně uživatelské skupiny, myslíte si, že je vhodné, abych při přihlášení uživatele vytvořil session která ponese informaci jakou má uživatelskou skupinu?:

session_start();
$_SESSION['login'] = stripslashes($login);

$_SESSION['login'] = stripslashes($skupina);

Potom bych měl jen na určitých částeh stránky funkce které by se pomocí této session ptala databáze zda má oprávnění například pro přístup ke stránce nebo se stisknutí tlačítka, či odstranění záznamu apod. Funkce by vypadaly jako MáOprávněníOdstranitZáznam($_SESSION['login'], $idZaznamu) nebo kontrola zda se má zobrazit tlačítko, jestli ho má vidět nebo ne MáOprávněníVidětTlačítko($_SESSION['login']), apod.

Nebo se to v praxi řeší jinak? Jak byste to řešily Vy? Upozorňuji, že to nepíši v OOP, ale jako strukturální gulášek, teď toho lituji.

Díky všem za názor, případně radu jak na to jít jinak. Ale názory typu smazat a udělat znovu v OOP bych viděl nerad, protože už je to skoro hotové.

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 © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý