PDA

Bekijk Volledige Versie : statische gegevens + variabelen in 1 bestand



StriKe
08/11/03, 08:30
Hallo,

De situatie is als volgt:

Ik heb op dit ogenblik twee bestanden: formulier.php en template.php

In formulier.php staan enkele velden waar waarden ingetypt moeten
worden.
in template.php staat een geheel zelfstandige webpage, maar dan
uiteraard met variabelen die ik in het formulier heb moeten opgeven.

Er zou, wanneer ik op de verzendbutton klik volgende moeten gebeuren:

Nieuw bestand aanmaken (bijvoorbeeld resultaat.php) met daarin volgende
inhoud:
template.php maar uiteraard moeten de variabelnamen vervangen worden
door de waarden die ik ingegeven heb in het formulier.

Weet iemand hoe ik dit het best aanpak?

Let erop dat in resultaat.php totaal niets aanwezig is, en dus
bijvoorbeeld ook alle html tags van template.php er in moeten geraken.

Hartelijk dank voor jullie hulp

--
Groeten,
StriKe

http://www.internetfreakz.be/

Ronald Paul
08/11/03, 09:30
StriKe <usenet@internetfreakz.be> schreef:

> Hallo,

Hoi,

>Ik heb op dit ogenblik twee bestanden: formulier.php en template.php
>
>In formulier.php staan enkele velden waar waarden ingetypt moeten
>worden.
>in template.php staat een geheel zelfstandige webpage, maar dan
>uiteraard met variabelen die ik in het formulier heb moeten opgeven.

[..]

>Weet iemand hoe ik dit het best aanpak?

Voorzie ten eerste template.php met een aantal signaalwoorden zoals
[naam] en [adres] (inclusief haken). Doe dan in formulier.php ongeveer
het volgende:

- Laad template.php in een string met $template = join('',
file('template.php'));

- Gebruik str_replace() of preg_replace() (regular expressions ken je
tenslotte toch al :-)) om de signaalwoorden te vervangen door hun in
het formulier ingevuld equivalent. Denk eventueel ook aan het escapen
van de binnengekomen data met htmlentities(), nl2br() en addslashes().

- Sla $template op in resultaat.php met fopen() en fwrite().

- En tenslotte om netjes te zijn: doe fclose() en unset($feedback) om
bronnen weer vrij te maken voor eventuele vervolgcode in
formulier.php.

Kijk voor hoe je de functies moet gebruiken in deel vijf van de
handleiding van PHP.

Er is wel een overweging te maken voor je dit zo zou gaan maken. Dit
heeft te maken met de grootte van template.php, en de
aanroepfrequenties formulier.php en resultaat.php. Als template.php
heel groot is en formulier.php heel vaak wordt aangeroepen, is het
wellicht verstandiger om template.php om te bouwen tot een
resultaat.php die zijn gegevens ophaalt uit bijvoorbeeld een bestand
waar formulier.php zijn gegevens steeds in opslaat.

Succes in ieder geval!

--
Groet, Ronald

StriKe
08/11/03, 14:15
In <j38pqv0m9vos6ndp44orp39pmdnofhokpn@4ax.com> schreef "Ronald Paul"

> Er is wel een overweging te maken voor je dit zo zou gaan maken. Dit
> heeft te maken met de grootte van template.php, en de
> aanroepfrequenties formulier.php en resultaat.php. Als template.php
> heel groot is en formulier.php heel vaak wordt aangeroepen, is het
> wellicht verstandiger om template.php om te bouwen tot een
> resultaat.php die zijn gegevens ophaalt uit bijvoorbeeld een bestand
> waar formulier.php zijn gegevens steeds in opslaat.

Het zou inderdaad gaan om 'af en toe' een formulierke te verzenden, dus
echt overladen kan het niet :-)

'k Heb je uitleg zoveel mogelijk trachten om te zetten in de praktijk
en 'k ben er intussen toch al in geslaagd om een nieuw bestand aan te
maken, met de inhoud van template.php erin. Alleen slaag ik er nog
steeds niet in om de variabelen opgegeven in het formulier in dat
nieuwe bestand te propper, er staat steeds "$variabelnaam" en het wordt
dus niet vervangen met de waarde opgegeven in het formulier.

De code die ik gebruik om dat bestand aan te maken en die inhoud erin
te plaatsen is de volgende:

$Template = join('',file('../gekeurde_sites/template.php'));

$HetBestand = $Bestandsnaam . ".php";
$Bestandslocatie = "../gekeurde_sites/$HetBestand";
$Openen = fopen($Bestandslocatie, "a");
$Template = str_replace("[", "$", $Template);
fwrite ($Openen, $Template);
fclose ($Openen);

$HetBestand is een samenstelling uit een 'woord' dat ook via het
formulier wordt meegestuurd en dan nog een achtervoegsel
de str_replace heb ik maar één keer omdat ik in template.php niet
[naam] gebruikt heb maar [naam (je kan dan zo ook wel $naam vormen hé
;-)

Is er iets wat ik over het hoofd zie zodat de waarden van het formulier
niet met deze code opgenomen worden in dat nieuwe bestand?

--
Groeten,
StriKe

http://www.internetfreakz.be/

Ronald Paul
08/11/03, 15:00
StriKe <usenet@internetfreakz.be> schreef:

>De code die ik gebruik om dat bestand aan te maken en die inhoud erin
>te plaatsen is de volgende:
>
>$Template = join('',file('../gekeurde_sites/template.php'));
>
>$HetBestand = $Bestandsnaam . ".php";
>$Bestandslocatie = "../gekeurde_sites/$HetBestand";
>$Openen = fopen($Bestandslocatie, "a");
>$Template = str_replace("[", "$", $Template);
>fwrite ($Openen, $Template);
>fclose ($Openen);
>
>$HetBestand is een samenstelling uit een 'woord' dat ook via het
>formulier wordt meegestuurd en dan nog een achtervoegsel

Dit is erg gevaarlijk, want nu kan een onbevoegd iemand je gehele
harde schijf bereiken (een bevoegd iemand overigens ook :-)). Ik raad
je aan om dit inkomend gegeven nog te testen met een RE als
/[0-9a-z]/i of wat je dan ook toe wilt staan in de bestandsnaam.

>de str_replace heb ik maar één keer omdat ik in template.php niet
>[naam] gebruikt heb maar [naam (je kan dan zo ook wel $naam vormen hé
>;-)

Dat kan, maar heeft dan niet het gewenste resultaat. PHP neemt dit
letterlijk en zal de [naam vervangen door $naam en niet door de
_waarde_ van $naam zelf. Je zult dus toch de volledige signaalwoorden
moeten aangeven, bijvoorbeeld:

str_replace('[naam]', $naam, $Template);

--
Groet, Ronald

StriKe
08/11/03, 17:00
In <despqvsmon3gd1l87sug1ijldpv6dm0rpn@4ax.com> schreef "Ronald Paul"

> Dat kan, maar heeft dan niet het gewenste resultaat. PHP neemt dit
> letterlijk en zal de [naam vervangen door $naam en niet door de
> _waarde_ van $naam zelf. Je zult dus toch de volledige signaalwoorden
> moeten aangeven, bijvoorbeeld:
>
> str_replace('[naam]', $naam, $Template);

Hmm, 't werkt intussen zoals het hoort :-)

Thx!

--
Groeten,
StriKe

http://www.internetfreakz.be/