query / insert probleem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2

Robin

Robin

15/11/2006 20:14:00
Quote Anchor link
bovenstaande code werkt dus inderdaad niet, hij geeft dan geen error, maar voegt de woorden gewoonweg niet toe.

iemand nog een suggestie ?
 
PHP hulp

PHP hulp

19/11/2024 01:41:32
 
Robin

Robin

16/11/2006 13:03:00
Quote Anchor link
ik snap er nou echt helemaal niets meer van. Het onderstaande werkt dus op zich wel maar dan krijg ik een error.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?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 :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?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 ?
 
- SanThe -

- SanThe -

16/11/2006 13:49:00
Quote Anchor link
Wat voor waardes staan er in het array() words?
 
Robin

Robin

16/11/2006 13:53:00
Quote Anchor link
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
:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?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);

?>
Gewijzigd op 01/01/1970 01:00:00 door Robin
 
- SanThe -

- SanThe -

16/11/2006 14:01:00
Quote Anchor link
Dus jij bent een getal met een woord aan het vergelijken en dat gaat nooit werken.
 
Robin

Robin

16/11/2006 14:33:00
Quote Anchor link
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
 
- SanThe -

- SanThe -

16/11/2006 14:39:00
Quote Anchor link
Nee, op dit:
for( $i = 0; $words[$i] <= 50 ; $i++ )
 
Robin

Robin

16/11/2006 15:44:00
Quote Anchor link
dat begrijp ik niet helemaal, het is in ieder geval mijn bedoeling dat "<= 50 " als effect heeft dat er maximaal 50 woorden worden opgeslagen.
 
Frank -

Frank -

16/11/2006 15:56:00
Quote Anchor link
$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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?
$words
= array('aap', 'noot', 'mies');

for( $i = 0; $i <= 1 ; $i++ ){
  echo $words[$i].' '; // resultaat: aap noot
}
?>
 
Robin

Robin

16/11/2006 20:27:00
Quote Anchor link
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 :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?
/* 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
Gewijzigd op 01/01/1970 01:00:00 door Robin
 
Robin

Robin

16/11/2006 20:42:00
Quote Anchor link
dit is overigens de originele code van $words en daarbij kreeg ik geen foutmelding.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
preg_match_all("/(\b[\w+]+\b)/",$omschrijving,$words);
?>


omdat ik naast $omschrijving meerdere variabelen had heb ik dit aangepast naar het volgende, maar naar mijn inziens kan dit geen kwaad:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?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);

?>
 
Robin

Robin

18/11/2006 16:31:00
Quote Anchor link
ik had nu het volgende geprobeerd om te kijken of de fout in $words lag :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php

$buf
= $categorie . $leeftijd . $naam . $naamsite . $omschrijving . $url . $website . $woonplaats;

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

?>


Helaas krijg ik dezelfde foutmelding. Hij doet precies wat ik wil, maar geeft het volgende aan :

Notice: Undefined offset: 22 in /var/www/vhosts/bla.nlhttpdocs/test.php on line 102

het ligt dus echt aan de for loop in onderstaande code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php


/* 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>";
      }
}

}
    
?>


heeft echt niemand een idee ??

ps. $words moet dus wel in de for loop !! maar iets klopt er niet aan, er dient dus iets te worden toegevoegd, maar ik weet echt niet wat !!
 
Robin

Robin

18/11/2006 19:46:00
Quote Anchor link
Hallo,

Ik heb het probleem inmiddels opgelosd. De for loop is zo geworden:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php

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

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


?>
 

Pagina: « vorige 1 2



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.