Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pretraga i oznacavanje reci u tekstu iz MySql baze

[es] :: PHP :: Pretraga i oznacavanje reci u tekstu iz MySql baze

[ Pregleda: 2656 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

duchess
Ivana Petrovic
In the middle of nowhere.

Član broj: 142670
Poruke: 132
*.adsl-2.sezampro.yu.

Sajt: ivona.stens-turs.com


Profil

icon Pretraga i oznacavanje reci u tekstu iz MySql baze10.09.2008. u 10:37 - pre 190 meseci
Kako da oznacim rec u okviru teksta koji je u bazi? Treba mi da u okviru teksta koji stoji na stranici, a dolazi iz baze, budu oznacene reci koje postoje u toj tabeli... kao na foru wikipedije, ako u okviru jednog objasnjenja pojavi se rec za koju postoji objasnjenje, onda da se napravi link od te reci ka objasnjenju tog pojma...

???
Listen very carefully, I shall say this only once!
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-1.sezampro.yu.



+33 Profil

icon Re: Pretraga i oznacavanje reci u tekstu iz MySql baze10.09.2008. u 12:44 - pre 190 meseci
Na osnovu ovoga shto sam prochitao, mislim da znam shta hocesh da postignesh, a evo kako bih ja to odradio...

Za pochetak bih napravio josh jednu tabelu, npr. kljucne_reci, a u njoj polja: tekst_id i reci. Polje tekst_id je referenca na id nekog teksta u toj tabeli koju imash. U polje reci bih unosio kljuchne rechi za tekst na koji se odnosi, i to razdvojene razmacima. Posle bih u nekoj php skripti izvrshio upit koji bi "dohvatio" sve rechi koje nisu vezane za tekuci tekst koji prikazujesh, ovako neshto:
Code:

$upit = "SELECT tekst_id AS 'id', reci FROM kljucne_reci WHERE tekst_id != $tekst_id"; 
//promenljiva $tekst_id se odnosi na id teksta kojeg si prethodno "dovukla" iz prve tabele, i koji nameravash da ispishesh...

Posle toga, u petlji sve te rechi pojedinachno (bez zareza) treba da smestish u neki niz, tako da dobijesh niz stringova. Zatim, opet u petlji, za svaki element tog niza, odnosno za svaku kljucnu rech, treba da pitash da li se nalazi u okviru tekuceg teksta, npr. ovako:
Code:

for ($i=0; i<length($niz); $i++){
     if (stripos($tekst, $niz[i]) > 0){
          $tekst = str_replace($niz[i], '<a href = "tekst.php?id=' .$id .'">' . $niz[i] .'</a>', $tekst); //$id se odnosi na id tog teksta koji sadrzhi tu kljuchnu rech, tachnije to je onaj alijas iz gornjeg upita
     }
}

Eto, verovatno postoji josh neki nahin, ali ovo mi je prvo palo napamet...
Naravno, pre svega ovoga treba da poshaljesh upite koji ce da pokupe potrebne podatke. Mrzelo me da ispisujem sve kodove, objasnio sam ti samo ovako rechima, pa ti probaj, a ako negde zapne, javi...

[Ovu poruku je menjao Nikola Poša dana 10.09.2008. u 18:11 GMT+1]
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-1.sezampro.yu.



+33 Profil

icon Re: Pretraga i oznacavanje reci u tekstu iz MySql baze10.09.2008. u 17:17 - pre 190 meseci
Sad tek vidim da sam zaboravio neshto da napishem... U toj for petlji u drugom kodu, pre nego shto se odradi ovaj deo koda u if-u, treba poslati upit bazi kako bi se saznao taj $id. Evo sad kompletne for petlje:
Code:

for ($i=0; i<length($niz); $i++){

     if (stripos($tekst, $niz[i]) > 0){

          $upit = "SELECT tekst_id FROM kljucne_reci WHERE reci LIKE '%$niz[i]%'";
          $rezultat = mysql_query($upit);

          while ($red = mysql_fetch_assoc($rezultat)){
               $id = $red['tekst_id'];
          }

          $tekst = str_replace($niz[i], '<a href = "tekst.php?id=' .$id .'">' . $niz[i] .'</a>', $tekst); 
     }
}

 
Odgovor na temu

duchess
Ivana Petrovic
In the middle of nowhere.

Član broj: 142670
Poruke: 132
*.bvcom.net.

Sajt: ivona.stens-turs.com


Profil

icon Re: Pretraga i oznacavanje reci u tekstu iz MySql baze11.09.2008. u 07:29 - pre 190 meseci
e dobro.. uradila sve kao sto si mi napisao ali mi greska javlja u ovom redu:
for ($i=0; i< length ($niz); $i++)
a greska glasi:
Fatal error: Call to undefined function length() in putanjasajta\pojmovi.php on line 64

???
Listen very carefully, I shall say this only once!
 
Odgovor na temu

duchess
Ivana Petrovic
In the middle of nowhere.

Član broj: 142670
Poruke: 132
*.bvcom.net.

Sajt: ivona.stens-turs.com


Profil

icon Re: Pretraga i oznacavanje reci u tekstu iz MySql baze11.09.2008. u 07:33 - pre 190 meseci
i da citav kod mi izgleda ovako:
Code:

        $upit = "SELECT pojam , rec FROM kljucne_reci WHERE pojam = '$naziv_p'";
        $upit_rez = mysql_query($upit) or die(mysql_error());
        $upit_broj = mysql_num_rows($upit_rez);
        
        if($upit_broj)
        {
            $kljucne_reci=mysql_result($upit_rez,0,'rec');
            $niz = explode(' ',$kljucne_reci);
            
            for ($i=0; i< length ($niz); $i++)
            {

                 if (stripos($opis_p, $niz[i]) > 0)
                 {

                  $upit = "SELECT tekst_id FROM kljucne_reci WHERE reci LIKE '%$niz[i]%'";
                  $rezultat = mysql_query($upit);

                  while ($red = mysql_fetch_assoc($rezultat))
                  {
                       $id = $red['pojam'];
                  }

                  $tekst = str_replace($niz[i], '<a href = "tekst.php?id=' .$id .'">' . $niz[i] .'</a>', $opis_p); 
                }
            }
            
        }

Listen very carefully, I shall say this only once!
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Moderator
Član broj: 32202
Poruke: 4391
77.46.192.*

Sajt: https://avramovic.info


+46 Profil

icon Re: Pretraga i oznacavanje reci u tekstu iz MySql baze11.09.2008. u 08:20 - pre 190 meseci
Koristi count($niz) u for petlji, a ne length($niz)
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

duchess
Ivana Petrovic
In the middle of nowhere.

Član broj: 142670
Poruke: 132
*.adsl-2.sezampro.yu.

Sajt: ivona.stens-turs.com


Profil

icon Re: Pretraga i oznacavanje reci u tekstu iz MySql baze11.09.2008. u 08:31 - pre 190 meseci
Warning: stripos() [function.stripos]: needle is not a string or an integer.

i tako u nedogled... :(
Listen very carefully, I shall say this only once!
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Moderator
Član broj: 32202
Poruke: 4391
77.46.192.*

Sajt: https://avramovic.info


+46 Profil

icon Re: Pretraga i oznacavanje reci u tekstu iz MySql baze11.09.2008. u 09:57 - pre 190 meseci
Dobro, to je warning, nije fatal error, nije toliko strašno

A šta ti je tačno u nizu $niz... iscepkan je kod po porukama pa ne mogu sad da jurim... ajde uradi jedan print_r($niz); pre te petlje pa iskopiraj ovde, ili daj čitav kod.
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-1.sezampro.yu.



+33 Profil

icon Re: Pretraga i oznacavanje reci u tekstu iz MySql baze11.09.2008. u 10:09 - pre 190 meseci
Malo si me sad zbunila sa organizacijom te tabele 'kljuchne_rechi', al' dobro ako je tebi tako lakshe... :) Probaj ovo shto ti je Avram predlozhio, chisto da proverish da li se u tom nizu uopshte nalaze stringovi...

btw Bilo bi dobro da nam poshaljesh i strukturu te dve tabele. Malo mi je "sumnjiv" taj prvi upit koji si napisala...

[Ovu poruku je menjao Nikola Poša dana 11.09.2008. u 12:02 GMT+1]
 
Odgovor na temu

duchess
Ivana Petrovic
In the middle of nowhere.

Član broj: 142670
Poruke: 132
*.BVCOM.NET.

Sajt: ivona.stens-turs.com


Profil

icon Re: Pretraga i oznacavanje reci u tekstu iz MySql baze11.09.2008. u 11:07 - pre 190 meseci
Code:

        $select_pojam="SELECT * FROM i_pojmovnik WHERE status='Odobren' ORDER BY pojam";
    $select_pojam_rez=mysql_query($select_pojam) or die ("Ne mogu da prikazem pojmove!");
    $select_pojam_broj=mysql_num_rows($select_pojam_rez);
    


if($select_pojam_broj)
{
    
    $j=0;
    while ($select_pojam_broj>$j && $select_pojam_broj>0)
    {
        $naziv_p=mysql_result($select_pojam_rez,$j,'pojam');
        $opis_p=mysql_result($select_pojam_rez,$j,'opis_pojma');
        
        $upit = "SELECT pojam , rec FROM kljucne_reci WHERE pojam = '$naziv_p'";
        $upit_rez = mysql_query($upit) or die(mysql_error());
        $upit_broj = mysql_num_rows($upit_rez);
        
        if($upit_broj)
        {
            $kljucne_reci=mysql_result($upit_rez,0,'rec');
            $niz = explode(' ',$kljucne_reci);
            
            for ($i=0; i< count ($niz); $i++)
            {

                 if (stripos($opis_p, $niz[i]) > 0)
                 {

                  $upit = "SELECT tekst_id FROM kljucne_reci WHERE reci LIKE '%$niz[i]%'";
                  $rezultat = mysql_query($upit);

                  while ($red = mysql_fetch_assoc($rezultat))
                  {
                       $id = $red['pojam'];
                  }

                  $opis_p = str_replace($niz[i], '<a href = "tekst.php?id=' .$id .'">' . $niz[i] .'</a>', $opis_p); 
                }
            }
            
        }

        echo $opis_p;
        
        $j++;
    }
    
    

    
}


Listen very carefully, I shall say this only once!
 
Odgovor na temu

duchess
Ivana Petrovic
In the middle of nowhere.

Član broj: 142670
Poruke: 132
*.adsl-2.sezampro.yu.

Sajt: ivona.stens-turs.com


Profil

icon Re: Pretraga i oznacavanje reci u tekstu iz MySql baze11.09.2008. u 11:17 - pre 190 meseci
tabela i_pojmovnik:

i_pojmovnik_id int primary key not null,
pojam varchar(300) not null,
opis_pojma text not null,
status varchar(100) not null,

tabela kljucne_reci:

kljucne_reci_id int primary key not null,
pojam varchar(300) not null,
rec varchar(500) not null
Listen very carefully, I shall say this only once!
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-1.sezampro.yu.



+33 Profil

icon Re: Pretraga i oznacavanje reci u tekstu iz MySql baze11.09.2008. u 16:19 - pre 190 meseci
Ako sam dobro razumeo shta ti hocesh da postignesh, onda mi se chini da u ovom upitu: $upit = "SELECT pojam , rec FROM kljucne_reci WHERE pojam = '$naziv_p'"; treba da stoji != '$naziv_p', a ne = '$naziv_p'. Ti trebash valjda da nadjesh kljucne reci nekih drugih tekstova koji se nalaze u tom tekucem tekstu, jel tako? Ali dobro, to nema veze sa tim shto ti izbacuje taj warning...

Ako vec nisi, uradi ono shto ti je Avram napisao, odnosno, ispod dela koda $niz = explode(' ',$kljucne_reci); izbrishi sve, i napishi print_r($niz);, chisto provere radi...

A evo i kako bih ja josh izmenio tvoj kod:
Code:
       
$select_pojam = "SELECT * FROM i_pojmovnik WHERE status='Odobren' ORDER BY pojam";
$select_pojam_rez = mysql_query($select_pojam) or die ("Ne mogu da prikazem pojmove!");
$select_pojam_broj = mysql_num_rows($select_pojam_rez);

if($select_pojam_broj > 0)
{

     while ($red = mysql_fetch_assoc($select_pojam_rez))
     {
          $naziv_p = red['pojam'];
          $opis_p = red['opis_pojma'];

          $upit = "SELECT pojam, rec FROM kljucne_reci WHERE pojam != '$naziv_p'";
          $upit_rez = mysql_query($upit) or die(mysql_error());
          $upit_broj = mysql_num_rows($upit_rez);

          if($upit_broj > 0)
          {
               $kljucne_reci = mysql_result($upit_rez, 0, 'rec');
               $niz = explode('  ', $kljucne_reci);

               for ($i=0; i< count ($niz); $i++)
               {

                    if (stripos($opis_p, $niz[i]) > 0)
                    {

                         $upit = "SELECT tekst_id FROM kljucne_reci WHERE reci LIKE '%$niz[i]%'";
                         $rezultat = mysql_query($upit);

                         while ($red = mysql_fetch_assoc($rezultat)) { $id = $red['pojam']; }

                         $opis_p = str_replace($niz[i], '<a href = "tekst.php?id=' .$id .'">' . $niz[i] .'</a>', $opis_p); 

                   }
               }

          }

          echo $opis_p;

     }

}
else { echo 'Trenutno nema odobrenih pojmova.'; }

Verovatno opet nece uspeti, al' obavezno probaj da pre svega testirash kod kao shto sam ti napisao gore. Problem je to shto ta metoda stripos() promenljivu $niz ne vidi kao niz stringova, a trebalo bi. Zato probaj da ispishesh taj niz, chisto da vidish shta se nalazi u njemu...
 
Odgovor na temu

duchess
Ivana Petrovic
In the middle of nowhere.

Član broj: 142670
Poruke: 132
*.adsl-2.sezampro.yu.

Sajt: ivona.stens-turs.com


Profil

icon Re: Pretraga i oznacavanje reci u tekstu iz MySql baze12.09.2008. u 07:16 - pre 190 meseci
wtf is "red"???
javlja mi gresku, prvo neocekivane zagrade "[" u liniji:
Code:

$naziv_p = red ['pojam'];

onda kad te zagrade promenim u obicne javlja drugu gresku:
Code:

Fatal error: Call to undefined function red()


a na print_r($niz) mi izbaci ovo:

Code:

Array
(
[0] => internet
[1] => google
[2] => blog
)


"internet", "google", "blog" su reci koje mi se nalaze u tabeli "kljucne_reci" u koloni "rec".
A te reci su dodate kao kljucne reci za JEDAN pojam, a on mi je izbacio array za sve pojmove... ::S
Sad sam se opet zbunila... zasto uopste moram da imam kljucne reci, zar ne bi trebalo on sam da ih nadje u okviru kolone "opis_pojma" u tabeli "i_pojmovnik" ?

[Ovu poruku je menjao duchess dana 12.09.2008. u 08:33 GMT+1]
Listen very carefully, I shall say this only once!
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Moderator
Član broj: 32202
Poruke: 4391
79.101.225.*

Sajt: https://avramovic.info


+46 Profil

icon Re: Pretraga i oznacavanje reci u tekstu iz MySql baze12.09.2008. u 07:47 - pre 190 meseci
red['pojam']; treba da bude $red['pojam'];
red['opis_pojma']; treba da bude $red['opis_pojma'];

A to što vraća reči za sve pojmove znači da je loš SQL...


Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-4.sezampro.yu.



+33 Profil

icon Re: Pretraga i oznacavanje reci u tekstu iz MySql baze12.09.2008. u 09:27 - pre 190 meseci
Citat:
duchess: wtf is "red"???

E da, izvini, brzo sam pisao, pa sam zaboravio onaj chuveni '$' ispred promenljive... :D

Chekaj, sad ni meni vishe nije jasno shta ti hocesh da postignesh... Ti u tabeli 'i_pojmovnik' imash polja 'pojam' i opis_pojma'. Da li je ideja da ako se u opisu nadje pojam koji postoji tabeli, da se ta rech koja se poklapa linkuje na odredjeni opis?

Sad cu ja da probam na brzinu kod mene da napravim te tabele (ili tabelu), pa da testiram ceo taj kod...
 
Odgovor na temu

duchess
Ivana Petrovic
In the middle of nowhere.

Član broj: 142670
Poruke: 132
*.adsl-2.sezampro.yu.

Sajt: ivona.stens-turs.com


Profil

icon Re: Pretraga i oznacavanje reci u tekstu iz MySql baze12.09.2008. u 10:13 - pre 190 meseci
DA bas to! Znaci nema potrebe za tabelom kljucne reci. Sve se nalazi u tabeli i_pojmovnik. Ukoliko u opisu nekog pojma postoji rec koja se podudara sa nekim drugim pojmom, onda da postoji link ka objasnjenju tog drugog pojma...
Listen very carefully, I shall say this only once!
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-4.sezampro.yu.



+33 Profil

icon Re: Pretraga i oznacavanje reci u tekstu iz MySql baze12.09.2008. u 10:37 - pre 190 meseci
Evo testirao sam ovaj kod, i KONACHNO radi... Naravno, linkovi koji se generishu ne vode nikuda, jer ne postoji skript 'test.php', na koji se upucuje u linku...

U prilogu ti shaljem i SQL fajl, pa ga ti samo importuj kod sebe chisto da se i sama uverish... Opet sam ishao na onu varijantu sa dve tabele. Mnogo je lakshe za odrzhavanje kad recimo, imash neki pojam, a on u sebi sadrzhi neku rech koju ti zhelish da linkujesh. Recimo da je ta rech 'ptica', u tom tekstu se pojavljuje 'ptice'. Logichno, i tu rech 'ptice' treba linkovati na pojam 'ptica'. A poshto metoda stripos() ne razlikuje padezhe :), onda ti samo jednostavno u bazi treba da azurirash kljucne reci za tekst o pticama, pojmom 'ptice'... Nadam se da si razumela ishta od ovoga shto sam sad izneo...
A ako bash zhelish varijantu samo sa jednom tabelom, nije problem (valjda), smislicemo neshto...

btw Ovaj kod gore sam odradio samo za jedan tekst (u prvom upitu sam napisao WHERE id = 1), ti to posle samo prilagodi svojim potrebama...
Code:

<?

$kon = mysql_connect('localhost', 'test', 'test123');
mysql_select_db('test', $kon);

$select_pojam = "SELECT * FROM i_pojmovnik WHERE id = 1";
$select_pojam_rez = mysql_query($select_pojam) or die ("Ne mogu da prikazem pojmove!");
$select_pojam_broj = mysql_num_rows($select_pojam_rez);

if($select_pojam_broj > 0)
{

    while ($red = mysql_fetch_assoc($select_pojam_rez))
    {
        $pojam_id = $red['id'];
        $opis_p = $red['opis_pojma'];
    }

    $upit = "SELECT reci FROM kljucne_reci WHERE pojam_id != '$pojam_id'";
    $upit_rez = mysql_query($upit) or die(mysql_error());
    $upit_broj = mysql_num_rows($upit_rez);

    if($upit_broj > 0)
    {
        $kljucne_reci = '';
        
        while ($red1 = mysql_fetch_assoc($upit_rez))
        {    
            $kljucne_reci .= $red1['reci'];
            $kljucne_reci .= ' ';
        }    
        
        $niz = explode(' ', $kljucne_reci);
        
        for ($i=0; $i<count($niz); $i++){
            if (stripos($opis_p, $niz[$i]) > 0){
                $rec = $niz[$i];
                $upit = "SELECT pojam_id FROM kljucne_reci WHERE reci LIKE '%$rec%'";
                $rezultat = mysql_query($upit);

                while ($red = mysql_fetch_assoc($rezultat)) { $id = $red['pojam_id']; }

                $opis_p = str_replace($niz[$i], '<a href = "tekst.php?id=' .$id .'">' . $niz[$i] .'</a>', $opis_p); 
            }
        }
    
    
    }
    
    echo $opis_p;
}
else { echo 'Trenutno nema odobrenih pojmova.'; }

?>

Prikačeni fajlovi
 
Odgovor na temu

[es] :: PHP :: Pretraga i oznacavanje reci u tekstu iz MySql baze

[ Pregleda: 2656 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.