Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Tekstitiedoston rivin muutos ja tallennus takaisin (PHP)

Sivun loppuun

PauliH [04.04.2010 09:30:41]

#

Tervehdys!

Ilman aiempaa kokemusta php:stä ja vähäisellä kokemuksella ohjelmoinnista olen yrittänyt värkätä lomakkeeseen perustuvaa ns. kysymys - vastaus sivua. Käyttämäni koodit ovat lähtöisin pääasiassa täältä ohjelmointiputkan sivustolta, josta on löytynyt paljon hyviä esimerkkejä tästä aiheesta ja olen saanut tämän hitaasti puurtamalla jotenkin toimivaksi.

Syötän tietoa lomakesivun kautta, josta tiedot tallentuvat teksitiedostoon ja josta ne voidaan purkaa sitten varsinaiselle sivulle näkyviin. Eräänlainen tietokanta on siis kyseessä, mutta pelkästään php -pohjainen. Luultavasti tämän voisi paremmin toteuttaa MySQL -tietokannalla, mutta ajattelin kokeilla onnistuisiko tämä php:llä. Muuten toimii mutta yhtä asiaa en saa tehdyksi eli miten voisi valita ja muuttaa tekstitiedostosta vain yhden rivin tietoja.

Eli siis lomakkeen kahteen kenttään kirjoitetaan kysymys ja vastaus, joka tallentuu tekstitiedostoon varustettuna tunnistenumerolla ja päivämäärällä. Tekstitiedoston rivit näyttävät tältä.

1 | 16.03.2010 18:47 | kysymys | vastaus
2 | 16.03.2010 18:48 | kysymys | vastaus
3 | 16.03.2010 18:49 | kysymys | vastaus
4 | 16.03.2010 18:51 | kysymys | vastaus

Sitten tekstitiedoston tiedot puretaan explode:lla sivulle ja tulostetaan näkyviin. Koodi olennaisilta osin näin:

<?php
 for ($i = 0; $i < $maara; $i++) {
   $tiedot = explode("|", $tekstit[$i], 4);
   if($tekstit != "\n")

 $id = $tiedot[0];
 $date = $tiedot[1];
 $ot = $tiedot[2];
 $sel = $tiedot[3];

 echo "<br>$ot <br>";
 echo "<br><KBD>$sel</KBD><br>";
 echo "<p><p><SMALL><a href=\"muokkaa_0.php\">muokkaa tapausta (nro:   $id)</SMALL></a><p><hr>";
?>

Tietojen editointi onnistuu siten, että koko tekstitiedosto luetaan lomakkeeseen ja sen jälkeen tallennetaan. Mutta jos haluaisikin editoida vain jotain tiettyä tapausta esim. numeroa 3 niin että vain sen kysymys ja vastaus tulisivat lomakkeen kenttään ja sen jälkeen onnistuisi taas tallennus.

Alla ovat muokkaa ja tallenna php:t

- muokkaa_0.php

 <form action="tallenna_0.php" method="post">
 <textarea name="tieto" rows="30" cols="125">

<?php

   $tieto = file_get_contents("txt/testi_0.txt");
   $tieto = htmlspecialchars($tieto);
   echo $tieto;
?>

 </textarea><br>
 <input type="submit" value="Tallenna">
 </form>

- tallenna_0.php

<?php
 $tieto = $_POST["tieto"];
 if ($tieto <> "") {
	$tieto = trim($_POST['tieto']);
    $tied = fopen("txt/testi_0.txt", "w");
    fwrite($tied, $tieto);
    fclose($tied);
}
?>

Jokotai [04.04.2010 09:57:59]

#

Luet yhden rivin apumuuttujaan ja käsittelet apumuuttujaa.

Teuro [04.04.2010 10:30:07]

#

Jos tiedoston koko ei ole kauhean iso, niin voit lukea tiedoston file funktiolla valmiiksi taulukkoonn. Tämän jälkeen purat halutun solun, muokkaat sitä ja tallennat koko taulukon takaisin tiedostoon.

PauliH [04.04.2010 12:40:26]

#

Jokotai - Jotenkin tuon ymmärän, mutta jos löytyisi esimerkki niin ehkä sen jälkeen menisi perille paremmin.

Teuro - Tiedosto ei ole iso ja File_get_contents() varmaankin toimisi, mutta sama juttu eli esimerkin avulla voisin jotenkin päästä paremmin kärryille. Toisaalta ajattelin että voisin hyödyntää tekemääni koodia, mutta jos se on kelvotonta tähän tarkoitukseen niin ehkä sen voi hylätä.

Eli miten saisin tuosta linkistä aina aukeamaan kyseisen id numeron mukaisen rivin lomakkeeseen ja tallennettua takaisin samalla id -numerolla

<a href=\"muokkaa_0.php\">muokkaa tapausta (nro:$id)</SMALL></a>

Jokotai [04.04.2010 12:43:27]

#

Teuro kirjoitti:

Jos tiedoston koko ei ole kauhean iso, niin voit lukea tiedoston file funktiolla valmiiksi taulukkoonn. Tämän jälkeen purat halutun solun, muokkaat sitä ja tallennat koko taulukon takaisin tiedostoon.

Sama idea kuin tuossa. \n erotusmerkkinä explodessa ja siinä sitten haluttua riviä muuttamaan.

Teuro [04.04.2010 12:47:09]

#

Elikä siis

<?php
$muokattava = file("txt/testi_0.txt");
$muokattava_id = abs($_GET['id']);

/* Tarkista, että id on pienempi kuin count($muokattava) */
$haluttu_rivi = $muokattava_id[$id];

/* Tee muutokset */

/* kirjoita rivi kerrallaan takaisin */

EDIT muokattu typo pois koodista kiitos macrolle.

Macro [04.04.2010 13:59:50]

#

Teuro varmaan tarkoitti $id:llä $muokattava_id:tä.

PauliH [04.04.2010 18:01:34]

#

Kiitos tarkemmista ohjeista, täytyy kokeilla kunhan tulee sopiva hetki..

PauliH [05.04.2010 09:05:53]

#

Oli meikäläiseltä liikaa luvattu että kokeilisin.. En osaa tuota soveltaa ellen saa lisää neuvoja. Sori nyt, mutta aloittelija kun olen niin minulle joutuu vääntämään rautalangasta. Epäselvää on minne koodi pitäisi sijoittaa? Siihen ensimmäiseen josta luetaan ja tulostetaan tekstit vai muokkaa_0.php vai tallenna_0.php?

<?php
// tämän ymmärrän kyllä
$muokattava = file("txt/testi_0.txt");

//  mikä abs?
$muokattava_id = abs($_GET['id']);

// count($muokattava) on selvää sillä voi laskea määrän, mutta entä sitten
/* Tarkista, että id on pienempi kuin count($muokattava) */
$haluttu_rivi = $muokattava_id[$id];
?>

Teuro [05.04.2010 09:38:28]

#

Mikä kohta tuottaa ongelmia?

PauliH [05.04.2010 09:45:49]

#

Muokkasin vielä tuota edellistä kysymystäni..

Teuro [05.04.2010 09:48:35]

#

abs on funktio, jonka toiminnan voit selvittää php:n dokumentaatiosta. Epäilemättä osaat kuitenkin luoda tarvittavan lomakkeen ja käsitelllä siitä saatavat datat, niin minusta jäljelle jää tuo viimeinen kommentti, eli tallennus rivi kerrallaan takaisin tiedostoon.


Sivun alkuun

Vastaus

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

Tietoa sivustosta