Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Ongelma tiedoston luonnissa PHP:llä

Sivun loppuun

ankzilla [04.12.2008 22:58:03]

#

Koodin tarkoituksena on luoda uusi tekstitiedosto, jonne tallentuisi uusi foorumiaihe. Olen pitkän pähkäilyn jälkeen saanut tiedostonluonnin toimimaan oikealla nimellä -tyhjänä.

En tiedä yhtään, mikä koodissa mättää, mutta toivottavasti joku teistä tietäisi. :)

Elikkäs miten koodin saisi sellaiseksi, että myös sisältö sinne tallentuisi:

<?php

$kiitosSivu = "http://ankzilla.com/f/7c8552df1a7648f5843d16e8d636d258.php";
$palautteetTallennetaan = true;
$tallennaTiedostoon = "topic_name.'.txt";  // Chmodaa muotoon 766


function lisaaTiedostonLoppuun ($tiedosto, $lisattava)
{
	ignore_user_abort(true);

	$fd = fopen ($tiedosto, "a");

	if (flock($fd, LOCK_EX)) {
		fwrite($fd, $lisattava);
		flock($fd, LOCK_UN);
	}

	fclose($fd);

	ignore_user_abort(false);
}

$tyyppi = $_POST['Tyyppi'];


// Käsittely

if ($tyyppi == 'viesti')
{
	/* Luetaan lomakkeen lähettämät kentät muuttujiin */

	$nimi = strip_tags($_POST['nimi']);
	$topic_name = strip_tags($_POST['topic_name']);
	$topic_msg = strip_tags($_POST['topic_msg']);

	/* Otetaan ylös lähettäjän kellonaika */

	$aikaLahetetty = date('d.m.Y H:i:s');


$tallennaTeksti ="
<table bgcolor=\"slategray\" border=\"1px\">
<tr>
<td width=\"515px\" align=\"middle\"><small><b><big>$nimi</big> - $aikaLahetetty</b></small></td>
</tr>
<tr height=\"1px\" bgcolor=\"white\"><td></td></tr>
<tr>
<td align=\"middle\"><b>$topic_name</b></td>
</tr>
<tr height=\"75px\" valign=\"top\" align=\"left\">
<td>$topic_msg</td>
</tr>
</table>

<br /><br />
";

//Raxin juttu
$tallennaTiedostoon = fopen($topic_name.'.txt', 'w');
fclose($tallennaTiedostoon);

	/* Siirtyy kiitossivulle */

	header("Location: ".$kiitosSivu);

}


else
{
	/* Jos kyseessä on joku muu lomake kuin tyyppiä PALAUTE. */
	exit ("Virhe PHP:ssä - Ota yhteyttä Palaute -lomakkeella");
}
?>

???

ajv [04.12.2008 23:14:53]

#

Sulla on tos vaan fopen() ja fclose(), välistä puuttuu se olennainen fwrite().

Grez [04.12.2008 23:35:09]

#

Niin tuollahan on tehty funktio "LisaaTiedostonLoppuun", mutta sitä ei käytetä missään.

ajv [04.12.2008 23:40:19]

#

Siin funktios vaan avataan tiedosto a-moodis. Muistaakseni append-mode ei luo tiedostoa jos sitä ei ole, vai? Nyt kännyl jaksa tarkistaakkaan :)

Edit: muistin väärin :(

tgunner [04.12.2008 23:44:38]

#

ajv kirjoitti:

Muistaakseni append-mode ei luo tiedostoa jos sitä ei ole, vai?

PHP: fopen - Manual kirjoitti:

'a' | Open for writing only; place the file pointer at the end of the file. If the file does not exist, attempt to create it.

Jatkakaa.

ankzilla [05.12.2008 22:29:35]

#

ajv kirjoitti:

Sulla on tos vaan fopen() ja fclose(), välistä puuttuu se olennainen fwrite().

Anteeksi että kyselen tyhmiä, mutta mutta mikä oli sen moodin kirjain joka kirjoitti ne jutut?
Tai antaisitteko vain linkin, mistä ne kaikki näkee. (En osannut Googlata oikeilla hakusanoilla)

pistemies [05.12.2008 22:38:05]

#

w

ankzilla [05.12.2008 22:41:03]

#

Pekka Mansikka kirjoitti:

w

Kiitos.

En kovin paljoa tiedä PHP:stä, ja tämän avulla koitan sitä opetellakkin.
Kertoa joku vielä että onko seuraava skriptinpätkä mahdollinen, eli saako kahdessa koodinpätkässä olla sama moodi?

$tallennaTiedostoon = fopen($topic_name.'.txt', 'w');
$tallennaTiedostoon = fwrite($tallennaTeksti, 'w');

Andu [06.12.2008 01:00:26]

#

PHP:n manuaali voisi olla ihan hyödyllinen. Sieltä selviää myös, että fwrite-funktio ei ota vastaan mitään moodeja. Jos tallennaTeksti-muuttuja sisältää tallennettavan tekstin, toinen rivi menisi näin:

fwrite($tallennaTiedostoon, $tallennaTeksti);

lainaus:

saako kahdessa koodinpätkässä olla sama moodi?

Tähän kysymykseen vastaus on kyllä, mutta en tiedä miten se liittyi kyseiseen koodiin.

ankzilla [06.12.2008 13:27:01]

#

Andu kirjoitti:

Jos tallennaTeksti-muuttuja sisältää tallennettavan tekstin, toinen rivi menisi näin:

fwrite($tallennaTiedostoon, $tallennaTeksti);

Eikö tule muka mitään moodia?

Another question:

$tallennaTiedostoon = fopen($topic_name.'.txt', 'w');

Toi topic_name.'txt', <== Niin onko noi ' ja , -merkit oikein, että vaikuttaako ne mitenkään koodiin?
(En sitte oo tehny tätä kovin kauaa, älkää hermostuko. ;) )

pistemies [06.12.2008 13:41:40]

#

ankzilla kirjoitti:

Eikö tule muka mitään moodia?

Another question:

$tallennaTiedostoon = fopen($topic_name.'.txt', 'w');

Juu-u, ei fwriteen tule moodia. Tuossa esimerkissäsi on fopen eikä fwrite.

ville-v [06.12.2008 16:17:36]

#

Pilkku erottaa funktiolle annettavat parametrit. Fopen() ottaa niitä vastaan kaksi.

Heittomerkkien välinen teksti on merkkijono. Piste yhdistää kaksi merkkijonoa yhdeksi. Koska muuttujaan $topic_name on sijoitettu merkkijono, sitä käsitellään kuten muutakin merkkijonoa.

Kun sijoitat rivillä 5

$tallennaTiedostoon = "topic_name.'.txt";

, kaikki kaksinkertaisten heittomerkkien väliin laitettavat merkit muodostavat merkkijonon. Tämä ei ole oikein.

Sillä ei kuitenkaan ole vaikutusta ohjelman toimintaan, sillä ylikirjoitat muuttujan myöhemmin, jolloin sen merkkijonomerkitys katoaa.

//Raxin juttu
$tallennaTiedostoon = fopen($topic_name.'.txt', 'w');
fclose($tallennaTiedostoon);

Tämän jälkeen $tallennaTiedostoon viittaa kyseiseen tiedostoon.

Koska käytössäsi on funktio

function lisaaTiedostonLoppuun ($tiedosto, $lisattava)

voit kuitenkin korvata tiedostoon kirjoituksen kutsumalla tätä funktiota:

lisaaTiedostonLoppuun($topic_name.'.txt', $tallennaTeksti);

ankzilla [06.12.2008 16:50:19]

#

Nyt se toimii, vaikken korjannutkaan noita ville-v:n juttuja.

Kiitos!

ankzilla [06.12.2008 18:50:21]

#

Miksen voi muokata viestiäni? No jaa...

Onhan sekin mahdollista, että samalla lomakkeella voi luoda vaikka kuinka paljon tiedostoja kopioimalla ja vähän muokkailemalla ton saman koodin kahteen kertaan samaan tiedostoon? Tietysti arvot muuttaisin, mutta kun tarvitsisin luoda toisen tiedoston aiheen vastauksille.

Teen siis foorumeita, jos jollekkin jäi epäselväksi.

Grez [06.12.2008 19:05:34]

#

ankzilla kirjoitti:

Miksen voi muokata viestiäni? No jaa...

Et ole kirjautunut sisään tai viestin kirjoittamisesta on kulunut liikaa aikaa.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta