preg_replace en include

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Taartvarken
  • Registratie: Januari 2007
  • Laatst online: 11:35
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.

Acties:
  • 0 Henk 'm!

  • 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


Acties:
  • 0 Henk 'm!

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.

Acties:
  • 0 Henk 'm!

  • Taartvarken
  • Registratie: Januari 2007
  • Laatst online: 11:35
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?

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 15:47

MueR

Admin Tweakers Discord

is niet lief

Ja, lees de link die Cyclone postte.

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


Acties:
  • 0 Henk 'm!

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;

Acties:
  • 0 Henk 'm!

  • Taartvarken
  • Registratie: Januari 2007
  • Laatst online: 11:35
Ik had het net gevonde, thanks anyway! Ik ga er even mee experimenteren...

Acties:
  • 0 Henk 'm!

  • Xanland
  • Registratie: Oktober 2007
  • Laatst online: 14:35
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


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 01-06 18:50

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.


Acties:
  • 0 Henk 'm!

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

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 01-06 18:50

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.


Acties:
  • 0 Henk 'm!

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

{signature}


Acties:
  • 0 Henk 'm!

  • Taartvarken
  • Registratie: Januari 2007
  • Laatst online: 11:35
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