Door
Robert OW
op 29-12-2010 17:46
gewijzigd op 29-12-2010 18:41
4.845 views
ik wil een website waar eigenaar zelf een aantal teksten kan wijzigen. Dit doe ik door middel van een (beveiligde) pagina waar in een (of meerdere) formulier(en) teksten kunnen worden ingevuld, deze op te slaan in een bestand en op een andere pagina weer uit het bestand te lezen. Op de formulier pagina wil ik dan het formulier ook weer voorinvullen. Ik heb niet de beschikking over een database.
Nou ben ik al een heel eind, maar het lijkt alsof het bestand niet leeggegooid wordt (ondanks "$file = fopen($data, "w"); "). Elke keer als op vernieuwen wordt gedrukt wordt de tekst langer.
Ik geloof dat dit vaak met een CMS wordt opgelost maar ik wil het graag zelf weten en oplossen.
Hieronder voorbeeld code :
formulier:
<?php
$data2 = "t01_gegevens.txt";
$file2 = fopen($data2, "r");
// haal de tekst eruit
$datawaarde = fgets($file2, 4096);
// sluit het bestand weer
fclose($file2);
// toon wat er in het bestand staat
echo $datawaarde;
?>
<form name="form1" method="post" action="t01_post.php">
Naam: <br><input name="Naam" type="text" value="<?php echo $datawaarde ?>"><br>
<textarea name="Opmerkingen" rows="7" cols="45"><?php echo $datawaarde ?></textarea><br>
<input type="submit" name="Submit" value="vernieuwen">
</form>
<?php
include("t01_gegevens.txt");
?>
Waarom in een tekstbestand?
- Variabelen buiten quotes
- Niet onnodig variabelen kopiëren
- [php]header[/php]
- [google]xss mogelijk[/google]
- Gebruik hier [[color=black]code[/color]] en [/[color=black]code[/color]] tags.
Ik weet niet of ik al wat met deze opmerkingen kan maar ik zal er even wat mee stoeien.
Waarom in een tekstbestand?
Een tekstbestand was maar een voorbeeld omdat een database niet mogelijk is. Het zou natuurlijk ook in elk ander formaat bestand kunnen (bv .php) (denk ik ???)
- Variabelen buiten quotes - Niet onnodig variabelen kopiëren
zal het proberen
- header
wat is daar fout aan ?
- xss mogelijk
zegt me niets maar ik zal even googlen
- Gebruik hier
en
tags.
ik snap niet wat je hiermee bedoelt
?
Onbekende gebruiker
30-12-2010 15:24
Oh, ergens midden in had je gezegd dat je geen database hebt. Waarom heb je geen database?
Je kunt beter in plaats van een tekst bestand, als je toch met bestanden wilt werken, XML gebruiken. Gebruik dan [php]dom[/php] of [php]simplexml[/php].
Als je hier op het forum code plaatst moet je het tussen die tags plaatsen, anders ziet het er niet uit, kan het raar komen te staan. Daardoor dacht ik dat je een fout had en dus dat je al data naar de gebruiker toe stuurde voordat je die header deed. Dit is niet het geval. Wel zie ik nu dat je variabelen buiten quotes moet halen.
Ik heb geen database omdat ik het voor een vriend doe en die heeft het goedkoopste pakket bij de hosting-provider genomen, d.i. zonder database.
Verder ben ik voor het eerst lid van een forum geworden en nog onbekend met de benodigde etiquette.
Bedankt voor de tips weer. Ik heb vaker gehoord/gelezen van 'XML' 'dom' en 'simplexml' maar kan het nog niet precies plaatsen. Ik zal er induiken om te kijken wat het is en wat ik er mee kan.
Ik ben weer wat verder, maar helemaal snappen doe ik het nog niet.
allereerst de nieuwe code:
formulier:
<?php
$datanm = "t01_naam.xml";
// open de file naam
$filenm = fopen($datanm, "r");
// haal de tekst eruit
$datawaardenm = fgets($filenm, 4096);
// sluit het bestand weer
fclose($filenm);
// toon wat er in het bestand staat
echo $datawaardenm;
$dataop = "t01_opm.xml";
// open de file opm
$fileop = fopen($dataop, "r");
// haal de tekst eruit
$datawaardeop = fgets($fileop, 4096);
// sluit het bestand weer
fclose($fileop);
// toon wat er in het bestand staat
echo $datawaardeop;
?>
<form name="form1" method="post" action="t01_post.php">
Naam: <br><input name="naam" type="text" value=<?php echo $datawaardenm ?>><br>
<textarea name="opmerkingen" rows="7" cols="45"><?php echo $datawaardeop ?></textarea><br>
<input type="submit" name="Submit" value="vernieuwen">
</form>
<?php
include("t01_naam.xml");
include("t01_opm.xml");
?>
Ik maak geen gebruik meer van een .txt bestand maar inderdaad een .xml bestand.
Ik heb de twee input-velden gescheiden en de strings uit de fputs gehaald. Het werkt nu beter, het lijkt alsof vooral de strings gecumuleerd werden. Logisch vind ik het nog niet omdat ik in het begin van t01-post.php de twee variabelen eerst leegmaak.
Maar het lijkt beter te werken. Alleen als je meerdere regels in het tekst-vlak op het formulier invult slaat hij ze wel op, dat kan ik zien dmv de twee includes in het t01_form.php, maar hij geeft alleen de eerste regel terug in het formulier.
En nog even over de syntax van dit forum:
Ik moet
en
tags gebruiken voor php-code. Is er een bepaald gebruik wanneer je de aangegeven symbolen kunt/moet gebruiken, of kan ik dat ergens op dit forum terugvinden ? Ik bedoel
Een file openen / lezen en dan weer schrijven, kan veel gemakkelijker.
Geen fopen() (en dergelijke nodig)
<?php
// file lezen
$inhoud_file = file_get_contents('mijnfile.txt');
// inhoud aanpassen
$inhoud_file .= 'Wat tekst toevoegen...';
// file opnieuw opslaan met gewijzigde inhoud
file_put_contents ('mijnfile.txt', $inhoud_file);
?>
Wat xml betreft: daar zijn nog andere methodes voor (Tegen dat ik hier weer online ben, zullen hier wel posts over zijn).
?
Onbekende gebruiker
30-12-2010 18:50
gewijzigd op 30-12-2010 18:51
Karl Karl op 30/12/2010 15:24:40
(...)
Je kunt beter in plaats van een tekst bestand, als je toch met bestanden wilt werken, XML gebruiken. Gebruik dan [php]dom[/php] of [php]simplexml[/php].(...)