[php] Kan een MySQL result voor een function worden gedeft?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • decramy
  • Registratie: December 2001
  • Laatst online: 09:48

decramy

root@birdie:~#

Topicstarter
deffen = define`n


Ik heb een PHP script.

ik heb daar een functie in, welke smilies omzet in HTML.
ik heb de smilies in een databese staan.

PHP:
1
2
3
4
5
6
7
8
9
function do_smilies($inputtext){
  $result  = mysql_query("SELECT code, url FROM smilies");
  while($row = mysql_fetch_array($result)){
    $inputtext = str_replace($row["code"], "[img]images/smilies/".$row["url"]."[/img]", $inputtext);
  }
  return $inputtext;
}

$HTML = do_smilies("Hoi :) Doei :(");

op zich werkt dit prima.

Maar als je meerdere keren do_smilies(); opvraagt, krijg je een boel queries, wat niet bevordelijk is voor de snelheid.

Nu dacht ik, ik zet 1x voor de functie de query:
PHP:
1
2
3
4
5
6
7
8
9
10
$smilie_result  = mysql_query("SELECT code, url FROM smilies");
function do_smilies($inputtext){
  global $smilie_result;
  while($row = mysql_fetch_array($smilie_result)){
    $inputtext = str_replace($row["code"], "[img]images/smilies/".$row["url"]."[/img]", $inputtext);
  }
  return $inputtext;
}

$HTML = do_smilies("Hoi :) Doei :(");

Maar dan werkt het niet meer :(

Ik snap niet wat ik fout doe...
Ja, error_reporting staat al op E_ALL :P

[ Voor 9% gewijzigd door decramy op 16-01-2003 20:48 ]

20*375Wp met Enphase IQ7+ micro's | Stiebel Eltron HGE Water/Water WP 9kW | Tesla M3, powered by SmartEVSE | Servertje @ www.coloclue.net


Acties:
  • 0 Henk 'm!

  • martinvw
  • Registratie: Februari 2002
  • Laatst online: 20-08 20:35
"Maar dan werkt het niet meer :("
Verklaar je nader wat werkt er niet meer?

Het zou volgens mij gewoon moeten werken alhoewel je het ook gewoon met de functie mee kan geven en dat wat netter is maar dat is een ontwerp keuze hij zou echt moeten werken. ff voor andere bezoekers http://www.php.net/manual/en/language.variables.scope.php *global moet echt zow werken* :S

Acties:
  • 0 Henk 'm!

  • decramy
  • Registratie: December 2001
  • Laatst online: 09:48

decramy

root@birdie:~#

Topicstarter
die $HTML bevat nu "Hoi :) Doei :("
en niet "Hoi [img]images/smile.gif>[/img]"

Voor de rest wordt er ook helemaal niets aangegeven.
Ik zal es bij de str_replace een "or die()" proberen...

edit:
Hij gaat dus ook niet dood :'(

[ Voor 21% gewijzigd door decramy op 16-01-2003 21:00 ]

20*375Wp met Enphase IQ7+ micro's | Stiebel Eltron HGE Water/Water WP 9kW | Tesla M3, powered by SmartEVSE | Servertje @ www.coloclue.net


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

je kan hem toch ook een static/global array maken :?

Acties:
  • 0 Henk 'm!

  • corani
  • Registratie: December 2000
  • Laatst online: 05-10-2017

corani

__,,,_(^_^)_,,,__

met je mysql_fetch_array wandel je door je result-set heen. Als je dat een keer gedaan hebt, staat je 'wijzer' aan het einde. Voor de volgende keer moet je hem dus resetten. (met mysql_data_seek) Op deze manier dus:

PHP:
1
2
3
4
5
6
7
8
9
10
11
$smilie_result  = mysql_query("SELECT code, url FROM smilies"); 
function do_smilies($inputtext){ 
  global $smilie_result; 
  mysql_data_seek($smilie_result, 0);
  while($row = mysql_fetch_array($smilie_result)){ 
    $inputtext = str_replace($row["code"], "[img]images/smilies/".$row["url"]."[/img]", $inputtext); 
  } 
  return $inputtext; 
} 

$HTML = do_smilies("Hoi :) Doei :(");


Wat je ook kunt doen, is de eerste keer door de result-set heenlopen, en dan een array aanmaken met de code => image binding. Dan kun je in het vervolg die array gebruiken.

[ Voor 41% gewijzigd door corani op 16-01-2003 21:20 . Reden: voorbeeld erbij ]

Laat me nou toch eens met rust man!
Iedereen die in telekinese gelooft, steek a.u.b. mijn hand op


Acties:
  • 0 Henk 'm!

  • decramy
  • Registratie: December 2001
  • Laatst online: 09:48

decramy

root@birdie:~#

Topicstarter
dus
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if(!isset($smilies)){
  $i = 0;
  $result  = mysql_query("SELECT code, url FROM smilies");
  while($row = mysql_fetch_array($result)){
    $smilies[$i]["code"] = $row["code"];
    $smilies[$i]["url"] = $row["url"];
    $i ++;
  }
  do_smilies($inputtext);
}else{
  while($smilies){
    //vervang...
  }
}


Maar hoe "exporteer" ik dan $smilies?

[ Voor 19% gewijzigd door decramy op 16-01-2003 21:24 ]

20*375Wp met Enphase IQ7+ micro's | Stiebel Eltron HGE Water/Water WP 9kW | Tesla M3, powered by SmartEVSE | Servertje @ www.coloclue.net


Acties:
  • 0 Henk 'm!

  • corani
  • Registratie: December 2000
  • Laatst online: 05-10-2017

corani

__,,,_(^_^)_,,,__

of:
PHP:
1
$smilies[$row["code"]] = $row["url"];

Laat me nou toch eens met rust man!
Iedereen die in telekinese gelooft, steek a.u.b. mijn hand op


Acties:
  • 0 Henk 'm!

Verwijderd

je kunt het met een classe doen:

PHP:
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
<?php
class smilies
{
   var $smilies;
   function smilies()
   {
       $smilie_result  = mysql_query("SELECT code, url FROM smilies"); 
       while($row = mysql_fetch_array($smilie_result))
       {
           $this->smilies[] = array("code" => $row["code"], "url" => $row["url"]);
       }
   }
   
   function do_smilies($inputtext)
   {
      foreach($this->smilies as smilie)
      {
          $inputtext = str_replace($smilie["code"], "[img]images/smilies/".$smilie["url"]."[/img]", $inputtext); 
      }
      return $inputtext;
   }
}

$smilies = new smilies;

$HTML = $smiles->do_smilies("Hoi :) Doei :( decramy is een }:O")
?>

Acties:
  • 0 Henk 'm!

  • decramy
  • Registratie: December 2001
  • Laatst online: 09:48

decramy

root@birdie:~#

Topicstarter
en kan ik zo`n class-functie dan ook oproepen binnen een andere functie??

* decramy is een class-n00b

20*375Wp met Enphase IQ7+ micro's | Stiebel Eltron HGE Water/Water WP 9kW | Tesla M3, powered by SmartEVSE | Servertje @ www.coloclue.net


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

decramy schreef op 16 January 2003 @ 22:01:
en kan ik zo`n class-functie dan ook oproepen binnen een andere functie??

* decramy is een class-n00b
als je er een object van hebt wel ja ;)
ik zou zeggen zoek dat eens @ php.net :P

Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

str_replace() werkt ook met arrays:

PHP:
1
2
3
4
$smily_code = Array(":)", ":(");
$smily_url  = Array("lachen.gif", "huilen.gif");

echo str_replace($smily_code, $smily_url, "Hoi :) Doei :(");

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

  • decramy
  • Registratie: December 2001
  • Laatst online: 09:48

decramy

root@birdie:~#

Topicstarter
is er ook een site waar staat beschreven HOE classes werken?

Heel eerlijk gezecht snap ik niet veel van http://80.84.227.171/artikelen.php?aid=91 ;(

20*375Wp met Enphase IQ7+ micro's | Stiebel Eltron HGE Water/Water WP 9kW | Tesla M3, powered by SmartEVSE | Servertje @ www.coloclue.net


Acties:
  • 0 Henk 'm!

  • decramy
  • Registratie: December 2001
  • Laatst online: 09:48

decramy

root@birdie:~#

Topicstarter
thomaske schreef op 16 januari 2003 @ 22:13:
str_replace() werkt ook met arrays:

PHP:
1
2
3
4
$smily_code = Array(":)", ":(");
$smily_url  = Array("lachen.gif", "huilen.gif");

echo str_replace($smily_code, $smily_url, "Hoi :) Doei :(");
TNX!

het werkt nu :)

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
$result  = mysql_query("SELECT code, url FROM smilies");
$i = 1;
while($row = mysql_fetch_array($result)){
    $smilie_code[$i] = $row["code"];
    $smilie_url[$i]  = "[img]images/smilies/".$row["url"]."[/img]";
    $i++;
}

function do_smilies($inputtext){
    $inputtext = str_replace($smilie_code, $smilie_url, $inputtext);
}

$HTML = do_smilies("Hoi :) Doei :(");

[ Voor 39% gewijzigd door decramy op 17-01-2003 13:32 ]

20*375Wp met Enphase IQ7+ micro's | Stiebel Eltron HGE Water/Water WP 9kW | Tesla M3, powered by SmartEVSE | Servertje @ www.coloclue.net


Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

decramy schreef op 17 January 2003 @ 13:16:
[...]


moet daar dan ook een whiletje aan?
PHP:
1
//---
Nee.. :)

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

decramy schreef op 17 januari 2003 @ 13:16:
[...]


moet daar dan ook een whiletje aan?
PHP:
1
2
3
4
$smily_code = Array(":)", ":(");
$smily_url  = Array("lachen.gif", "huilen.gif");
while($smilie_code)
  echo str_replace($smily_code, $smily_url, "Hoi :) Doei :(");
nu blijf je in een loop zitten ;)

totdat $smily weg is, dat zal nooit gebeuren, daarnaast zal ik als ik jou was eens even kijken hoe str_replace werkt ;)

www.php.net/str_replace
Pagina: 1