Permalänk
Medlem

(hjälp) PHP fwrite

hej, jag behöver hjälp med PHP.
jag är ganska ny på PHP och sitter just nu och leker runt lite.

just nu vill jag göra så att användaren kan skriva ett inlägg (som en blogg), och då vill jag att det ska skapas en ny fil.
kollar man på exemplet så är scriptet bundet till testFile.txt men jag vill att användaren ska själv kunna välja namn. ja testad använda $_POST men får bara massa errors

exempel:
$myFile = "testFile.txt";
$fh = fopen($myFile, 'w') or die("can't open file");
$stringData = "SWE";
fwrite($fh, $stringData);
$stringData = "CLOCKERS";
fwrite($fh, $stringData);
fclose($fh);

Visa signatur

CPU: i5-2500K | RAM: 4gb XMS3 1333mhz | Grafikkort: XFX Radeon 5770 | Mobo: MSI P67A c45 | HDD: WD Black 500GB | Chassi: NZXT Lexa S |PSU: XFX XXX Edition 750W

Permalänk
Medlem

Visa hellre hur du har försökt att göra. Lättare att hjälpa till och att du faktiskt lär dig nåt än att vi bara dumpar något som fungerar...

Visa signatur

Jag är en optimist; det är aldrig så dåligt så att det inte kan bli sämre.

Permalänk
Medlem

HTML:

<form action="test.php" method="post">
Titel: <input name="titel" type="text" />
<br /><br />Text:
<input name="text" type="text" />
<br />
<input type="submit" />
</form>

PHP:

<?php
$title = $_POST["titel"];
$text = $_POST["text"];
$myFile = $titel;
$fh = fopen($myFile, 'w') or die("can't open file");
$stringData = "$text";
fwrite($fh, $stringData);
fclose($fh);
?>

<?php
include ('$titel.txt');
?>

Visa signatur

CPU: i5-2500K | RAM: 4gb XMS3 1333mhz | Grafikkort: XFX Radeon 5770 | Mobo: MSI P67A c45 | HDD: WD Black 500GB | Chassi: NZXT Lexa S |PSU: XFX XXX Edition 750W

Permalänk
Medlem

x3onz kod ser ut att fungera så som du vill ha den. Detta sätt är dock väldigt osäkert då en illvillig användare kan skapa filer helt godtyckligt. Exempelvis kan man skapa ett PHP-shell och få kontroll över servern.

Du bör istället använda dig av en databas för att lagra datan. Exempelvis MySQL.

Visa signatur

Asus P8P67 Pro | Core i7 2600 | Sapphire Radeon R9 290 | A-DATA SSD 510

Permalänk
Medlem
Skrivet av crazzir:

x3onz kod ser ut att fungera så som du vill ha den. Detta sätt är dock väldigt osäkert då en illvillig användare kan skapa filer helt godtyckligt. Exempelvis kan man skapa ett PHP-shell och få kontroll över servern.

Du bör istället använda dig av en databas för att lagra datan. Exempelvis MySQL.

jag hade tänkt använda en databas, dock så känner jag att det är för tidigt att blanda in databaser med tanke på att jag är en noob på PHP atm...

dock så har jag inte öppnat port 80 så det är bara jag som ser sidan

Visa signatur

CPU: i5-2500K | RAM: 4gb XMS3 1333mhz | Grafikkort: XFX Radeon 5770 | Mobo: MSI P67A c45 | HDD: WD Black 500GB | Chassi: NZXT Lexa S |PSU: XFX XXX Edition 750W

Permalänk
Medlem
Skrivet av x3onz:

jag hade tänkt använda en databas, dock så känner jag att det är för tidigt att blanda in databaser med tanke på att jag är en noob på PHP atm...

dock så har jag inte öppnat port 80 så det är bara jag som ser sidan

Jag tror jag har hittat ditt fel, du skriver include('$titel.txt')

Att en sträng är inom '' betyder att den är exakt det som står där. PHP kommer alltså inte att lägga in värdet av några variabler. Ditt problem kan lösas genom att skriva till exempel include($titel . '.txt') eller genom att använda citattecken " istället för apostrofer '.

Permalänk
Medlem

<?php
$title = $_POST["titel"];
$text = $_POST["text"];
$myFile = $titel".txt";
$fh = fopen($myFile, 'w') or die("can't open file");
$stringData = "$text";
fwrite($fh, $stringData);
fclose($fh);

include ($titel".txt");
?>

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in C:\xampp\htdocs\php\test.php on line 4

Visa signatur

CPU: i5-2500K | RAM: 4gb XMS3 1333mhz | Grafikkort: XFX Radeon 5770 | Mobo: MSI P67A c45 | HDD: WD Black 500GB | Chassi: NZXT Lexa S |PSU: XFX XXX Edition 750W

Permalänk
Medlem

nu har jag fixat skiten ^^

<?php
//$title = $_POST["titel"];
$text = $_POST["text"];
$myFile = $_POST["titel"].".txt";
$fh = fopen($myFile, 'w') or die("can't open file");
$stringData = "$text";
fwrite($fh, $stringData);
fclose($fh);

include ($myFile);
?>

tack för hjälpen htux

Visa signatur

CPU: i5-2500K | RAM: 4gb XMS3 1333mhz | Grafikkort: XFX Radeon 5770 | Mobo: MSI P67A c45 | HDD: WD Black 500GB | Chassi: NZXT Lexa S |PSU: XFX XXX Edition 750W

Permalänk
Medlem

lekt runt lite mer nu

<form action="test.php" method="post">
Titel: <input name="titel" type="text" /><br /><br />
Namn:
<input name="namn" type="text" />
<br /><br />Text:
<input name="text" type="text" />
<br />
<input type="submit" />
</form>

<?php

$text = $_POST["text"];
$myFile = $_POST["titel"].".txt";
$fh = fopen($myFile, 'w') or die("can't open file");
$stringData = "<h1>".$_POST["titel"]."</h1>\n\n";
fwrite($fh, $stringData);
$stringData = $_POST["namn"]."<br><br>";
fwrite($fh, $stringData);
$stringData = "<p>$text</p><br>";
fwrite($fh, $stringData);
fclose($fh);

include ($myFile);
?>

Visa signatur

CPU: i5-2500K | RAM: 4gb XMS3 1333mhz | Grafikkort: XFX Radeon 5770 | Mobo: MSI P67A c45 | HDD: WD Black 500GB | Chassi: NZXT Lexa S |PSU: XFX XXX Edition 750W

Permalänk
Medlem
Skrivet av x3onz:

jag hade tänkt använda en databas, dock så känner jag att det är för tidigt att blanda in databaser med tanke på att jag är en noob på PHP atm...

dock så har jag inte öppnat port 80 så det är bara jag som ser sidan

Oj, jag läste fel en aning. Fick för mig att det du skrev var från en annan som svar på din första post. Ber om ursäkt för det.

Jo det är ju sant att det inte är något problem när du kör den lokalt. Det är dock alltid bra att ha lite grundläggande säkerhetstänk när man kodar.

Ett tips när du skriver ut data som användaren angivit är att använda sig av funktionen htmlentities() för att konvertera html-taggar och på så sätt motverka att användaren skriver in HTML-kod för att ändra sidans utseende eller redirectar till en illvillig sida etc.

Visa signatur

Asus P8P67 Pro | Core i7 2600 | Sapphire Radeon R9 290 | A-DATA SSD 510