Jak předat text parametrem funkci – JavaScript, AJAX, jQuery – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Jak předat text parametrem funkci – JavaScript, AJAX, jQuery – Fórum – Programujte.comJak předat text parametrem funkci – JavaScript, AJAX, jQuery – Fórum – Programujte.com

 

fix
~ Anonymní uživatel
182 příspěvků
13. 4. 2018   #1
-
0
-

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
        }
Nahlásit jako SPAM
IP: 92.240.177.–
peter
~ Anonymní uživatel
4007 příspěvků
13. 4. 2018   #2
-
0
-

function escapeHtml($str)       {return htmlspecialchars($str);}
function escapeUrl($str)       {return urlencode($str);}

$odkaz = "index.php?a=" . escapeUrl("str");
echo '<a rel="nofollow" href="'.escapeHtml($odkaz).'">odkaz</a>'

Nahlásit jako SPAM
IP: 2001:718:2601:258:4dbc:38...–
peter
~ Anonymní uživatel
4007 příspěvků
13. 4. 2018   #3
-
0
-

Jo, asi zkousis nejaky nesmysl.
Pres js se da odesilat pres httprequest (jquery). Nebo muzes pouzit skryty iframe (display:none) a menit u nej src. Nebo muzes u tagu script menit src.
Jak to delas, bych to nedelal. Radeji bych odesilal formular ze stranky. Pro zacatecnika lepsi nez se drbat s javascriptem, ktery mnohdy neni uplne kompatibilni.
google = javascript httprequest example get post

Nahlásit jako SPAM
IP: 2001:718:2601:258:4dbc:38...–
fix
~ Anonymní uživatel
182 příspěvků
13. 4. 2018   #4
-
0
-

#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

}
Nahlásit jako SPAM
IP: 92.240.177.–
gna
~ Anonymní uživatel
1882 příspěvků
13. 4. 2018   #5
-
0
-

První věc je ten vygenerovaný kód. Pokud je druhý parametr string, tak by měl být uzavřený v apostrofech nebo uvozovkách, vnitřní uvozovky a speciální znaky escapnuté, apod. podle syntaxe JS. Celé je to atribut v HTML, takže zase podle toho kódovat.

A pak ta funkce pro odesílání. Data v URL se zase nějakým způsobem kódují, nemůžeš to tam jen tak frknout.

Celkově se to takhle nedělá. Na odesílání dat jsou formuláře.

Nahlásit jako SPAM
IP: 213.211.51.–
gna
~ Anonymní uživatel
1882 příspěvků
13. 4. 2018   #6
-
0
-

Teď koukám, že to vlastně už peter napsal.

Nahlásit jako SPAM
IP: 213.211.51.–
fix0
Stálý člen
13. 4. 2018   #7
-
0
-

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.

Nahlásit jako SPAM
IP: 92.240.177.–
peter
~ Anonymní uživatel
4007 příspěvků
13. 4. 2018   #8
-
+1
-
Zajímavé
fix +

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.

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.

Tve minus, kdyz si z te fukce odstranis tu hlavni cast, htmlescape. To pak davas prilezitost hackerum.
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 :)
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'

Nahlásit jako SPAM
IP: 193.84.205.–
fix0
Stálý člen
13. 4. 2018   #9
-
0
-

#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í.

Nahlásit jako SPAM
IP: 92.240.177.–
peter
~ Anonymní uživatel
4007 příspěvků
16. 4. 2018   #10
-
0
-

Muze a nemuze. Zalezi na zbytku kodu a nastaveni serveru. Zalezi na tom, jak s cookies session pracujes. Podle toho, co popisujes, je ti jedno, co uzivatel posila. Treba bych ti do zprav, komentaru poslal </div></div></div></div></div>. Nebo legracku typu <div onload="document.body.innerHTML='';">. Urcite bys byl nadseny :)

Nahlásit jako SPAM
IP: 2001:718:2601:258:a0aa:8a...–
fix0
Stálý člen
16. 4. 2018   #11
-
0
-

#10 peter

No to bych to hledal týden v kuse, ani bych nespal :-D

Nahlásit jako SPAM
IP: 109.81.211.–
peter
~ Anonymní uživatel
4007 příspěvků
16. 4. 2018   #12
-
0
-

Hackerovi trva najit prvni diru asi 10 s. Vsechny, kdyz ma pristup ke kodu, asi 10 min :) Cim vic budes spat, tim rychleji prijdes o data, pokud se stane tva stranka atraktivni pro hackery.

Nahlásit jako SPAM
IP: 2001:718:2601:258:60da:6c...–
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, 10 hostů

 

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