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");   
?>  


en post:


<?php
$Naam = '';
$Opmerkingen = '';
$Naam = $_POST["Naam"];   
$Opmerkingen = $_POST["Opmerkingen"];   
  
$data = "t01_gegevens.txt";   
$file = fopen($data, "w");   
fputs($file, "Geschreven door: $Naam<br> Opmerkingen:<i>$Opmerkingen</i><hr>");   
fclose($file);   
header('Location: t01_form.php');
?>


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.
gebruik mysql dan kan je het in een database opslaan
Ik heb niet de beschikking over een database.


Bedankt voor de snelle reacties.

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
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.
Zeker doen.
XML geeft je een formaat waarin je gegevens kunt opslaan die door alle programmeer- / script talen kunnen gelezen worden.

Je kunt het zelfs bijna omdraaien: iets dat geen xml kan lezen, kan je amper een programmeertaal noemen
Bedankt.

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");    
?>  


post:


<?php
$naam = '';
$opmerkingen = '';
$naam = $_POST["naam"];  
$opmerkingen = $_POST["opmerkingen"];  
  
$datanm = "t01_naam.xml";  
$filenm = fopen($datanm, "w");  
fputs($filenm, $naam);  
fclose($filenm);

$dataop = "t01_opm.xml";  
$fileop = fopen($dataop, "w");  
fputs($fileop, "dat zijn" . $opmerkingen);  
fclose($fileop);

header('Location: t01_form.php');
?>


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



Alvast weer bedankt.


Bon, ik moet weg ...

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).
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].(...)


En faq.

Reageren