Autor Zpráva
Andrew19
Profil
mám tento řádek kódu

$vysledek = mysql_query("select * from zamestnanci ORDER BY $_POST["razeni"] ");

ale nějk mi to pořád nebere to post a už nevím jak to správně zapsat aby mi to nvyhodilo chybovou hlášku:-(

víte někdo? děkuji
Shulík
Profil
$vysledek = mysql_query("select * from zamestnanci ORDER BY ".$_POST["razeni"]); 

Máš problém s uvozovkama, uvozovky u post ruší uvozovky u řetězce předávaného mysql_query.
Andrew19
Profil
Shulík:
$vysledek = mysql_query("select * from zamestnanci ORDER BY ".$_POST["razeni"]);
když to napíšu takto tak mi vyjede hláška :

mysql_fetch_array(): supplied argument is not a valid MySQL result resource a říká že chyba je na dalším řádku který vypadá takto : while ($zaznam = mysql_fetch_array($vysledek)):

takže ještě je někde zakopaný pes:-(
armin
Profil
1) nespoléhal bych na "automatické" doplňování ASCending
2) skript je nebezpečný a neochráněný
3) správné (bezpečné) řešení:
switch ($_POST['razeni']) {
case 'sloupec1': $sloupec='sloupec1'; break;
case 'sloupec2': $sloupec='sloupec2'; break;
case 'sloupec3': $sloupec='sloupec3'; break;
}

$order_by=empty($sloupec) ? '' : 'ORDER BY `'.$sloupec.'` ASC';

$vysledek = mysql_query("SELECT * FROM `zamestnanci`".$order_by);
DoubleThink
Profil *
armin:
1) nespoléhal bych na "automatické" doplňování ASCending
To je fakt. S ASC je to víc cool a programátor pak vypadá, že tomu víc rozumí.

2) skript je nebezpečný a neochráněný
Nevidíš všechny vrstvy programu, nemůžeš posoudit.

3) správné (bezpečné) řešení:
Zde bych raději použil regulár [a-z0-9] nebo, pokud bych chtěl být hyperkorektní, tak in_array().
Andrew19
Profil
když to napíši se switch tak to jde děkuji i když nvím taky proč by bylo nutné psát ASC když je to automatické...
armin
Profil
DoubleThink:
To je fakt. S ASC je to víc cool a programátor pak vypadá, že tomu víc rozumí.
Ne každá verze MySQL umí zpracovat "neúplný" ORDER BY. A pokud něco dělám, tak dělám univerzálně, ne šupácky.

Nevidíš všechny vrstvy programu, nemůžeš posoudit.
$_POST lze podstrčit přes cURL třeba, takže ano, je to nebezpečné.

Zde bych raději použil regulár [a-z0-9] nebo, pokud bych chtěl být hyperkorektní, tak in_array().
Zbytečné, pokud mám tabulku o cca. 10-15 jasně znýmých sloupcech, není nic jednodušši a prostčí, než si nadefinovat případy, které můžou nastat. Tedy alespoň předpokládám, že se nejedná o univerzální skript, a i kdyby, není problém si vytáhnout názvy všech sloupců dané tabulky.
DoubleThink
Profil *
armin:
Ne každá verze MySQL umí zpracovat "neúplný" ORDER BY
Například která konkrétně?

$_POST lze podstrčit přes cURL třeba, takže ano, je to nebezpečné.
Nevidíš všechny vrstvy programu, nemůžeš posoudit.

Zbytečné, pokud mám tabulku o cca. 10-15 jasně znýmých sloupcech než si nadefinovat případy, které můžou nastat
Je to kalkulované riziko. Neexistující sloupec v ORDER BY končí očekávanou chybou, nejde o slabinu. Stačí zneprůchodnit řídicí znaky, jakýmkoliv způsobem. Switch je prasárna.
armin
Profil
DoubleThink:
Například která konkrétně?
Setkal jsem se s tím v roce 2004 +- na hostingu který snad již ani neexistuje, kdy se dělal upgrade redakčního systému psaného na míru - řazení novinek nefungovalo korektně - int(10) / unix timestamp při použití ORDER BY bez definice směru. Co to bylo za verzi MySQL a jak byla nakompilována netuším. Já dodržuji jistou kulturu při pasní kódu a prsty mi neupadnou, když tam přidám směr. Stejně tak mi prsty neupadnou, pokud tabulky a sloupce dávám do zpětných apostrofů, tak jak to má být. Ano, funguje vše i bez toho, do doby, než nenastane situace, kdy je název sloupce "problémový".

Nevidíš všechny vrstvy programu, nemůžeš posoudit.
Pokud někdo má problém sesmolit tak banální věc (Andrew19 - bez urážky), jaká se zde řeší, silně, opravdu silně pochybuji o nějaké pokročilejší ochraně. Navíc lze podstrčit vše - od postu, přes cookies, až po "sessiony" (kontinuální prací s webem).

Neexistující sloupec v ORDER BY končí...
To je sice pravda, akorát nikomu nic nebrání v tom, že pošleš v POSTu takový obsah, který bude vést k modifikaci dat v tabulce, ne k chybě sql dotazu, to je na nic. Rozhodně nepovažuji switch za prasárnu, je to silně účelové.

Celkově ale myslím, že se debata ubírá špatným směrem, ja jsem svůj úkol zde splnil, pokud myslíš že je potřeba soutěžit, tak tě tu ponechávám ;)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: