formulier data opslaan in bestand
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)
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
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");
?>
$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)
Gebruik code-tags rond je code.[/modedit]
Gewijzigd op 29/12/2010 18:41:45 door Jens V
- Variabelen buiten quotes
- Niet onnodig variabelen kopiëren
- header
- xss mogelijk
- Gebruik hier [code] en [/code] tags.
gebruik mysql dan kan je het in een database opslaan
Quote:
Ik heb niet de beschikking over een database.
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 tags.
ik snap niet wat je hiermee bedoelt
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.
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.
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
Ik ben weer wat verder, maar helemaal snappen doe ik het nog niet.
allereerst de nieuwe code:
formulier:
Code (php)
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
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");
?>
$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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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');
?>
$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 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
Quote:
Alvast weer bedankt.
Een file openen / lezen en dan weer schrijven, kan veel gemakkelijker.
Geen fopen() (en dergelijke nodig)
Code (php)
1
2
3
4
5
6
7
8
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);
?>
// 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).
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)
1
2
3
4
5
6
7
8
9
10
11
12
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;
?>
// 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=><br>
Tekst: <br><textarea name="opmerkingen" rows="7" cols="45"></textarea><br>
<input type="submit" name="Submit" value="vernieuwen">
</form>
<hr>
post:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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');
?>
$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.