Gå til innhold

Få en query til å ikke loope seg i en funksjon?


Anbefalte innlegg

Har skrevet en liten parse sak til en side.

Har lagt alt inn i en funksjon, og det funker fint.

Problemet er at spørringen til mysql looper seg, når jeg skal parse en del kommentarer og nyheter osv.

 

Koden:

	function parse($text){
 global $sql;
 //smilies delen //
 	$sql->connect();
 	$smilies=$sql->query("SELECT tekst, bilde FROM smilies");
 	if ($sql->num_rows($smilies)){
   $tekst=array();
   $bilde=array();
   	while ($r=$sql->fetch($smilies)){
     array_push($tekst, $r["tekst"]);
     array_push($bilde, "<img class=\"smil\" src=\"bilder/emoticons/".$r["bilde"]."\" />");
   	}
   $text=str_replace($tekst, $bilde, $text);
 	}
 return $text;
}

Og jeg kaller den opp med f.eks

$q=query("mysql-spørring");
while($r=fetch_array($q)){
echo parse($r["nyhet"]);
}

Og som du kanskje skjønner da, så vil queryene loope seg utrolig mye, hvis det er mange kommentarer :(

 

Noen forslag som gjør at jeg bare får den i en query?

Testa å legge querien utenfor funksjonen, men da parsa den bare den første nyheten, og de andre bare ble slik de var skrevet.

Lenke til kommentar
Videoannonse
Annonse

Hmm, eg er ikkje sikker på at eg har forstått heilt kva "smiles" databasen er til.

 

Men er det ein database som inneholder alle "smilie facene" du kan lage. Med kode + bilde ssom høyrer til. ?

 

Vist, kvifor ikkje legge dei inn i eit array og laste dei inn i funksjonen ?

Altså kjører queryen før du kjører funksjonen og inkluderer den slik

 

echo parse($r["nyhet"],$similietext,$smiliebilde);

 

deretter kan du bruke foreach() for å parse smiliene inn i teksten.

Lenke til kommentar

Mulig det kan funke.

Problemet er at jeg ikke har forstått foreach() skikkelig enda.

Mao, jeg klarer ikke å lage eksemplet ditt selv, da jeg faller av lasset når du snakker om foreach() :blush:

 

Hadde satt veldig stor pris på en side som forteller litt bedre om foreach, eller om du, eller eventuelt andre, kunne ha gitt meg ett eksempel.

Endret av LoS
Lenke til kommentar

Funksjonen foreach() er en svært nyttig funksjon når det kommer til arrays, og jeg har brukt den utallige ganger i mine script. Slik fungerer den:

 

foreach() looper gjennom en array. For hver runde i loopen deles det aktive array-elementet opp i én eller to variabler. Disse variablene tilsvarer enten verdien til det aktive elementet, eller både verdien og navnet på elementet. Navnene på disse variablene velger du selv, og har den samme verdien (verdien som array-elementet har) gjennom en hel loop, før loopen går til neste element i arrayen.

(Et array-element kan være $array["navn"] = "verdi";, skjønner?) ;)

 

Fortsatt med? Da kan jeg ta et eksempel. Denne kodebiten printer ut alle elementene i en array med navn og verdi vha. foreach():

// Lager en array med 3 elementer.
$array["navn1"] = "verdi1";
$array["navn2"] = "verdi2";
$array["navn3"] = "verdi3";

// Her kommer foreach()!
foreach($array as $name => $value) {
echo("Variabelen $name har verdien $value!<br />");
}

Gir output:

Variabelen navn1 har verdien verdi1!

Variabelen navn2 har verdien verdi2!

Variabelen navn3 har verdien verdi3!

 

 

Hvis du ikke bryr deg om navnet på variabelen (eks. "navn1"), er det nok å bruke foreach() slik:

// Lager en array med 3 elementer.
$array["navn1"] = "verdi1";
$array["navn2"] = "verdi2";
$array["navn3"] = "verdi3";

// Her kommer foreach()!
foreach($array as $value) {
echo("Det aktive elementet i loopen har verdien $value!<br />");
}

Gir output:

Det aktive elementet i loopen har verdien verdi1!

Det aktive elementet i loopen har verdien verdi2!

Det aktive elementet i loopen har verdien verdi3!

 

Prøv ut disse to eksemplene så håper jeg du skjønner litt mer! :thumbup:

Endret av lokaltog
Lenke til kommentar

Takker for hjelp :thumbup:

Ser ut til å ha fått til noe, men har enda litt problemer.

Hittil så har jeg klart å få det til slik at den kun parser ut en av smiliene(noe den ikke skal gjøre)

Eller så parser den ut alle smiliene, problemet er at forksjellige smilier får samme bilde.

Ser ikke ut som om det går som det skal :p

 

Jeg får prøve litt til.

Lenke til kommentar

Problemet ligger nok i at jeg ikke veit helt hvordan jeg skal få brukt 2 arrays i en foreach sammenheng. Hittil har jeg testa å brukt en foreach inni en ny foreach, men da fikk jeg alle smiliene til å bli det samme bilde.

 

Du hadde forresten rett ang. smilies tabellen ;)

 

Jeg får nesten bare prøve litt til, jeg er dog ganske usikker på hvor i scriptet jeg skal bruke foreach(), så jeg prøver litt her og der :p

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...