Autor | Zpráva | ||
---|---|---|---|
candiess Profil |
#1 · Zasláno: 1. 12. 2010, 20:42:42 · Upravil/a: candiess
Dobrej, jelikož jsem asi 3 dny strávil na Internetu přemýšlením jak udělat našpetávač, nyní se s vámi chci o něj podělit..
Index.php <html> <body> <?php include "ajax-script.php";?> <input type="text" id="texty" onKeyUp="change()" /> <div id="vysledek"></div> </body> </html> ajax-script.php <script language="javascript" type="text/javascript"> <!-- //Browser Support Code function change(){ var ajaxRequest; // The variable that makes Ajax possible! try{ // Opera 8.0+, Firefox, Safari ajaxRequest = new XMLHttpRequest(); }catch (e){ // Internet Explorer Browsers try{ ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP"); }catch (e) { try{ ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP"); }catch (e){ // Something went wrong alert("Your browser broke!"); return false; } } } // Create a function that will receive data // sent from the server and will update // div section in the same page. ajaxRequest.onreadystatechange = function(){ if(ajaxRequest.readyState == 4){ var ajaxDisplay = document.getElementById('vysledek'); ajaxDisplay.innerHTML = ajaxRequest.responseText; } } // Now get the value from user and pass it to // server script. var hodnota = document.getElementById('texty').value; if(hodnota=="") { document.getElementById('vysledek').innerHTML=""; } else { var queryString = "?hodnota=" + hodnota; ajaxRequest.open("GET", "ajax-process.php" + queryString, true); ajaxRequest.send(null); } } //--> </script> ajax-process.php <meta http-equiv="content-type" content="text/html; charset=windows-1250" /> <?php include "db.php"; //include databáze $hodnota = $_GET['hodnota']; $hodnota = strtolower($hodnota); //zmenšení písma $query = mysql_query("SELECT * FROM eshop"); //vybrání produktu while($V = mysql_fetch_array($query)) { $nazev = $V['nazev']; $low_nazev = $V['nazev']; $low_nazev = strtolower($low_nazev); //Výpis produktu a následné zmenšení písma /*Tady začíná část našeptáváče*/ //kde začíná řetězec, $pocet = StrPos(" ". $low_nazev, $hodnota)-1; // Vypíše číslo $zacatek = SubStr($nazev,0,$pocet); //Prostředek řetězce (hodnota v inputu) bude TUČNÁ $prostredek = $hodnota; //konec řetězce $delka_zacatku = StrLen($zacatek); $delka_prostredku = StrLen($prostredek); $soucet = $delka_zacatku + $delka_prostredku; $delka_nazvu = StrLen($nazev); $konec = SubStr($nazev,$soucet,$delka_nazvu); if (StrPos (" ". $low_nazev, $hodnota)) { //Pokud je hodnota v inputu je obsažena v některém produktu echo $zacatek."<b>".$prostredek."</b>".$konec."<br>"; } } ?> Tímto vám chci ulehčit práci a případné vylepšení zcel rád uskutečním, případné dotazy rád vysvětlím..:) Tento našeptávač byl dělán pro E-shop, tkže kdybyjste ho použili. pozměňte data :) Ukázka..? ZDE a jako příklad tam napište Bambulák nebo zajíc nebo mimi...:) |
||
Radovan789 Profil * |
#2 · Zasláno: 1. 12. 2010, 21:04:37
candiess:
Zajímavé a užitečné jen tam nemáš ochranu proti tomu když tam někdo napíše mezeru, hodí to nepříjemný error. |
||
candiess Profil |
#3 · Zasláno: 1. 12. 2010, 21:06:15
jojo..:) a jak to ošetřit..? :D asi funkcí trim() ne.?
|
||
Radovan789 Profil * |
#4 · Zasláno: 1. 12. 2010, 21:09:32
candiess:
Buď trim a nebo stačí podmínka $text != " ". Ale trim se vtomto příkladu hodí víc. |
||
Keeehi Profil |
#5 · Zasláno: 1. 12. 2010, 21:11:42 · Upravil/a: Keeehi
Pár poznámek, jak to vylepšit:
1) Z databáze netahat všechny data (*) ale jen požadovaný sloupec (nazev). 2) Selekci položek nedělat až v PHP, ale rovnou v MYSQL. 3) Tvůj script má problémy s diakritikou. Kde nevím, to se mi zkoumat nechce. (viz. "dudlíkem") 4) Celé to obalování tagem <b> by šlo zkrátit na několik málo řádků (1-2), pokud by se použilo preg_replace 5) Koukni na stránku http://www.koval-crew.g6.cz/ajaaax.php, pokud není v adrese hodnota=xxx tak to hodí moře chyb. Chtělo by to ošetřit. |
||
Chamurappi Profil |
#6 · Zasláno: 1. 12. 2010, 21:11:50
Reaguji na candiesse:
„alert("Your browser broke!");“ To je fakt geniální, napsat anglicky člověku, jehož prohlížeč nepodporuje AJAX, že se mu rozbil prohlížeč. „queryString = "?hodnota=" + hodnota“ Pro adresy snad žádná syntaktická pravidla neplatí, že je možné je slepovat jen tak? Plus, ampersand, mřížka a při troše smůly i jakýkoliv znak s diakritikou selžou. Použij encodeURIComponent .
Proč máš ve skriptu, který posílá výstup, <meta> značku s kódováním? Ta funguje jen v obyčejné HTML stránce. Pokud chceš nastavit kódování výstupu (to bys opravdu měl chtít), nastav HTTP hlavičku s charset em.
Pochopil jsem správně, že pokaždé vytáhneš z DB úplně všechna slova a pak teprve zkoumáš, která vyhovují? |
||
candiess Profil |
#7 · Zasláno: 1. 12. 2010, 21:13:49
jop, hoši překvapili ste mě, mužu se jit zahrabat..:((
|
||
Radovan789 Profil * |
#8 · Zasláno: 1. 12. 2010, 21:17:12
candiess:
Dobré je že jsi dostal chuť něco sám vyřešit a navrhnout, těd to stačí vylepšovat jak psal Keeehi a Chamurappi, potom ve finální verzi to bude špička. |
||
Keeehi Profil |
#9 · Zasláno: 1. 12. 2010, 21:19:03 · Upravil/a: Keeehi
Chamurappi:
„Proč máš ve skriptu, který posílá výstup, <meta> značku s kódováním? Ta funguje jen v obyčejné HTML stránce. Pokud chceš nastavit kódování výstupu (to bys opravdu měl chtít), nastav HTTP hlavičku s charsetem.“ Za to on moc nemůže, neboť je to automaticky vkládaná reklama endorou. 6) Chtělo by to výsledek načítat do nějaké oblasti nad stránkou, aby ti celá neposkakovala. Např. do absolutně pozicovaného divu. 7) Aby ten našeptávač vlastně plnil účel, mělo by se nechat kliknout na to, co našeptává. 8) Vypisovat třeba maximáně 10 návrhů. Pak by to chtělo řadit výsledky z databáze podle počtu zobrazení daného výrobku, oblíbenosti výrobku, nebo počtu nákupů výrobku. 8b) Toto už by bylo složitější a není to nutnost. Ještě by z toho našeptávaného seznamu šly odebrat opakující se podobné výrobky (liší se jen v barvě, atd.) |
||
TomasJ Profil |
#10 · Zasláno: 1. 12. 2010, 21:28:15 · Upravil/a: TomasJ
Keeehi:
Ta reklama se dá jednoduše obejít ;) prostě po načtení stránky si načteš poslední div na stránce a tomu vymažeš obsah... (JS) |
||
Keeehi Profil |
#11 · Zasláno: 1. 12. 2010, 21:34:27 · Upravil/a: Keeehi
TomasJ:
1) Tím porušuješ pravidla. 2) Jako výstup který přijde do JS se to opravdu moc nehodí. Pokud bych si nechal poslat jako výstup {"a":1,"b":2,"c":3,"d":4,"e":5} a něco se mi před to automaticky vložilo, asi by to moc nefungovalo, jak by mělo. Tady by bylo potřeba se s podporou hostingu domluvit na nějaké výjimce pro tento script. |
||
Radovan789 Profil * |
#12 · Zasláno: 1. 12. 2010, 21:34:49
TomasJ:
Jenže porušíš pravidla a smažou ti obsah webu bez předchozího upozornění. Nedoporučuji. |
||
Leomato Profil |
#13 · Zasláno: 1. 12. 2010, 21:55:54
Ako mam tento skript upraviť aby mi pridával príspevky do shoutboxu nie pomocou GET ale POST
ajaxRequest.open("GET", "ajax-process.php" + |
||
Darker Profil |
#14 · Zasláno: 1. 12. 2010, 22:06:49
TomasJ:
Když už, existují daleko inteligentnější metody, než ta tvoje, které nepotřebují žádný Javascript. Keeehi: „Za to on moc nemůže, neboť je to automaticky vkládaná reklama endorou.“ Doporučuju předávat data mezi ajaxem a stránky jako text/plain. Pak tam endora nic nevloží. A na endoře doporučuju používat UTF kódování. Takové kódování totiž endora používá. Leomato: Jsi vedle jak ta jedle, založ si vlastní vlákno. A skus jQuery, mě se osvědčilo. |
||
Leomato Profil |
#15 · Zasláno: 1. 12. 2010, 22:07:30
dik
|
||
Darker Profil |
#16 · Zasláno: 1. 12. 2010, 22:09:53
Není zač.
|
||
TomasJ Profil |
#17 · Zasláno: 1. 12. 2010, 22:11:29 · Upravil/a: TomasJ
Keeehi:
„a něco se mi před to automaticky vložilo“ Endora má reklamu před |
||
Darker Profil |
#18 · Zasláno: 1. 12. 2010, 22:12:45
TomasJ:
Ne. Před </body>. Věř mi. |
||
TomasJ Profil |
#19 · Zasláno: 1. 12. 2010, 22:14:16 · Upravil/a: TomasJ
Darker:
Ano, promiň, máš pravdu. Nevšiml jsem si toho </body> na konci řádku... EDIT: Jedinné proč jsem si vůbec toto řešil, je, že reklama není nastylovaná. Kdyby byla jako u IC, tak nic nepíšu. Jenže ty jejich škaredě modré odkazy... Vím že se to dá nastylovat do <body> v CSS, ale i tak je špatně umístěna... |
||
candiess Profil |
#20 · Zasláno: 1. 12. 2010, 22:20:49
Endora už mi právě smázla pár webu, tk tam tu reklamu nechavam..:((
BTW: kdybych měl kodování v utf-8, jak tam mam psat normální text s diakritikou, aby to nepsalo otazníky..? |
||
Darker Profil |
#21 · Zasláno: 1. 12. 2010, 22:24:23
Kdybys to měl všude stejné, tak ti to fungovat bude.
|
||
Keeehi Profil |
#22 · Zasláno: 1. 12. 2010, 22:27:43
candiess:
To s UTF-8 je nejspíše kec. Ještě jsem neviděl server, který by vyžadoval soubory v UTF-8. Jde o to, mít kódování všude stejně nastavené a i soubor v tom kódování uložit. Jestli to je UTF-8 nebo třeba iso-8859-2 je šmafuk, hlavně aby to všude sedělo. |
||
Darker Profil |
#23 · Zasláno: 1. 12. 2010, 22:29:18
To je pravda. Evidentně to ale máš pokaždé jinak, tak jsem ti poradil s tím něco udělat. A pokud nepoužiješ UTF, budeš mít paznaky v reklamě, na to vem jed.
|
||
candiess Profil |
#24 · Zasláno: 1. 12. 2010, 22:54:02
Jojo, vim co myslíte...seberu všechny tyhle návrhy a zkusím to předělat, pak zde zkusím (pokud admin dovolí) hodit novou verzi pro volné užití..:-)
|
||
Chamurappi Profil |
#25 · Zasláno: 1. 12. 2010, 23:34:13
Reaguji na Keeehiho:
„Za to on moc nemůže, neboť je to automaticky vkládaná reklama endorou.“ Endora vkládá samotnou <meta> značku bez reklamy a jen do souboru, který se načítá AJAXem? V mateřské stránce deklarace kódování chybí (nebo aspoň chyběla, když jsem koukal).
Reaguji na candiesse: Neházej flintu do žita, jako základ to je dobré a to, že ses o něj chtěl podělit, je chvályhodné. „mužu se jit zahrabat“ Zahrabat, opravit a zase vyhrabat :-) |
||
__construct Profil |
#26 · Zasláno: 2. 12. 2010, 08:38:42
candiess:
toto je dosť zlý krok: $hodnota = $_GET['hodnota']; Pozri si niečo o bezpečnosti DB a escapovaní. Vlastne by si mal celkovo popracovať na svojich znalostiach čo sa týka DB; kopec tých operácií z reťazcami zvládne MySQL
Chamurappi: „… napsat anglicky člověku, …“ Výstižnejšie by bolo „napísať tri anglické slová“ :-) |
||
imploder Profil |
#27 · Zasláno: 2. 12. 2010, 11:03:50
Keeehi:
„Ještě jsem neviděl server, který by vyžadoval soubory v UTF-8. Jde o to, mít kódování všude stejně nastavené a i soubor v tom kódování uložit. Jestli to je UTF-8 nebo třeba iso-8859-2 je šmafuk, hlavně aby to všude sedělo.“ Ještě to musí sedět v HTTP hlavičce, kterou posílá server. A pokud je tvrdohlavý a posílá napevno třeba iso-8859-2 nebo utf-8, tak s tím kódování nastavené v HTML nic nenadělá (kódování v HTTP hlavičce má přednost. Server vyžadující soubory v utf-8 není kec. Je to sice zlý server, ale existovat klidně může. |
||
imploder Profil |
#28 · Zasláno: 2. 12. 2010, 11:10:56 · Upravil/a: imploder
candiess:
Endora.cz ale kódování neposílá, takže můžeš použít kódování jaké chceš. Dej mezi tagy <head> takovýto meta tag: <meta http-equiv="content-type" content="text/html; charset=utf-8"> To říká prohlížeči, že stránka je v kódování utf-8. Takže se už nikomu nebudou zobrazovat otazníky. <head> se dává před <body>, viz http://www.jakpsatweb.cz/zaklady-html.html |
||
Časová prodleva: 15 let
|
0