Klein foutje in zoekmachine
Ik heb een zoekfunctie op mijn website.
Maar sinds ik een ssl certificaat heb werkt de zoekfunctie niet goed meer.
Altans de resultaten verschijnen pas als ik de pagina eenmaal herlaad.
Ik ben een noob op gebied van javascript maar misschien wil iemand van jullie mij helpen.
De javascriptcode heb ik van de volgende website gedownload:
zoekmachine
Alleen werkt het forum op deze site helaas niet meer.
De code ziet er als volgt uit:
z_input.html :
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<script language="JavaScript" type="text/javascript">
veld = null;
function EnterOpvangen(veld, event) {
var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
if (keyCode == 13) {
if (veld == z_form.elements[0])
{search_form(z_form)}
return false;}
else return true;}
</script>
<input id="invoer" type="text" name="d" onkeypress="return EnterOpvangen(this, event)" value=""><br>
<input id="reset" type="reset" value="delete all">
<input id="button" type="button" value="search" name="search button" onClick="search_form(z_form)">
veld = null;
function EnterOpvangen(veld, event) {
var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
if (keyCode == 13) {
if (veld == z_form.elements[0])
{search_form(z_form)}
return false;}
else return true;}
</script>
<input id="invoer" type="text" name="d" onkeypress="return EnterOpvangen(this, event)" value=""><br>
<input id="reset" type="reset" value="delete all">
<input id="button" type="button" value="search" name="search button" onClick="search_form(z_form)">
z_form.js :
Code (php)
1
2
3
4
5
2
3
4
5
var results_location = "z_output.php";
function search_form(z_form) {
if (z_form.d.value.length > 0) {
document.cookie = "d=" + escape(z_form.d.value);
window.location = results_location;}}
function search_form(z_form) {
if (z_form.d.value.length > 0) {
document.cookie = "d=" + escape(z_form.d.value);
window.location = results_location;}}
z_data.js :
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
var sn = 0;
var s = new Array();
// VOORBEELD -----------------------------------------------------------------------------------------------------------
s[sn++] = /* AFBEELDING * / '<img src="" alt="">^'+
/* URL * / '^<!-- leeg -->^'+
/* ZOEKWOORDEN */ 'zoek,woorden';
//hieronder niets wijzigen
var include_num = 0; // resultaten nummeren
var bold = 1; // vet weergeven
var cookies = document.cookie;
var p = cookies.indexOf("d=");
if (p != -1) {
var st = p + 2;
var en = cookies.indexOf(";", st);
if (en == -1) {
en = cookies.length;}
var d = cookies.substring(st, en);
d = unescape(d);}
var od = d;var m = 0;
if (d.charAt(0) == '"' && d.charAt(d.length - 1) == '"') {
m = 1;}
var r = new Array();
var co = 0;
if (m == 0) {
var woin = new Array();
var w = d.split(" ");
for (var a = 0; a < w.length; a++) {
woin[a] = 0;
if (w[a].charAt(0) == '-') {
woin[a] = 1;}}
for (var a = 0; a < w.length; a++) {
w[a] = w[a].replace(/^\-|^\+/gi, "");}
a = 0;
for (var c = 0; c < s.length; c++) {
pa = 0;
nh = 0;
for (var i = 0; i < woin.length; i++) {
if (woin[i] == 0) {
nh++;
var pat = new RegExp(w[i], "i");
var rn = s[c].search(pat);
if (rn >= 0) {
pa++;} else {pa = 0;}}
if (woin[i] == 1) {
var pat = new RegExp(w[i], "i");
var rn = s[c].search(pat);
if (rn >= 0) {
pa = 0;}}}
if (pa == nh) {
r[a] = s[c];
a++;}}
co = a;}
if (m == 1) {
d = d.replace(/"/gi, "");
var a = 0;
var pat = new RegExp(d, "i");
for (var c = 0; c < s.length; c++) {
var rn = s[c].search(pat);
if (rn >= 0) {
r[a] = s[c];
a++;}}
co = a;}
function return_query() {
document.z_form.d.value = od;}
function num_jscript() {
document.write(co);}
function out_jscript() {
if (co == 0) {
document.write('<b>Use other keywords or<br>');
document.write('use more keywords or<br>');
document.write('use cominations like:<br>');
document.write('color of file, type of file, topic of file.<br>');
document.write('and try again</b>');
return;}
for (var a = 0; a < r.length; a++) {
var os = r[a].split("^");
if (bold == 1 && m == 1) {
var br = "<b>" + d + "</b>";
os[2] = os[2].replace(pat, br);}
if (include_num == 1) {
document.write(a + 1, '. <a class="result" href="', os[1], '">', os[0], '</a>', os[2]);}
else {document.write('<a class="result" href="', os[1], '">', os[0], '</a>', os[2]);}}}
var s = new Array();
// VOORBEELD -----------------------------------------------------------------------------------------------------------
s[sn++] = /* AFBEELDING * / '<img src="" alt="">^'+
/* URL * / '^<!-- leeg -->^'+
/* ZOEKWOORDEN */ 'zoek,woorden';
//hieronder niets wijzigen
var include_num = 0; // resultaten nummeren
var bold = 1; // vet weergeven
var cookies = document.cookie;
var p = cookies.indexOf("d=");
if (p != -1) {
var st = p + 2;
var en = cookies.indexOf(";", st);
if (en == -1) {
en = cookies.length;}
var d = cookies.substring(st, en);
d = unescape(d);}
var od = d;var m = 0;
if (d.charAt(0) == '"' && d.charAt(d.length - 1) == '"') {
m = 1;}
var r = new Array();
var co = 0;
if (m == 0) {
var woin = new Array();
var w = d.split(" ");
for (var a = 0; a < w.length; a++) {
woin[a] = 0;
if (w[a].charAt(0) == '-') {
woin[a] = 1;}}
for (var a = 0; a < w.length; a++) {
w[a] = w[a].replace(/^\-|^\+/gi, "");}
a = 0;
for (var c = 0; c < s.length; c++) {
pa = 0;
nh = 0;
for (var i = 0; i < woin.length; i++) {
if (woin[i] == 0) {
nh++;
var pat = new RegExp(w[i], "i");
var rn = s[c].search(pat);
if (rn >= 0) {
pa++;} else {pa = 0;}}
if (woin[i] == 1) {
var pat = new RegExp(w[i], "i");
var rn = s[c].search(pat);
if (rn >= 0) {
pa = 0;}}}
if (pa == nh) {
r[a] = s[c];
a++;}}
co = a;}
if (m == 1) {
d = d.replace(/"/gi, "");
var a = 0;
var pat = new RegExp(d, "i");
for (var c = 0; c < s.length; c++) {
var rn = s[c].search(pat);
if (rn >= 0) {
r[a] = s[c];
a++;}}
co = a;}
function return_query() {
document.z_form.d.value = od;}
function num_jscript() {
document.write(co);}
function out_jscript() {
if (co == 0) {
document.write('<b>Use other keywords or<br>');
document.write('use more keywords or<br>');
document.write('use cominations like:<br>');
document.write('color of file, type of file, topic of file.<br>');
document.write('and try again</b>');
return;}
for (var a = 0; a < r.length; a++) {
var os = r[a].split("^");
if (bold == 1 && m == 1) {
var br = "<b>" + d + "</b>";
os[2] = os[2].replace(pat, br);}
if (include_num == 1) {
document.write(a + 1, '. <a class="result" href="', os[1], '">', os[0], '</a>', os[2]);}
else {document.write('<a class="result" href="', os[1], '">', os[0], '</a>', os[2]);}}}
z_output.html :
Code (php)
1
2
3
2
3
<b><i>There were <script language="JavaScript1.3" type="text/javascript">num_jscript()</script> results found!</i></b>
<script language="JavaScript1.3" type="text/javascript">out_jscript()</script>
<script language="JavaScript1.3" type="text/javascript">out_jscript()</script>
Ik hoop dat iemand mij kan helpen
Gewijzigd op 29/12/2017 12:12:07 door Fester Splinter
Zelf vermoed ik dat er sprake is van 'mixed content' en dat je het pad naar je JS-bestand moet voorzien van een // als protocol. Dan wordt er gekeken of deze via HTTP of HTTPS wordt ingeladen.
Gewijzigd op 29/12/2017 11:32:16 door - Ariën -
Hoe zou zo'n pad er dan uit moeten zien? Moet ik die // voor het pad plaatsen? want dat heb ik geprobeerd maar dan vind ie het js bestand niet meer.
Ik heb het ook geprobeerd met een absoluut pad. Dus https://pad/jsbestand.js maar hiermee is het nog steeds niet opgelost.
Bij mixed content verschijnt er meestal een uitroeptekentje bij het groene slotje in de url balk. Dat is nu ook niet het geval.
Heb je een 'testcase' online staan?
Quote:
Laatste aanpassingen: 05.08.2005
Misschien werkt dit alles voor wat je er mee wilt bereiken, maar wellicht wordt/is het tijd om over een nieuwe oplossing na te denken die wellicht ook wat gebruiksvriendelijker is (en niet afhankelijk van JS is)?
Het 1e element in het form (met index 0) is namelijk de fieldset daarboven, en dus never nooit het "veld". Maar waarom controleer je dit hier? Deze functie is toch alleen maar gebonden aan dat "invoer" veld? Dan kun je deze controle net zo goed weglaten.
Het gaat fout op de regelIk heb die controle eruit gehaald maar het probleem is nog niet opgelost.
Wat ik vergeten ben te vermelden is dat de zoekmachine wel goed werkt in localhost.
Gewijzigd op 29/12/2017 15:43:21 door Fester Splinter
Volgens mij heb je iets te grof gesnoeid, want de hele functie "EnterOpvangen()" is nu weg. Je had alleen die if(...) regel weg moeten halen (en de evt. sluitende accolade).
Ik heb de functie EnterOpvangen() er maar helemaal uitgehaald omdat deze niet werkte.
Nou, zet 'm dan maar weer terug, want nu hebben we niks meer om op te schieten.
Ik heb de EnterOpvangen() functie weer terug geplaatst.
de regels: 'if (veld == z_form.elements[0])
{search_form(z_form)}'
heb ik niet meer terug geplaatst zoals je zei.
En werkt het nu?
Helaas werkt het nog niet in chrome en edge.
wel in firefox.
Gewijzigd op 03/01/2018 13:59:11 door Fester Splinter
Aan SSL kan het niet liggen, tenzij je iets via HTTP in zou laden op HTTPS, maar dat lijkt mij niet het geval.
Als ik op 'e' zoek krijg ik eerst een me,ding dat er niks gevonden is, en daarna als ik opnieuw zoek wel. dan lijkt het probleem mij meer in je PHP-script. Maar waarom gebruik je geen GET voor je zoekopdracht? Dat is een stuk gebruikelijker bij zoekopdrachten.
Gewijzigd op 03/01/2018 13:25:08 door - Ariën -
Het werkt wel in firefox maar niet in ms edge of chrome.
In localhost werkt het wel in alle browsers.
Quote:
Krijg je geen syntax-error? In dat geval is je code gewoon fout.
Aan SSL kan het niet liggen, tenzij je iets via HTTP in zou laden op HTTPS, maar dat lijkt mij niet het geval.
Als ik op 'e' zoek krijg ik eerst een me,ding dat er niks gevonden is, en daarna als ik opnieuw zoek wel. dan lijkt het probleem mij meer in je PHP-script. Maar waarom gebruik je geen GET voor je zoekopdracht? Dat is een stuk gebruikelijker bij zoekopdrachten
Aan SSL kan het niet liggen, tenzij je iets via HTTP in zou laden op HTTPS, maar dat lijkt mij niet het geval.
Als ik op 'e' zoek krijg ik eerst een me,ding dat er niks gevonden is, en daarna als ik opnieuw zoek wel. dan lijkt het probleem mij meer in je PHP-script. Maar waarom gebruik je geen GET voor je zoekopdracht? Dat is een stuk gebruikelijker bij zoekopdrachten
Beste Ariën, ik ben geen programmeur. Ik kan hoogstens een beetje knippen en plakken.
In firefox werkt het nu wel maar het werkt nog niet in ms edge en chrome.
Ik krijg geen syntax error.
Gewijzigd op 03/01/2018 14:00:01 door Fester Splinter
Waarom zou je het niet geheel in PHP oplossen, en hoogstens JavaScript voor een validatie of hulp bij het invullen van het veld.
De vraag is eigenlijk: Hoe en waar wordt er gezocht?
Gewijzigd op 03/01/2018 14:13:37 door - Ariën -
Ik kan zelf de pagina's bepalen waar naar gezocht kan worden, ik kan zelf de zoekwoorden bepalen per pagina en ik kan de resultaten met afbeeldingen weergeven.
Zo ziet de data (array) eruit:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
var sn = 0;
var s = new Array();
s[sn++] = /* AFBEELDING * / '<img src="" alt="">^'+
/* URL * / 'https://url-naar-pagina-afbeelding-1^<!-- leeg -->^'+
/* ZOEKWOORDEN */ 'zoek,woorden';
s[sn++] = /* AFBEELDING * / '<img src="" alt="">^'+
/* URL * / 'https://url-naar-pagina-afbeelding-2^<!-- leeg -->^'+
/* ZOEKWOORDEN */ 'zoek,woorden';
// etc...
var s = new Array();
s[sn++] = /* AFBEELDING * / '<img src="" alt="">^'+
/* URL * / 'https://url-naar-pagina-afbeelding-1^<!-- leeg -->^'+
/* ZOEKWOORDEN */ 'zoek,woorden';
s[sn++] = /* AFBEELDING * / '<img src="" alt="">^'+
/* URL * / 'https://url-naar-pagina-afbeelding-2^<!-- leeg -->^'+
/* ZOEKWOORDEN */ 'zoek,woorden';
// etc...
Met behulp van de zoekmachine doorzoekt ie de array en geeft alleen de afbeeldingen weer waar de gezochte zoekwoorden staan.
Ik heb de zoekmachine nu verplaatst naar een andere website waar ik geen ssl certificaat heb. Hier werkt ie wel goed dus het moet iets te maken hebben met het certificaat of https.
Tijdelijke locatie zoekmachine:
zoekmachine
Gewijzigd op 03/01/2018 19:15:14 door Fester Splinter
Ik stel toch in op een pad, als het op HTTPS niet werkt.
Maar misschien is het zinvoller om een modernere zoekmachine te maken.
Gewijzigd op 03/01/2018 19:38:40 door - Ariën -