Avatar billede pemo123456 Novice
29. maj 2011 - 13:39 Der er 17 kommentarer og
1 løsning

str_replace med variabler fra MySQL

Hej

Jeg forsøger at lave en str_replace, hvor variablerne skal findes i en MySQL db. Ganske kort er formålet, at der søges efter nøgle ord, hvorefter disse nøgleord erstattes af samme nøgleord, hvor der er indlagt link til en side.

Og det driller desværre lidt, når variablerne kaldes i databasen - kan fint få det til at virke, hvis jeg lægger det direkte i en fil, men det er bøvlet i længden. Her er, hvad jeg har forsøgt mig med:

<?php
$sqlCommand = "SELECT * FROM table_link";
$query = mysqli_query($myConnection, $sqlCommand) or die (mysqli_error());
while ($row = mysqli_fetch_array($query)) {   
    $needle = $row["search_keyword"];
    $link = $row["link"];
        $haystack = $row["text"];
}

$replaced = str_replace ( $needle, "<a href=\"$link\">$needle</a>", $haystack );
?>

På forhånd tak for hjælp.
29. maj 2011 - 14:43 #1
Ikke testet, men prøv at flytte sidste linie ind i while løkken:

<?php
$sqlCommand = "SELECT * FROM table_link";
$query = mysqli_query($myConnection, $sqlCommand) or die (mysqli_error());
while ($row = mysqli_fetch_array($query)) { 
    $needle = $row["search_keyword"];
    $link = $row["link"];
        $haystack = $row["text"];

$replaced = str_replace ( $needle, "<a href=\"$link\">$needle</a>", $haystack );
}
?>
Avatar billede majbom Novice
29. maj 2011 - 19:37 #2
-> christian - det vil jo stadig kun kunne bruges på den sidste record...

-> #0 - går ud fra at du har flere linjer i tabellen som bliver hentet ud med den query?

<?php
$sqlCommand = "SELECT * FROM table_link";
$query = mysqli_query($myConnection, $sqlCommand) or die (mysqli_error());
$replaced = array();
while ($row = mysqli_fetch_array($query)) {
    $needle = $row["search_keyword"];
    $link = $row["link"];
        $haystack = $row["text"];

$replaced[] = str_replace ( $needle, "<a href=\"$link\">$needle</a>", $haystack );
}
?>


så får du et array med dine tekster inkl. links...
29. maj 2011 - 21:07 #3
splazz, så må jeg igang med at teste, for jeg er indtil nu overbevist om at mit forslag vil resultere i en delete knop for alle records.  permo123456, jeg kommer tilbage.
Avatar billede pemo123456 Novice
29. maj 2011 - 21:09 #4
Tak for hjælp indtil videre. Er rigtigt, at jeg har flere linier, der skal hentes fra tabellen, så skal have en løsning, der kan håndtere det. Har prøvet med #2, men får kun output:

array

Hvad gør jeg galt eller mangler?

Skal måske lige sige, at den ene variabel trækker jeg fra et andet sted, men der er vel ikke noget galt i, at mit dataudtræk er som her, som så bruges i dit eksempel?!?!

    $needle = $row["search_keyword"];
    $link = $row["link"];
    $haystack = $text_to_search;
29. maj 2011 - 21:24 #5
Lige en hurtig en: Jeg blandede to forskellige spoergsmaal sammen, der er ikke noget med en delete knap i dette spoergsmaal.  Jeg kikker videre.
Avatar billede majbom Novice
29. maj 2011 - 21:53 #6
nååh, jamen så kommer teksten der skal søges og erstattes i ikke fra tabellen og er ny for hvert loop?

så burde det virke som christian foreslår...
Avatar billede pemo123456 Novice
30. maj 2011 - 09:59 #7
Hej

Teksten, der skal søges i $haystack er den samme for hver side, mens der er forskellige nøgleord, der skal erstattes i den tekst.

Ganske kort fortalt, så er det brødteksten på en given side, som skal gennemsøges for nøgleord, og hvor de nøgleord skal erstattes med samme ord, men med indbygget link.

Har også prøvet Christians forslag. Her vises brødteksten korrekt, men der sker ikke erstatning som ønsket.

Har også prøvet at trække data fra begge tabeller, men desværre også uden positivt resultat =>

$sqlCommand = "SELECT * FROM table_link,table_text";

Prøver at rode lidt med det, men hvis I har gode forslag, hører jeg meget gerne disse! :-)
30. maj 2011 - 10:31 #8
Lidt travlt nu, jeg prøver at kikke i eftermiddag hvis du ikke selv har en løsning da.
Avatar billede pemo123456 Novice
30. maj 2011 - 10:49 #9
Hej Christian

Vil være super glad, hvis du gider det og kan finde tid på et senere tidspunkt. Skal nok melde ud, hvis det lykkes mig at få løst mit problem i mellemtiden.

Kan lige kort fortælle, at jeg har prøvet lidt frem og tilbage med dit løsningsforslag, men som splazz er inde på, er det kun den sidste række, der bliver omdannet, hvilket er lykkedes mig med denne version af dit script.

$sqlCommand = "SELECT * FROM table_link,table_text WHERE text='$text'";
$query = mysqli_query($myConnection, $sqlCommand) or die (mysqli_error());
while ($row = mysqli_fetch_array($query)) { 
    $needle = $row["search_keyword"];
    $link = $row["link"];
    $haystack = $row["text"];

$replaced_prop_descript = str_replace ( $needle, "<a href=\"$link\">$needle</a>", $haystack );
}
Avatar billede majbom Novice
30. maj 2011 - 20:10 #10
så du har én tekst og forskellige ord der skal omdannes til link, alt efter hvilken side teksten bliver vist på?

som jeg forstår det, burde du få én linje ud fra din tabel, når du henter?

kunne du evt. smide et sql_dump af din tabel samt den kode der normalt henter det ud og viser det på siden? du kan bruge pastebin.com
Avatar billede pemo123456 Novice
30. maj 2011 - 21:57 #11
Undskyld, men der kommer jeg desværre også lidt til kort, men måske kan jeg forklare det lidt bedre.

Jeg har 2 tabeller i brug i dette script. En, der indeholder den information, der vises på siden, herunder også den brødtekst, jeg skal søge i. Derudover har jeg en anden tabel, hvor jeg udover ID blot har to kolonner: nøgleord og url's. Det er denne tabel, hvor jeg vil have, at rækkerne løbes igennem for at udsøge de nøgleord, der findes i brødteksten, og som så skal erstattes med samme nøgleord med embedded url.

Kast et blik på denne side - http://dominicangolfguide.com/pemotest/viewdetails.php?pid=28

Som du kan se, er der en brødtekst, hvor tekststrengen Gabi Beach er med link, hvilket er resultat af lidt tilretning af Christians script (har jeg indsat i #9), hvor den løber tabellen med nøgleord igennem, men så desværre kun bruger nøgleordet fra sidste linie i tabellen. Dvs. alle øvrige linier i tabellen bliver ikke brugt, således som de skal.

Hvis det hjælper, så kan jeg måske få noget ud på et txt fil (tabellen, jeg ikke lige kan trække ud), som jeg kan maile til dig. Min mail er per.moller999 at yahoo dot com
Avatar billede majbom Novice
30. maj 2011 - 22:07 #12
så skal du først hente teksten ud i én query og derefter hive nøgleord og urls fra den anden tabel, som så løbes igennem og hver gang replacer du i den tekst du hentede i første query...

faktisk som i #1 - du skal bare ikke skrive haystack = $row['text'], men det som variablen du hedder i din første query
Avatar billede pemo123456 Novice
31. maj 2011 - 10:00 #13
Hvis jeg forstår dig ret, så er det denne løsning, du siger.

$sqlCommand = "SELECT * FROM table_links";
$query = mysqli_query($myConnection, $sqlCommand) or die (mysqli_error());
while ($row = mysqli_fetch_array($query)) { 
    $needle = $row["search_keyword"];
    $link = $row["link"];

$replaced_prop_descript = str_replace ( $needle, "<a href=\"$link\">$needle</a>", $text );

}

Giver desværre samme resultat, hvilket vil sige, at tabellen løbes igennem, men at det kun er nederste linie i tabllen, der omdanner nøgleord som jeg gerne vil have det.

Jeg lader den stå åben ugen ud. Hvis I kommer på nogle gode idéer i mellemtiden, så hører jeg dem naturligvis gerne. Og tak for den hjælp I har givet frem til nu.
Avatar billede majbom Novice
31. maj 2011 - 19:21 #14
ja, det er jo klart - du skal bruge samme variabel (svært at forklare, nemmere at vise:

prøv at ret:
$replaced_prop_descript = str_replace ( $needle, "<a href=\"$link\">$needle</a>", $text );



til:
$text = str_replace ( $needle, "<a href=\"$link\">$needle</a>", $text );



og se om ikke det hjælper lidt på det :)
Avatar billede pemo123456 Novice
31. maj 2011 - 20:35 #15
MIN VEN!!! Jeg skylder en kæmpe fadøl, hvis jeg nogen siden møder dig et eller andet sted. :-)

Ellers sagt på en anden måde - lige i skabet. Smid et svar, så er der point på vej.
Avatar billede majbom Novice
31. maj 2011 - 21:51 #16
kommer her :)

burde have set den tidligere - beklager ;)
Avatar billede pemo123456 Novice
31. maj 2011 - 21:57 #17
Ingen grund til at beklage noget som helst - har moon walket rundt den halv aften! :-)

Igen tak for hjælpen.
Avatar billede majbom Novice
31. maj 2011 - 22:04 #18
hehe, det er svært så glad man kan bliver over småting, nogle gange :)

jeg takker for points :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester