formulier data opslaan in bestand

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Robert OW

Robert OW

29/12/2010 17:46:35
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?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');
?>


Gebruik code-tags rond je code.[/modedit]
Gewijzigd op 29/12/2010 18:41:45 door Jens V
 
PHP hulp

PHP hulp

21/11/2024 16:56:32
 

29/12/2010 18:37:02
Quote Anchor link
Waarom in een tekstbestand?
- Variabelen buiten quotes
- Niet onnodig variabelen kopiëren
- header
- xss mogelijk
- Gebruik hier [code] en [/code] tags.
 
Maarten PHP

Maarten PHP

29/12/2010 18:39:44
Quote Anchor link
gebruik mysql dan kan je het in een database opslaan
 
Mike Smit

Mike Smit

29/12/2010 18:44:33
Quote Anchor link
Quote:
Ik heb niet de beschikking over een database.
 
Robert OW

Robert OW

30/12/2010 15:21:03
Quote Anchor link
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
en
tags.


ik snap niet wat je hiermee bedoelt
 

30/12/2010 15:24:40
Quote Anchor link
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 dom of simplexml.
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.
 
Robert OW

Robert OW

30/12/2010 15:36:37
Quote Anchor link
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.
 
Kris Peeters

Kris Peeters

30/12/2010 15:54:05
Quote Anchor link
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
 
Robert OW

Robert OW

30/12/2010 17:50:49
Quote Anchor link
Bedankt.

Ik ben weer wat verder, maar helemaal snappen doe ik het nog niet.

allereerst de nieuwe code:

formulier:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
Afbeelding
Quote:



Alvast weer bedankt.
 
Kris Peeters

Kris Peeters

30/12/2010 18:08:51
Quote Anchor link
Bon, ik moet weg ...

Een file openen / lezen en dan weer schrijven, kan veel gemakkelijker.
Geen fopen() (en dergelijke nodig)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?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).
 

30/12/2010 18:50:42
Quote Anchor link
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 dom of simplexml.(...)


En faq.
Gewijzigd op 30/12/2010 18:51:15 door
 
Robert OW

Robert OW

30/12/2010 19:10:41
Quote Anchor link
merci

Toevoeging op 31/12/2010 15:58:14:

bedankt weer. het is weer een stukje verder.

Ik gebruik nu file_get_contents en file_put_contents. Toch blijf ik me afvragen waarom het op die andere maniet met fopen, fread fputs enz.. niet werkt.

ook bedankt voor de dom of simplexm - links. Ik heb er naar gekeken maar zie nu nog niet wat ik er mee moet/kan.

Nog even de nieuwe code:
formulier:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php

// file lezen
$inhoud_filenm = file_get_contents('t01_naam.xml');
echo $inhoud_filenm;
echo "<br>";
// file lezen
$inhoud_fileop = file_get_contents('t01_opm.xml');
echo $inhoud_fileop;


?>

<hr>
<form name="form1" method="post" action="t01_post.php">
Naam: <br><input name="naam" type="text" maxlength=20 value=
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $inhoud_filenm ?>
><br>
Tekst: <br><textarea name="opmerkingen" rows="7" cols="45">
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $inhoud_fileop ?>
</textarea><br>
<input type="submit" name="Submit" value="vernieuwen">
</form>
<hr>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php  
include("t01_naam.xml");
echo "<br>";
include("t01_opm.xml");
    
?>



post:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$naam
= '';
$opmerkingen = '';
$naam = $_POST["naam"];  
$opmerkingen = $_POST["opmerkingen"];  
  
// file lezen
//$inhoud_file = file_get_contents('t01_naam.xml');
// inhoud aanpassen

$inhoud_file .= $naam;
// file opnieuw opslaan met gewijzigde inhoud
file_put_contents ('t01_naam.xml', $inhoud_file);

// file lezen
//$inhoud_fileop = file_get_contents('t01_opm.xml');
// inhoud aanpassen

$inhoud_fileop .= $opmerkingen;
// file opnieuw opslaan met gewijzigde inhoud
file_put_contents ('t01_opm.xml', $inhoud_fileop);


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



Het gekke is dat in het tekst-(textarea)-veld je spaties en line-breaks kunt gebruiken, die plaatst hij mooi weer terug, maar alsje in het naam-(text)-veld spaties intikt slaat hij ze wel op in het bestand maar geeft alleen het stuk voor de spatie terug in het formulier-veld.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.