Notice: Undefined index:
ik heb wat problemen met onderstaande code. Hij geeft de resultaten wel weer maar geeft daarbij de volgende melding:
Notice: Undefined index: in /var/www/vhosts/bla.nl/httpdocs/1.php on line 36
de desbetreffende regel is:
en dit is de volledige code
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
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
<?php
$zoekterm = $_GET['zoekterm'];
$zoekterm_array = explode(" ", $zoekterm);
$score = array();
foreach($zoekterm_array as $zoekterm)
{
$result = mysql_query("SELECT *,
COUNT(*) AS occurrences FROM page p, word w, occurrence o
WHERE p.page_id = o.page_id AND
w.word_id = o.word_id AND
w.word_word = \"$zoekterm\"
GROUP BY p.page_id
ORDER BY occurrences DESC
LIMIT 0, 5" );
for( $i = 1; $row = mysql_fetch_array($result); $i++ )
{
$score[$row['categorie']] += $row['occurrences'];
}
}
if(count($score) > 0)
{
arsort($score);
while ($element = each($score))
{
echo $element[ "key" ];
echo " - ";
echo $element[ "value"];
echo " ";
}
}
else
{
//geen resultaten gevonden
}
?>
$zoekterm = $_GET['zoekterm'];
$zoekterm_array = explode(" ", $zoekterm);
$score = array();
foreach($zoekterm_array as $zoekterm)
{
$result = mysql_query("SELECT *,
COUNT(*) AS occurrences FROM page p, word w, occurrence o
WHERE p.page_id = o.page_id AND
w.word_id = o.word_id AND
w.word_word = \"$zoekterm\"
GROUP BY p.page_id
ORDER BY occurrences DESC
LIMIT 0, 5" );
for( $i = 1; $row = mysql_fetch_array($result); $i++ )
{
$score[$row['categorie']] += $row['occurrences'];
}
}
if(count($score) > 0)
{
arsort($score);
while ($element = each($score))
{
echo $element[ "key" ];
echo " - ";
echo $element[ "value"];
echo " ";
}
}
else
{
//geen resultaten gevonden
}
?>
iemand een idee wat er met bovenstaande code mis is ?
PROBLEEM 2
met behulp van onderstaande code haal ik "categorie" uit de resultaten naar boven, echter wil ik naast categorie ook "omschrijving" en "link" uit de resultaten halen.
Maar het lukt me niet om deze dan goed naar het scherm te schrijven.
het moet dus iets worden als:
echo $element[ "categorie" ];
echo $element[ "omschrijving" ];
echo $element[ "link" ];
iemand een idee hoe ik dit voor elkaar kan krijgen ?
dus
moet dit worden:
Groet,
Barry
je bedoelt zeker dat ie alles achterelkaar zet?
doe het dan zó:
echo $element[ "categorie" ] . "<br />";
echo $element[ "omschrijving" ] . "<br />";
echo $element[ "link" ] . "<br />";
uitleg:
. betekent eigenlijk +
"" zijn omdat het een echo is, dus hij echo't naar de html pagina
<br /> staat voor een line-break in html
groet,
Barry
bedankt voor de reactie,ik ga het meteen even proberen
het onderstaande werkt prima, maar laat dus alleen maar 1 waarde zien.
Echter kan ik ipv key en value geen andere waarden invullen ivm de each functie...iemand een idee hoe ik dit op moet lossen of welke functie ik kan gebruiken om alles naar het scherm te schrijven ?
- Wat wil je nu precies op het scherm hebben?
- Waarom gebruik je een for-lus daar waar een while-lus voor de hand ligt?
- Waarom ga je met arsort() sorteren wanneer je in de query eenvoudig kunt sorteren?
- Waarom neem jij aan dat de query altijd lukt? Je hebt de garantie dat dit niet het geval is.
deze resultaten zijn al gesorteerd op relevantie (ORDER BY occurrences DESC), echter als men zoekt met meerdere zoektermen klopt de relevantie niet.
Zoekt men bijvoorbeeld op "leuke fietsen" dan ranken resultaten met het woord "leuke" hoger dan resultaten met de woorden "leuke fietsen" en dat is natuurlijk niet de bedoeling!
Vandaar ook dat er nog een extra score aan gehangen word.
het is de bedoeling dat de score berekend word adhv de resultaten en deze netjes naar het scherm worden geschreven.
Echter heb ik nu dus 2 problemen:
1. de foutmelding : undefined index
2. het lukt me alleen om 1 onderdeel van het resultaat naar het scherm te schrijven met daarachter de score. dit omdat ik door de each functie alleen met value en key kan werken voor zover ik weet.
Ik moet dus een andere functie gebruiken, heb er al veel over gepiekerd, maar ik heb werkelijk waar geen idee hoe ik dit moet doen.
de query zelf werkt goed, deze heb ik in php myadmin uitgebreid getest...of doelde je op de foutafhandeling ?
dat met de for lus en while lus begrijp ik niet helemaal, waarom ligt een while lus daar voor de hand ?
alvast bedankt voor je reactie
Gewijzigd op 01/01/1970 01:00:00 door Robin
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
for( $i = 1; $row = mysql_fetch_array($result); $i++ )
{
$omschrijving = $row['omschrijving'];
$naam = $row['naam'];
$oc = $row['occurrences'];
if (isset($score[$omschrijving . $naam]))
{
$score[$omschrijving . $naam] += $oc;
}
else
{
$score[$omschrijving . $naam] = $oc;
}
?>
for( $i = 1; $row = mysql_fetch_array($result); $i++ )
{
$omschrijving = $row['omschrijving'];
$naam = $row['naam'];
$oc = $row['occurrences'];
if (isset($score[$omschrijving . $naam]))
{
$score[$omschrijving . $naam] += $oc;
}
else
{
$score[$omschrijving . $naam] = $oc;
}
?>
Nu zoek ik alleen nog een manier om de resultaten goed naar het scherm te schrijven.
alle data zit nu dus in $score :
Code (php)
maar hij zet alles nu achter elkaar (dus naam en omschrijving zijn in dit geval "key". is er een mogelijkeid om deze data te scheiden ?
dus ipv echo $element[ "key" ].
iets van :
echo $element[ "key.naam" ].
echo $element[ "key.omschrijving" ].
of is dat niet mogelijk ?
je hebt overigens gelijk mbt de for lus...deze heb ik aangepast naar een while lus...de for lus werkte wel, maar was inderdaad niet nodig
Quote:
In dat geval is de query dus niet goed. Een query is niets meer dan een vraag waar jij een correct antwoord op wilt krijgen. Wanneer dan het antwoord niet overeenkomt met datgene dat jij verwacht, dan is de vraag niet goed gesteld of er ontbreken gegevens.echter als men zoekt met meerdere zoektermen klopt de relevantie niet.
Jij probeert nu een deel van de vraag op te lossen in php. Dat maakt de boel onnodig ingewikkeld en zal waarschijnlijk leiden tot een lapmiddel. Ga dus nog eens heel goed kijken hoe je de query moet opstellen om wél het juiste antwoord te krijgen.
En wat betreft het mislukken van de query, daar heb ik het inderdaad over de foutafhandeling. De query kan nog zo goed zijn, dat zegt helemaal niets over de beschikbaarheid van de database.
Nu zoek ik in onderstaand voorbeeld dus op "batavus fietsen". nu komt het voor dat een resultaat met daarin "batavus fietsen" lager op de resultaten lijst staat dan een resultaat met 3x het woord "fietsen"...ik wil dit dus voorkomen / oplossen en wil resultaten die alle zoekwoorden bevatten bovenaan hebben in de resultaten, maar heb echt geen idee hoe ik dat moet doen...
zou je me een beetje op weg kunnen helpen ?
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
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
<?php
$zoekwoorden = 'batavus fietsen';
$zoekterm = explode(" ", $zoekwoorden);
$query = "SELECT categorie, leeftijd, naam, naamsite, omschrijving, url, website, woonplaats,
soort, ctags, atags, tags,
COUNT(*) AS occurrences FROM page p, word w, occurrence o
WHERE p.page_id = o.page_id AND
w.word_id = o.word_id AND
w.word_word = \"$zoekterm[0]\"
GROUP BY p.page_id
ORDER BY occurrences DESC
LIMIT 0, 200";
for($i = 1;$i < count($zoekterm); $i++)
{
$query = "SELECT categorie, leeftijd, naam, naamsite, omschrijving, url, website, woonplaats,
soort, ctags, atags, tags,
COUNT(*) AS occurrences FROM page p, word w, occurrence o
WHERE p.page_id = o.page_id AND
w.word_id = o.word_id AND
w.word_word = \"$zoekterm[$i]\"
GROUP BY p.page_id
ORDER BY occurrences DESC
LIMIT 0, 200";
}
$res = mysql_query($query) or trigger_error(mysql_error());
if ($res == 0)
{
//Display a no pages found page
}
else
{
while ($row = mysql_fetch_assoc($res))
{
echo $row['naam']."<br/>";
echo $row['occurrences']."<br/>";
}
}
?>
$zoekwoorden = 'batavus fietsen';
$zoekterm = explode(" ", $zoekwoorden);
$query = "SELECT categorie, leeftijd, naam, naamsite, omschrijving, url, website, woonplaats,
soort, ctags, atags, tags,
COUNT(*) AS occurrences FROM page p, word w, occurrence o
WHERE p.page_id = o.page_id AND
w.word_id = o.word_id AND
w.word_word = \"$zoekterm[0]\"
GROUP BY p.page_id
ORDER BY occurrences DESC
LIMIT 0, 200";
for($i = 1;$i < count($zoekterm); $i++)
{
$query = "SELECT categorie, leeftijd, naam, naamsite, omschrijving, url, website, woonplaats,
soort, ctags, atags, tags,
COUNT(*) AS occurrences FROM page p, word w, occurrence o
WHERE p.page_id = o.page_id AND
w.word_id = o.word_id AND
w.word_word = \"$zoekterm[$i]\"
GROUP BY p.page_id
ORDER BY occurrences DESC
LIMIT 0, 200";
}
$res = mysql_query($query) or trigger_error(mysql_error());
if ($res == 0)
{
//Display a no pages found page
}
else
{
while ($row = mysql_fetch_assoc($res))
{
echo $row['naam']."<br/>";
echo $row['occurrences']."<br/>";
}
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Robin
Notice: Undefined index: max in /var/www/blabla/test.php on line 16
Notice: Undefined index: start in /var/www/blabla/test.php on line 17
dit is de code en start en max zouden gewoon moeten werken aangezien ik daar niets aan veranderd heb en het daarvoor prima werkte....het zit hem ergens in de limit, maar ik heb geen idee wat ik verkeerd doe.
ik heb ook geprobeerd om de limit direct in beide queries te zetten, maar dat gaf hetzelfde resultaat.
de foutmelding krijg ik overigens wel weg met de isset functie, maar hij pakt het gewoonweg niet helemaal goed, hij vind de zoekwoorden niet indien hij naar een volgende pagina gaat
Iemand een idee wat ik verkeerd doe ?
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
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
<?php
$extrazoek = $_GET['extrazoek'];
$zoekwoorden = $_GET['zoekterm'];
if(is_numeric($_GET['max'])) $max = $_GET['max'];
if(is_numeric($_GET['start'])) $start = $_GET['start'];
if (empty($max)) $max = 6;
if (empty($start)) $start = 0;
$end = $start + $max;
$prev = $start - $max;
$next = $end;
$starttijd = microtime();
$zoekterm = explode(" ", $zoekwoorden);
switch ($_GET['extrazoek']) {
case "zoekalles":
$query = "SELECT *, COUNT(*) AS occurrences
FROM page p, word w, occurrence o
WHERE p.page_id = o.page_id AND
w.word_id = o.word_id AND
w.word_word = \"$zoekterm[0]\"
GROUP BY p.page_id
ORDER BY occurrences DESC";
break;
case "fietsen":
$query = "";
break;
}
for($i = 1;$i < count($zoekwoorden); $i++)
{
switch ($_GET['extrazoek']) {
case "zoekalles":
$query .= "SELECT *, COUNT(*) AS occurrences
FROM page p, word w, occurrence o
WHERE p.page_id = o.page_id AND
w.word_id = o.word_id AND
w.word_word = \"$zoekterm[$i]\"
GROUP BY p.page_id
ORDER BY occurrences DESC";
break;
case "fietsen":
$query .= " ";
break;
}
}
$res = mysql_query($query) or trigger_error(mysql_error());
$count = mysql_num_rows($res);
$query .= " LIMIT $start, $max";
$res = mysql_query($query) or trigger_error(mysql_error());
$count = mysql_num_rows($res);
if ($count == 0)
{
//geen pagina´s gevonden
}
else
{
//hier komen de resultaten
}
?>
$extrazoek = $_GET['extrazoek'];
$zoekwoorden = $_GET['zoekterm'];
if(is_numeric($_GET['max'])) $max = $_GET['max'];
if(is_numeric($_GET['start'])) $start = $_GET['start'];
if (empty($max)) $max = 6;
if (empty($start)) $start = 0;
$end = $start + $max;
$prev = $start - $max;
$next = $end;
$starttijd = microtime();
$zoekterm = explode(" ", $zoekwoorden);
switch ($_GET['extrazoek']) {
case "zoekalles":
$query = "SELECT *, COUNT(*) AS occurrences
FROM page p, word w, occurrence o
WHERE p.page_id = o.page_id AND
w.word_id = o.word_id AND
w.word_word = \"$zoekterm[0]\"
GROUP BY p.page_id
ORDER BY occurrences DESC";
break;
case "fietsen":
$query = "";
break;
}
for($i = 1;$i < count($zoekwoorden); $i++)
{
switch ($_GET['extrazoek']) {
case "zoekalles":
$query .= "SELECT *, COUNT(*) AS occurrences
FROM page p, word w, occurrence o
WHERE p.page_id = o.page_id AND
w.word_id = o.word_id AND
w.word_word = \"$zoekterm[$i]\"
GROUP BY p.page_id
ORDER BY occurrences DESC";
break;
case "fietsen":
$query .= " ";
break;
}
}
$res = mysql_query($query) or trigger_error(mysql_error());
$count = mysql_num_rows($res);
$query .= " LIMIT $start, $max";
$res = mysql_query($query) or trigger_error(mysql_error());
$count = mysql_num_rows($res);
if ($count == 0)
{
//geen pagina´s gevonden
}
else
{
//hier komen de resultaten
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Robin
Normaliter gaat hij indien men op volgende drukt door naar de volgende 6 resultaten.
als ik nu op volgende druk zie ik dat hij de zoekterm niet meer pakt, in plaats daarvan zet hij : zoekterm=Array
iemand een idee hoe ik dit op kan lossen ?
EDit :je hebt helemaal gelijk zal voortaan reacties editen indien ik de laatste persoon ben die reageer. mijn excuses.
gr
Gewijzigd op 01/01/1970 01:00:00 door Robin
Offtopic:
Robin, even de Bump regels door lezen. ;) Je kan je berichten aanpassen met