Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

find waarde binnen string, replace met include waarde+echo

Pagina: 1
Acties:

Onderwerpen


  • MastersInstinct
  • Registratie: Juni 2003
  • Laatst online: 23-11 20:43
Zit met een probleempje, waar ik even niet uitkom.
In het kort:

code:
1
2
3
4
5
$pageContent[0]; //komt uit Db.

$pageContent[0] = str_replace("-!module contact","include('inc/includes/mailform.php');",$pageContent[0]);

echo $pageContent[0];   // Echo content;


Dit gaat prima. Php plaats de content, maar doet dit als tekst. Ik probeer te bewerkstelligen dat, wanneer !-module contact (oid) in string waarde voorkomt, hij dan een .php file include en meeneemt in de render.

Welke functie moet hiervoor worden gebruikt?

Hoor het graag!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 11:02

MueR

Admin Devschuur® & Discord

is niet lief

Als ik mag aannemen dat die php file die je wil includen een stuk html uitpoept, waarom sla je die HTML niet gewoon op in een variabele en zet je die als replace neer. Als dat niet mogelijk is zul je met output buffering moeten werken.

offtopic:
De eerste die met eval aankomt krijgt een dreun


@Hydra: hij wil dat formulier vast op de plek van die string hebben.

[ Voor 10% gewijzigd door MueR op 16-01-2012 15:57 ]

Anyone who gets in between me and my morning coffee should be insecure.


  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
Ten eerste: het is de bedoeling dat je met tags (bijvoorbeeld [PHP]) aangeeft dat dit een topic over PHP is. Daarnaast zet je code binnen [code] tags. Lees in ieder geval de FAQ ff.

Wat jij wil doen is gewoon als een bepaalde string voorkomt (if) de include functie gebruiken. Waarom check je het dus niet gewoon met een if block of die include voorkomt en include dan die code?

https://niels.nu


  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
MueR schreef op maandag 16 januari 2012 @ 15:56:
Als ik mag aannemen dat die php file die je wil includen een stuk html uitpoept, waarom sla je die HTML niet gewoon op in een variabele en zet je die als replace neer. Als dat niet mogelijk is zul je met output buffering moeten werken.

offtopic:
De eerste die met eval aankomt krijgt een dreun


@Hydra: hij wil dat formulier vast op de plek van die string hebben.
@Jou: Ik denk dat ik wel weet wat hij wil; ik vermoed dat hij een soort plugin structuur in z'n eigen gebakken CMS heeft waarbij hij i.p.v. gewoon tekst ook links naar .PHP files in de database heeft staan die dan geinclude moeten worden. Ik snap alleen dan niet hoe hij zelf niet tot een oplossing kan komen.

Edit: Dit krijg je dus als je gaat reageren op posts die NA die van jou geplaatst zijn! You bastard!

[ Voor 6% gewijzigd door Hydra op 16-01-2012 15:59 ]

https://niels.nu


  • MastersInstinct
  • Registratie: Juni 2003
  • Laatst online: 23-11 20:43
Hoi,

Excuus voor de ontbrekende tags, zou zweren dat ik dat had ingevuld.

@Hydra, je vermoeden klopt. Het gaat dus om $string, waarin ergens '!module modulenaam' zal staan, en daarna wellicht nog tekst. Door str_replace, moet dit dus $string[deel a], + include + string[deel b] worden.
Dit lukt, maar komt als platte tekst terug.

De vraag is dan ook: Wat is de manier om dit te doen?

  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
Je snapt toch hoe een "if" werkt? dan kun je dus als er "module bla bla.php" in een string staat dan die string includen?

Of dit de juiste oplossing is kwa architectuur is een 2e, maar ga eerst dat maar ff 'snappen'.

En nee, ik ga je geen code voorkauwen.

[ Voor 8% gewijzigd door Hydra op 16-01-2012 16:08 ]

https://niels.nu


  • pedorus
  • Registratie: Januari 2008
  • Niet online
offtopic:
De oplossing is toch al gegeven? })
Het eenvoudigst lijkt me vervangen naar "" met het meegeven van een parameter $count, en dan testen of er vervanging heeft plaatsgevonden. Zo ja, includen (ifje) mits positie niet uitmaakt.

Dan nog moet je je afvragen of je je eigen cms moet gaan schrijven, of dat er vast mensen zijn die dat beter kunnen.... Ter lering ende vermaak zullen we maar zeggen. ;)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • MastersInstinct
  • Registratie: Juni 2003
  • Laatst online: 23-11 20:43
@Hydra, ik zit niet te bedelen om voorkauw werk.
Uiteraard snap ik het gebruik van een IF statement.

@Pedorus. Dank, ik zocht eigenlijk naar een goede variant van eval, wetende dat die uit den boze is..
Met een count + if (include) zal het werken. Maar hoe krijg ik tussen mijn string in? knippen met strpos, includen en aan elkaar plakken?

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Dat zou prima moeten werken voor 1 geval. Je zou ook met preg_replace_callback en ob_start/ob_get_contents/ob_end_clean kunnen werken.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 24-11 08:37
Ik zou opvolgen wat pedorus zegt. Je komt namelijk een heel eind met de ob_* functies.

  • MastersInstinct
  • Registratie: Juni 2003
  • Laatst online: 23-11 20:43
Bedankt voor de informatie. Ben er mee aan de gang gegaan, en het lukt om een waarde vinden en deze doormiddel van replace_callback te replacen. Waarvoor mijn dank.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
            $str = $pageContent[0];         
            
            if (stristr($str, '[module') == TRUE) {     // Mogelijke module, om niet altijd loop te doorlopen.
            
                if (stristr($str, '[module \'contact\'') == TRUE) {     // Komt loop uit DB
                
                $module_naam = 'contact';       //naam of pad module
                
                $str = preg_replace_callback("/\[module '(.*?)\']/", create_function('$str', 'include("modules/'.$module_naam .'.php");'), $str);
                
                }
                
                echo $str;      // Echo final string;
                
            } else {
                echo $str;      // Wel mogelijke gevonden, maar niks actiefs gedaan
            }


Echter plaats hij het geinclude bovenaan, en daarna pas alle andere tekst in de string. Enig idee wat ik fout doe? Heb een goed voorbeeld, maar de server ondersteund geen php 5.3.0.

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Als je van de genoemde 4 functies er maar 1 gebruikt zou er een lampje moeten gaan branden. Een include geeft geen string terug, maar doet direct al de output. Je kunt trouwens beter de methode uit example 2 gebruiken.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten

Pagina: 1