Hallo,

Ik gebruik de volgende code om een url te doorzoeken. dit werkt allemaal prima :

<?

/* velden die doorzocht moeten worden: */
$url = 'http://test.nl';

/* bestaat de url reeds ? */
$result = mysql_query("SELECT page_id FROM page WHERE page_url = \"$url\"");
$row = mysql_fetch_array($result);

if( $row['page_id'] )
{
/* zo ja, gebruik dan de oude: */
$page_id = $row['page_id'];
}
else
{
/* zo nee, maak een nieuwe: */
mysql_query("INSERT INTO page (page_url) VALUES (\"$url\")");
$page_id = mysql_insert_id();
}

/* verwijder alle HTML-tags: */
$url = strip_tags($url);
$url = ereg_replace('/&\w;/', '', $url);

/* haal alle woorden eruit: */
preg_match_all("/(\b[\w+]+\b)/",$url,$words);

?>

hierna volgt overigens nog een stuk extra code, maar anders werd het erg onoverzichtelijk om hier te plaatsen.

Hij haalt met deze code alle woorden op uit een url. Echter moet hij naast de url ook worden uit een naam (en later ook uit een omschrijving) halen, dit moet dus toegevoegd worden aan bovenstaande code, maar dat wil me niet echt lukken.

ik heb er zoiets van gemaakt :

<?

/* velden die doorzocht moeten worden: */
$url = 'http://bonnie.islive.nl/?p=629';
$naam = 'anita';

/* bestaat de url reeds ?? */
$result = mysql_query("SELECT page_id,naam_id FROM page,naam WHERE page_url = \"$url\",naam_oms = \"$naam\"");
$row = mysql_fetch_array($result);

if( $row['page_id'],$row['naam_id'] )
{
/* zo ja, gebruik dan de oude: */
$page_id = $row['page_id'];
$naam_id = $row['naam_id'];
}
else
{
/* zo nee, maak een nieuwe: */
mysql_query("INSERT INTO page (page_url),naam (naam_oms) VALUES (\"$url\",\"$naam\")");
$page_id = mysql_insert_id();
$naam_id = mysql_insert_id();
}

/* verwijder alle HTML-tags: */
$url = strip_tags($url);
$url = ereg_replace('/&\w;/', '', $url);

$naam = strip_tags($naam);
$naam = ereg_replace('/&\w;/', '', $naam);

/* haal alle woorden eruit: */
preg_match_all("/(\b[\w+]+\b)/",$url,$words);
preg_match_all("/(\b[\w+]+\b)/",$naam,$words);

?>

ik heb al zoveel geprobeerd, maar snap er nu echt niets meer van. Iemand een suggestie om mij verder te helpen ?
bovenstaande code werkt dus inderdaad niet, hij geeft dan geen error, maar voegt de woorden gewoonweg niet toe.

iemand nog een suggestie ?
ik snap er nou echt helemaal niets meer van. Het onderstaande werkt dus op zich wel maar dan krijg ik een error.

<?php

for( $i = 0; $words[$i]; $i++ )
{
for( $j = 0; $words[$i][$j]; $j++ )
{

?>

het enige wat ik nu nog kan bedenken (en ga dat zo proberen als ik thuis kom) is het volgende :

<?php

for( $i = 0; $words[$i <= 50] ; $i++ )
{
for( $j = 0; $words[$i][$j <= 50] <= 50; $j++ )
{

?>

ik weet alleen niet of dat mogelijk is maar ja proberen kan altijd. Verder heb ik overal gezocht op internet maar zie nergens echt een duidelijk uitleg danwel oplossing.

kan iemand me in de goede richting helpen ?


Wat voor waardes staan er in het array() words?
daar staan woorden in. het begin van de code doorzoekt een webpagina en haalt uit de omschrijving, titel, etc de woorden op en stopt deze in diverse variabelen die samen $words vormen
:

<?php

/* haal alle woorden eruit: */
preg_match_all("/(\b[\w+]+\b)/",$categorie,$words1);
preg_match_all("/(\b[\w+]+\b)/",$leeftijd,$words2);
preg_match_all("/(\b[\w+]+\b)/",$naam,$words3);
preg_match_all("/(\b[\w+]+\b)/",$naamsite,$words4);
preg_match_all("/(\b[\w+]+\b)/",$omschrijving,$words5);
preg_match_all("/(\b[\w+]+\b)/",$url,$words6);
preg_match_all("/(\b[\w+]+\b)/",$website,$words7);
preg_match_all("/(\b[\w+]+\b)/",$woonplaats,$words8);

$words = array_merge($words1, $words2, $words3, $words4, $words5, $words6, $words7, $words8);

?>
Dus jij bent een getal met een woord aan het vergelijken en dat gaat nooit werken.
doel je dan op $leeftijd ?

Deze moet echter wel toegevoegd worden maar ik zal even controleren of het probleem zich nog steeds voordoet als ik deze weg haal. Op zich heb je namelijk een goed punt, mijn dank daarvoor
Nee, op dit:
for( $i = 0; $words[$i] <= 50 ; $i++ )
dat begrijp ik niet helemaal, het is in ieder geval mijn bedoeling dat "<= 50 " als effect heeft dat er maximaal 50 woorden worden opgeslagen.
$words hoort daar helemaal niet te staan, die vergelijk je helemaal nergens mee. Het gaat je om de teller $i die je gebruikt om de array $words te doorlopen. $words hoef je, en mag je, dus helemaal niet noemen in de vergelijking.
<?
$words = array('aap', 'noot', 'mies');

for( $i = 0; $i <= 1 ; $i++ ){
echo $words[$i].' '; // resultaat: aap noot
}
?>
sorry, ik heb het wat verkeerd uitgelegd. $words word wel degelijk ergens mee vergeleken.

in $words staan al alle woorden die zijn opgehaald uit de pagina. met de for loop word gekeken hoe vaak het woord voorkomt.

Stel dat een woord 4 keer op een webpagina voorkomt (en dus 4x in $words is opgeslagen) dan dan slaat hij het dat woord maar 1 keer op in de database en zet er dan achter dat het 4x voorkomt (occurrence)

dit is namelijk de rest van de code :

<?
/* haal alle woorden eruit: */
preg_match_all("/(\b[\w+]+\b)/",$categorie,$words1);
preg_match_all("/(\b[\w+]+\b)/",$leeftijd,$words2);
preg_match_all("/(\b[\w+]+\b)/",$naam,$words3);
preg_match_all("/(\b[\w+]+\b)/",$naamsite,$words4);
preg_match_all("/(\b[\w+]+\b)/",$omschrijving,$words5);
preg_match_all("/(\b[\w+]+\b)/",$url,$words6);
preg_match_all("/(\b[\w+]+\b)/",$website,$words7);
preg_match_all("/(\b[\w+]+\b)/",$woonplaats,$words8);

$words = array_merge($words1, $words2, $words3, $words4, $words5, $words6, $words7, $words8);

/* doorzoek alle velden op woorden en voeg ze toe in de database: */
for( $i = 0; $words[$i]; $i++ )
{
for( $j = 0; $words[$i][$j]; $j++ )
{
/* bestaat het huidige woord al ? */
$cur_word = addslashes( strtolower($words[$i][$j]) );

$result = mysql_query("SELECT word_id FROM word
WHERE word_word = '$cur_word'");
$row = mysql_fetch_array($result);
if( $row['word_id'] )
{
/* zo ja, gebruik het oude word_id: */
$word_id = $row['word_id'];
}
else
{
/* zo nee,maak een nieuwe: */
mysql_query("INSERT INTO word (word_word) VALUES (\"$cur_word\")");
$word_id = mysql_insert_id();
}

/* voeg het aantal keer dat een woord voorkomt toe in de database: */
mysql_query("INSERT INTO occurrence (word_id,page_id)
VALUES ($word_id,$page_id)");
print "Indexing: $cur_word<br>";
}
}
?>

zo werkt de code bijna goed..hij doet in principe alles behalve dan de foutmelding mbt de for loop......

ik hoop dat ik zo wat duidelijker ben en je een idee hebt hoe ik dit op kan lossen.

bvd

Reageren