Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: 5 uusinta viestiä?

Sivun loppuun

Tontttu [14.09.2005 19:17:19]

#

Niih, eli olis haussa semmonen scripti, joka näyttäis 5 uusinta viestiä tämmösessä vieraskirjan tapasessa jutussa.

Viestit on tekstitiedostossa (yks viesti /rivi) ja ne luetaan näin sivuun:

   echo "<a href=\"mailto:$email\">$nimi</a>";
   echo " " . date("d.m.Y H:i", $aika) . "";
   echo "<br><b>Aihe:</b> $aihe";
   echo "<br><b>Kuvaus:</b> $viesti <br><br>";

...Jos siitä nyt on apua. Noista olis tarkotus siis saaha 5 uusinta viestiä näkymään toisella sivulla.

hunajavohveli [14.09.2005 19:29:48]

#

Lue tiedosto taulukkoon ja tulosta taulukosta viisi viimeistä riviä, tai miten monta riviä yksi viesti sitten viekin.

Tontttu [14.09.2005 19:56:44]

#

Ei onnistu.. =(

Apuja?

hunajavohveli [14.09.2005 20:25:34]

#

Kyllä varmasti onnistuu, kunhan kerrot, mitä kohtaa et osaa. Tiedosto luetaan taulukkoon näin:

$taulukko = file("tiedosto.dat");

Ja alkioiden määrä selvitetään näin:

$alkiot = count($taulukko)

Alkioiden määrästä saat selville suoraan myös viimeisen alkion indeksin, jolloin tiedät missä kohtaa on viimeinen viesti. Sitä edeltävässä alkiossa on sitä edellinen viesti jne.

Juice [14.09.2005 20:26:41]

#

Hieman apuja:

<?php
$filu = file("viekku.txt");
$count = count($filu);
for($i=$count-5; $i<$count; $i++) {
  //tulosta
}
?>

EDIT: Kokonaisen minuutin myöhässä.

Tontttu [14.09.2005 20:34:59]

#

Mulla on niitä tekstitiedostoja siis kolme, joita pitäs 5 uusinta poimia..

Sen jutun osote on http://www.neitokakadu.net/KAUPPA se ei siis oo vieraskirja vaan vieraskirjan tyylinen kauppasivu. Sieltä siis 5 uusinta ilmoitusta pitäs löytyä. siellä jokaisen eri osion kansiost löytyy ilmoitukset.txt jossa on ne kaikki sen osion ilmoitukset 1kpl/rivi.

Heikki [14.09.2005 21:16:26]

#

Sinulla näyttää olevan aikaleima tallennettuna jokaiseen ilmiotukseen. Nyt vain luet kaikki kolme tiedostoa eri taulukoihin, ja katsot aikaleimojen perusteella viisi uusinta viestiä. En jaksa kirjoittaa koodia, joten tämä jää sinun tehtäväksesi.

Jos jokin yksittäinen asia tuosta tuottaa hankaluuksia niin kysy.

kayttaja-2791 [14.09.2005 21:25:43]

#

Mainitut tavat eivät ole niitä optioidumpia. Hyvä (paras?) olisi kun uuden ilmoituksen yhteydessä vain generoitaisiin ne 5 uusinta uudestaan johonkin tiedostoon.

Tontttu [14.09.2005 21:32:30]

#

JTS, toihan vois olla ihan hyvä juttu!

Mitenkä sen sais tehtyä? itelle ei nyt tule mieleen...

Metabolix [14.09.2005 21:40:02]

#

No samalla kun kirjoitat johonkin niistä kolmesta tiedostosta, lisäät saman myös johonkin neljänteen.

<?php

$uusimmat = file("uusimmat.txt");
$uusimmat[] = $lisättävä;

$f = fopen("uusimmat.txt", "w");
for ($i = 1; $i < 6; $i++)
{
    fwrite($f, $uusimmat[$i]);
}
fclose($f);
?>

Viimeisellä rivillä siis uusin.

Tontttu [14.09.2005 21:47:03]

#

Lisäsin sen tuonne yhen tiedoston koodin sekaan.. taisin laittaa väärin tai jotain, ei kirjottanu mitään.

<?php
if (!isset($_POST['nimi'])) {
?>


  <form action="ilmoita.php" method="post">
  Nimi: <br> <input type="text" name="nimi"> <br>
  Sähköposti: <br> <input type="text" name="email"> <br>
  Aihe: <br> <input type="text" name="aihe"> <br>
  Kuvaus: <br> <textarea name="viesti" width="200" height="200"></textarea>
  <input type="submit" value="Lähetä">
  </form>


<?php
} else {
   $tiedosto = fopen("ilmoitukset.txt", "a");

   $nimi = $_POST['nimi'];
   $email = $_POST['email'];
   $aihe = $_POST['aihe'];
   $viesti = $_POST['viesti'];

if (strlen($aihe) <2)
{
exit ("<H1>aihe on pakollinen!</H1>");
}
if (strlen($nimi) <2)
{
exit ("<H1>nimi on pakollinen!</H1>");
}
if (strlen($email) <2)
{
exit ("<H1>Sähköposti on pakollinen!</H1>");
}
if (strlen($viesti) <2)
{
exit ("<H1>Kuvaus on pakollinen!</H1>");
}

   $viesti = stripslashes($viesti);
   $viesti = htmlspecialchars($viesti);
   $viesti = str_replace("\n", "<br>", $viesti);

   $aika = time();

   $rivi = "$nimi|$email|$aika|$aihe|$viesti\n";

   fwrite($tiedosto, $rivi);

   fclose($tiedosto);



$uusimmat = file("../uusimmat.txt");
$uusimmat[] = $lisättävä;

$f = fopen("../uusimmat.txt", "w");
for ($i = 1; $i < 6; $i++)
{
    fwrite($f, $rivi[$i]);
}
fclose($f);


   header("Location: index.php");
}

?>

Metabolix [14.09.2005 22:05:52]

#

Ilmiselvästi $lisättävä = $rivi, ja $uusimmat pitää jättää rauhaan (se ei ole $rivi).

Tontttu [15.09.2005 15:31:36]

#

Yritin jotakin, mutten onnistunu.. se kirjotti 4 jotain merkkiä sinne vaan

kayttaja-2791 [15.09.2005 15:49:20]

#

Jatka yritystä. Jos perusasiat eivät ole hallinnassa tutustu vaikka tähän Putkan oppaaseen. Jos ei auta niin yksinkertaista koodia, tee vaikka toinen tiedosto johon liität sitä oikeaa koodia, yksinkertaistettuna vain. Ei se ohjelmointi aina ole helppoa, tai no yleensä se ei ole helppoa vaan haastavaa. Siksi se onkin niin palkitsevaa.

Tontttu [15.09.2005 16:30:33]

#

php opas on tuolt pariin kertaan luettu.

parikyt yritystä oon koittanu, mut ei onnistu :(

Mikä tuossa ylläolevassa koodissa oli vikana? tai mitä kaikkee pitää muuttaa?

folio [15.09.2005 21:33:45]

#

- Et määrittele tuota lisättävä muuttujaa misään: $uusimmat[] = $lisättävä;
- Kirjoitat tiedostoon string:ä kirjain kerrallaa: fwrite($f, $rivi[$i]);

Pienillä muutoksilla saat tuon toimimaan, mutta itse tekisin tuo tähän tyyliin:

$uusimmat = file("../uusimmat.txt");
$uusimmat[] = $lisättävä;

$f = fopen("../uusimmat.txt", "w");
for ($i = 1; $i < 6; $i++)
{
    fwrite($f, $rivi[$i]);
}
fclose($f);

Muutetaan muotoon:

// $rivi sisältää uusimman ilmoituksen
array_push($uusimmat = file('../uusimmat.txt'), $rivi);
$uusimmat = implode('', array_slice($uusimmat, -5));

$f = fopen('../uusimmat.txt', 'w');
fwrite($f, $uusimmat);
fclose($f);

Tontttu [16.09.2005 14:51:54]

#

Näyttää toimivan. Kiitos!

Tontttu [18.09.2005 11:51:03]

#

uusimmat.txt ilmotusten järjestys muuttuu jostai ihme syystä aina välillä.. miks? miten sen saa estettyä?

folio [18.09.2005 17:00:26]

#

Miten se muuttuu? Kyllä tuo minulla toimii niin kuin pitäisikin.

Tontttu [18.09.2005 19:17:31]

#

Ilmoitusten järjestys. Välillä on kahesta toinen ylempänä ja välillä toinen.
http://www.neitokakadu.net/KAUPPA Siinä näkyy heti 5 uusinta (Niitä ilmpotuksia no kuitenki vasta kaks)

folio [18.09.2005 21:37:52]

#

Miten haet ilmoitukset tuohon uusimmat listaan? Eihän tuo antamani koodi liity ilmoitusten näyttämiseen millään tavoin, vaan tarkoitus oli että uusimmat.txt generoidaan uudestaan vain silloin kun lisätään uusi ilmoitus.

Tontttu [19.09.2005 19:17:08]

#

Näin:

<?php
$viestit = file("uusimmat.txt");
$viestit = array_reverse($viestit);
$viestimaara = count($viestit);

for ($i = 0; $i < $viestimaara; $i++) {
   $tiedot = explode("|", $viestit[$i], 5);

   $nimi = $tiedot[0];
   $email = $tiedot[1];
   $aika = $tiedot[2];
   $aihe = $tiedot[3];
   $viesti = $tiedot[4];

   echo " <div align=\"center\" class=\"tekstiloota2\">";
   echo " <div align=\"left\" class=\"tekstiloota\">";

   echo "<a href=\"mailto:$email\">$nimi</a>";
   echo " " . date("d.m.Y H:i", $aika) . "";
   echo "<br><b>Aihe:</b> $aihe";
   echo "<br><b>Kuvaus:</b> $viesti <br><br>";

   echo "</div></div><br>";
}
?>

tsuriga [19.09.2005 20:06:44]

#

Käytä array_reversen sijasta for-lauseena for($i=count($viestit);$i>0;--$i) { (korjatkaa jos meni väärin). Eikä echon tarvitse alkaa heittomerkeillä tai loppua niihin eli echo " " . date("d.m.Y H:i", $aika) . ""; muotoon echo date(..); Ja virheenkäsittelyhän tuosta puuttuu.

Tontttu [09.10.2005 10:52:28]

#

Ei auta. Listasta tulee ihan yhtä sotkua aina välillä, tekstitiedostossa viestit pomppii eri paikkoihin.
Nyt on tämmönen:
http://www.neitokakadu.net/KAUPPA/virhe1.jpg
pitäs olla tämmönen:
http://www.neitokakadu.net/KAUPPA/virhe2.jpg

eli sen saa kyllä kuntoon ku sitä tekstitiedostoo muuttaa, jossa on menny se järjestys ihan sotkuks.. Mut miten sen saa pysymään kunnossa?

folio [09.10.2005 14:17:04]

#

Ymmärsinkö nyt ihan oikein - uusimmat.txt:n rivien järjestys muuttuu vaikka et lisää uutta ilmoitusta?

ZcMander [09.10.2005 18:35:27]

#

Sulla näyttää olevan HTML-väärin joka saattaa olla syy.

Tontttu [10.10.2005 14:54:28]

#

Juu, niin.

Mistä kohti se HTML menee väärin? Äsken ku pikaseen katoin nii en huomannu mitään.

squid [10.10.2005 16:47:46]

#

Katoppas vaikka validaattorilla :)

Tontttu [10.10.2005 16:55:56]

#

öhm.. Missä tiedostossa se virhe on?

lapm [11.10.2005 06:47:01]

#

Tontttu kirjoitti:

Ilmoitusten järjestys. Välillä on kahesta toinen ylempänä ja välillä toinen.
http://www.neitokakadu.net/KAUPPA Siinä näkyy heti 5 uusinta (Niitä ilmpotuksia no kuitenki vasta kaks)

Voi luoja, onko meillä php newbie joka on koodaamassa jotain kauppa sovellutusta? Voi tietoturvan kevät.

Olga [11.10.2005 11:42:28]

#

lapm kirjoitti:

Voi luoja, onko meillä php newbie joka on koodaamassa jotain kauppa sovellutusta? Voi tietoturvan kevät.

Näyttää kyllä ihan pelkältä ilmoituspalstalta. Ja vaikka aloittelija olisikin kyseessä, jostainhan sitä on lähdettävä ja tekemällä oppii.

Tontttu [11.10.2005 15:10:02]

#

Ilmoituspalstahan se on. Ja aloittelija oon.
Jotain oon yrittäny tolle tehä, en oo onnistunu saamaan sitä pysymään oikein.

Tontttu [13.10.2005 15:30:04]

#

Niin.. apuja?

Juice [13.10.2005 19:29:21]

#

Validoi koodisi, niin todennäköisesti löydät vian. Lyhemmät rivit helpottaisivat myös ('\n'):

<?php
   echo " <div align=\"center\" class=\"tekstiloota2\">\n";
   echo " <div align=\"left\" class=\"tekstiloota\">\n";

   echo "<a href=\"mailto:$email\">$nimi</a>";
   echo " " . date("d.m.Y H:i", $aika) . "";
   echo "<br><b>Aihe:</b> $aihe\n";
   echo "<br><b>Kuvaus:</b> $viesti <br><br>\n";

   echo "</div>\n</div><br>";
}
?>

Tontttu [13.10.2005 20:44:06]

#

Koitrin tota juttua, tuli vaan punanen teksti "Failed validation".

Muutin tuon lopun, saas nähä et meneeks vielä viestit sekasin..


Sivun alkuun

Vastaus

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

Tietoa sivustosta