UPDATE databáze skrz formulář – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

UPDATE databáze skrz formulář – PHP – Fórum – Programujte.comUPDATE databáze skrz formulář – PHP – Fórum – Programujte.com

 

Díkydíky
~ Anonymní uživatel
2 příspěvky
22. 5. 2017   #1
-
0
-

Dobrý den,

   mám formulář, z něj potom načtu potřebný záznam co chci viz. https://pastebin.com/ayMA15NU   a chci provést editaci některého ze záznamu viz. https://pastebin.com/vrtSkLSH  .. Všechno proběhne, ale záznam se neupraví! Nevíte, kde mám chybu?

Děkuji mnohokrát!!

Nahlásit jako SPAM
IP: 83.208.155.–
peter
~ Anonymní uživatel
3619 příspěvků
22. 5. 2017   #2
-
0
-

1. php error_reporting
2. or die + mysqli_error (to tam mas)
3. Bylo by fajn, pro pouzivat bezpecnejsi verzi skladani sql dotazu, treba pdo s bindvalue. Jakoze, tohle uz se 10-20 let nepouziva (snad se to neuci ani ne skole).
4. Bylo by fajn nepouzivat echo pro vypis, ale ukladat to do promenne a echo udelat az na zaver, pripadne jako vystup funkce.

2 - Ti zadnou chybu nevypise? A jakym zpusobem zjistujes, ze to tam je ci neni? Nekesuje se ti nejaka stranka (nezobrazuje nova data)? Zkus tam dat stranka.php?123 (nahodne cislo). Nebo, obnovil jsi tu stranku (F5)?
3 - Myslim tak, ze staci nespravny apostrof ($_POST["jmeno"]="123\"456") a cely program jde k sipku.

5. 

$sql = "UPDATE Zakaznik SET ID_Zakaznik='.$ID_Zakaznik.', Prijmeni='.$prijmeni.', Jmeno='.$jmeno.', Ulice='.$ulice.', Mesto='.$mesto.', Telefon='.$telefon.', PSC='.$psc.', RodneCislo='.$rodcislo.' WHERE ID_Zakaznik='.$ID_Zakaznik.'";

Tohle je nesmysl. Retezec se da spojovat s promennymi takhle:
$x = "123$y456";
$x = "123{$y}456"; // coz provadi eval($y) a neni dobre to tak pouzivat
$x = "123".$y."456";
$x = "123".$y()."456"; // $y muze byt funkce
$x = '123'.$y.'456';
$x = '123'.$y().'456';
Sql dotaz muzes psat
"SELECT * FROM tab WHERE `a`=".$b
"SELECT * FROM tab WHERE `a`='".$b."'"
Tuhle verzi tam nevidim :)
"SELECT * FROM tab WHERE `a`='.$b.'"
 

Nahlásit jako SPAM
IP: 2001:718:2601:26c:48c5:47...–
peter
~ Anonymní uživatel
3619 příspěvků
22. 5. 2017   #3
-
0
-

K te 5, samozrejme plati 3, 5 neni bezpecny zapis sql dotazu. A az to nekdo zkusi hacknout, tak zpusobi miliardove skody a zakaznik te jiste rad pozene k soudu k odpovednosti.

Nahlásit jako SPAM
IP: 2001:718:2601:26c:48c5:47...–
Kit+14
Guru
22. 5. 2017   #4
-
0
-

#2 peter
Zapomněl jsi na jednu zajímavou a přehlednou variantu: 

"SELECT * FROM tab WHERE `a`='$b'"

Všechny fungují nejen u $b typu integer a string, ale i když je to objekt.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:9916:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kit+14
Guru
22. 5. 2017   #5
-
0
-

#1 Díkydíky
Pro zabezpečení vstupu si řádky, ve kterých používáš $_POST uprav takto: 

$zakaznik = MySQLi_real_escape_string($pripojenidb, $_POST["idzakaznik"]);

Nejlepší jsou samozřejmě prepared statements, ale o těch začátečníci obvykle slyší jen velmi neradi a víceméně je ignorují. Samozřejmě PDO je mnohem lepší než MySQLi, ale platí totéž co v předchozí větě.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:9916:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3619 příspěvků
23. 5. 2017   #6
-
0
-

#5 Kit
Ty taky nechapes smysl escape? :) Escapovat je treba, az kdyz to potrebujes. Ne driv a ne vubec. Co kdyby byla ve formulari chyba a potreboval by uzivateli vratit vyplneny formular? Kdyz to escapujes na sql a pak na html, tak zpetne odeslane hodnoty budou s chybne pridanymi uvozovkami nebo lomitky a to se pak ulozi znova escapuje a ulozi do db. A pri updatu tam naskacou zas dalsi lomitka.

Nahlásit jako SPAM
IP: 2001:718:2601:26c:dde3:2b...–
Kit+14
Guru
23. 5. 2017   #7
-
0
-

#6 peter
On tu proměnnou ještě cpe do HTML?

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3619 příspěvků
23. 5. 2017   #8
-
0
-

Podle kodu ne, ale, co kdyby ano. To bude zkouset v pristi fazi uprav, treba.

Nahlásit jako SPAM
IP: 2001:718:2601:26c:dde3:2b...–
Kit+14
Guru
23. 5. 2017   #9
-
0
-

#8 peter
V jedné funkci či metodě by se rozhodně nemělo kombinovat SQL a HTML. Pak je problém definovat, co má být jak escapováno a vznikají z toho zbytečné zmatky.

Nahlásit jako SPAM
IP: 85.93.112.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3619 příspěvků
23. 5. 2017   #10
-
+1
-
Zajímavé
Kit +

Ani bys tam nemel vyuzivat primo $_POST, ale predavat to jako parametr :)

Nahlásit jako SPAM
IP: 2001:718:2601:26c:eca7:9c...–
Kit+14
Guru
23. 5. 2017   #11
-
0
-

#10 peter
Správně, jinak se taková aplikace blbě testuje   

Nahlásit jako SPAM
IP: 85.93.112.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
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, 25 hostů

 

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