Toon posts:

preg_replace en include

Pagina: 1
Acties:

Onderwerpen


  • Taartvarken
  • Registratie: Januari 2007
  • Laatst online: 02-06 16:25
Hallo,

Wat ik wil doen is dit: preg_replace('/CONTACTFORMULIER/','include 'contact.php', $content');
Dit werkt echter niet, en ben nu al een tijdje aan het zoeken naar een oplossing maar kan eigenlijk niks vinden.
$content komt uit de database, en wordt ingevuld met CKEditor. Door ergens /CONTACTFORMULIER/ te typen wil ik het contactformulier wat in contact.php staat includen.

Ik kan het contactformulier wel boven of onder $content krijgen, door te zoeken op /CONTACTFORMULIER/ en dan met een IF het contactformulier te includen.

Ik heb wel wat met get_file_contents gevonden, maar in contact.php staat meer php code die uitgevoerd dient te worden, dus dit werkt dan volgens mij niet.

Heeft iemand een oplossing? Thanks.

  • TJHeuvel
  • Registratie: Mei 2008
  • Niet online
Je zult de output van contact.php moeten opvangen, bijvoorbeeld door output buffering en dit door je replace functie mikken.

[Voor 11% gewijzigd door TJHeuvel op 27-06-2011 16:44]

Freelance Unity3D developer


Anoniem: 96523

Het probleem met preg_replace is dat het alleen strings kan vervangen, dus geen PHP includen (als het goed is krijg je nu in je HTML "include 'content.php'" te zien ipv "/CONTACTFORMULIER/").

Met file_get_contents() wordt gewoon de broncode gepakt, en dat wil je natuurlijk ook niet.

Je zou kunnen kijken naar de shortcode functionaliteit van Wordpress. Deze vervangt een string (dmv van preg_replace_callback() ) en voert op die plek een functie uit.

Simpel voorbeeld:
PHP:
1
2
3
4
5
function hello_world() {
   print 'hello world';
}

$content = preg_replace_callback( '/jouw_unieke_tag/', 'hello_world', $content );


Nu kun je in de callback functie alle PHP plakken, inclusief de POST/GET afhandeling.


@CyCloneNL: is ook mogelijk, maar is volgens mij nog ingewikkelder dan mijn voorbeeld.

  • Taartvarken
  • Registratie: Januari 2007
  • Laatst online: 02-06 16:25
Als ik deze code gebruik:

PHP:
1
2
3
4
5
6
7
8
<?php 
$content = 'hier staat het woord<br />uniek<br/>asdfasdfasdf ';
function hello_world() { 
   print 'hello world'; 
} 
$content = preg_replace_callback('/uniek/', 'hello_world', $content ); 
echo $content;
?>


Krijg ik deze output:

hello worldhier staat het woord

asdfasdfasdf


Ik wil alleen dat de output als volgt is:

hier staat het woord hello world

asdfasdfasdf


Is dat ook mogelijk?

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 06-06 09:04

MueR

Moderator Devschuur®

is niet lief

Ja, lees de link die Cyclone postte.

Anyone who gets in between me and my morning coffee should be insecure.
Breng nu uw applicatie naar de kloot. Dat is veel beter! Nu samen met klootopslag. Voor maar €9,95. Doei doei!


Anoniem: 96523

@WiertOmta: Ja, sorry, mij fout... De callback moet returnen ipv printen ;) Dan werkt het wel goed.

Dus:
PHP:
1
2
3
4
5
6
$content = 'hier staat het woord<br />uniek<br/>asdfasdfasdf '; 
function hello_world() {  
   return 'hello world';  // <---- print = return
}  
$content = preg_replace_callback('/uniek/', 'hello_world', $content );  
echo $content;

  • Taartvarken
  • Registratie: Januari 2007
  • Laatst online: 02-06 16:25
Ik had het net gevonde, thanks anyway! Ik ga er even mee experimenteren...

  • Xanland
  • Registratie: Oktober 2007
  • Laatst online: 01:56
Dit "probleem" heb ik toevallig laatst ook gehad, en ook met een preg_replace_callback op "moeten" lossen. Zelf gebruik ik het in mijn CMS voor een module systeem.

De functie die je nodig zult hebben moet iets doen met include en inderdaad output buffering. Zo heb ik het uiteindelijk ook opgelost.

RobIII: Ik probeer als ik wil stoppen met mijn auto ook altijd de sigarettenaansteker, de airco, 3 radioknoppen en de binnenverlichting en dan de rem :P


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 05-06 10:41

NMe

Quia Ego Sic Dico.

Sorry, maar dit moet ook gezegd worden: als de PHP-inhoud van contact.php uit de database komt en de uitvoer daarvan belangrijk is voor je contactformulier dan ben je in veruit de meeste gevallen uitermate ranzig bezig en zou je een andere opzet moeten kiezen. Als PHP niet uitgevoerd hoeft te worden ben je met file_get_contents al klaar...

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Taartvarken
  • Registratie: Januari 2007
  • Laatst online: 02-06 16:25
Waarom is dat ranzig? Ik heb het nu met output buffering gedaan, en dat werkt in ieder geval prima...

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 05-06 10:41

NMe

Quia Ego Sic Dico.

Code hoort niet in je database, en output buffering misbruiken hiervoor valt voor mij in dezelfde categorie als eval. Nogmaals: maak dan gewoon tekstuele templates waar je handmatig met string replaces bepaalde constructies vervangt.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Er staat nergens dat code in de DB zit. Enkel de content zit erin. :z

{signature}


  • Taartvarken
  • Registratie: Januari 2007
  • Laatst online: 02-06 16:25
Voutloos schreef op dinsdag 28 juni 2011 @ 12:39:
Er staat nergens dat code in de DB zit. Enkel de content zit erin. :z
Dat dus... ;)

Ik zou niet eens op het idee komen om code in een database te zetten, dat voelt onnatuurlijk...

[Voor 20% gewijzigd door Taartvarken op 28-06-2011 12:46]

Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee