Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP tiedostoihin lisääminen

rosie [20.08.2013 18:50:27]

#

Hei, minulla olisi pieni ongelma. Minun pitäisi tehdä äänestyssovellus, PHP-skripti, joka muokkaa tulokset.txt tiedostoa äänestyksen jälkeen niin, että äänestetyn ehdokkaan äänimäärää on kasvatettu yhdellä. Ohjelman pitää lopuksi tulostaa näytölle annettujen äänien yhteenlaskettu lukumäärä juuri annettu ääni mukaan lukien. Tällä hetkellä ohjelma laskee ne äänet, jotka tiedostoon on kirjattu (yht 29 kpl) mutta ei lisää annettua ääntä mukaan. Ohjelman pitäisi siis tulostaa lopuksi "Ääniä annettu yhteensä: 30 kappaletta."

Koodini näyttää tältä:

<?php

$ehdokas = $_GET["ehdokas"];
$tulokset = file("tulokset.txt");

foreach ($tulokset as $rivi)
{
    $osat = explode("|", $rivi);
    $aani = $aani + $osat[1];
}

if ($ehdokas == 1)
{
   $aani++;
}
elseif ($ehdokas == 2)
{
    $aani++;
}
elseif ($ehdokas == 3)
{
    $aani++;
}
elseif ($ehdokas == 4)
{
    $aani++;
}
elseif ($ehdokas == 5)
{
    $aani++;
}

echo "Ääniä annettu yhteensä: $aani kappaletta.";

?>

Tiedoston sisältö on tällainen:
1|2
2|6
3|8
4|3
5|10

Lisäys: Täydennän vielä sen verran, että viimeisen rivin pitäisi siis muuttua tiedostoon 5|11 :sta tuon läpiajettavan testin perusteella :)

Teuro [20.08.2013 19:21:51]

#

Aivan täydellinen tämä ei ole, mutta lisää oikeaan kohtaan äänen.

<?php
$ehdokas = isset($_GET['ehdokas']) ? $_GET['ehdokas'] : 0;
$ehdokkaat = Array();

$aanet = file("tulokset.txt");
$aanimaara = 0;

foreach($aanet AS $rivi) {
    $data = explode("|", $rivi);
    $ehdokkaat[(int)$data[0]] = (int)$data[1];

    $aanimaara += $ehdokkaat[$data[0]];
}

if ($ehdokas > 0) {
    $ehdokkaat[$ehdokas] += 1;
} else {
    echo "<p>Ei valittua ehdokasta näytetään kokonaisäänimäärä</p>";
}

echo "<p>Ääniä annettu yhteensä: {$aanimaara} kappaletta.</p>";
echo "<p>Jakauma eri ehdokkaille</p>";

echo "<ul>";

foreach ($ehdokkaat AS $ehdokas => $aanet) {
    echo "<li>{$ehdokas} {$aanet}</li>";
}

echo "</ul>";

Huomaathan, että tässä ei tallenneta mitään tiedostoon, mutta et sellaista pyytänytkään. Mikäli ehdokasta ei ole valittu (tai se on 0), niin tulos on mitä tiedostosta löytyy.

Lisäksi tulokset ovat jokaiselle ehdokkaalle valmiina taulukossa.

qeijo [21.08.2013 17:26:48]

#

Ehdokkaat taulukon serialisointi/deserialisointi tiedostoon olisi selkeämpi vaihtoehto.

$ehdokkaat = unserialize(file_get_contents("tulokset.txt"));

$aanimaara = array_sum($ehdokkaat);

//etc..

Lebe80 [22.08.2013 11:08:17]

#

qeijo kirjoitti:

deserialisointi...

unserialize();

Vähän kuin eräällä foorumilla puhuttiin sovellusten deinstalloinnista.

qeijo [22.08.2013 11:48:33]

#

Lebe80 kirjoitti:

qeijo kirjoitti:

deserialisointi...

unserialize();

Vähän kuin eräällä foorumilla puhuttiin sovellusten deinstalloinnista.

Wikipedia kirjoitti:

This process of serializing an object is also called deflating or marshalling an object. The opposite operation, extracting a data structure from a series of bytes, is deserialization (which is also called inflating or unmarshalling).

Deserialization on siis ihan yleisesti käytetty termi.
http://lmgtfy.com/?q=deserialize object

Lisäksi esittämäsi sana deinstall esintyy mm. Oxfordin sanakirjassa.

http://oxforddictionaries.com/definition/english/deinstall:

Definition of deinstall in English

deinstall
(also deinstal)
verb (deinstalls or deinstals, deinstalling, deinstalled)
[with object]

remove (an application or file) from a computer.

Derivatives

deinstallation
noun
deinstaller
noun

Vähän kuin: debunking

de - bunk - ing: To expose or ridicule the falseness, sham, or exaggerated claims off some one else.

Tässä tapauksessa sinun.

Lebe80 [22.08.2013 13:51:20]

#

No kyllä mä nyt saakeli tiedän, et se on käytössä oleva sana, mut jos kerran funktio on unserialize, niin kai sä nyt puhut sit samalla termillä!

http://www.urbandictionary.com/define.php?term­=deinstall:

Deinstall
A just more awesomer replacement for uninstall.

qeijo [22.08.2013 20:04:02]

#

No sitten saakeli.

Vastaus

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

Tietoa sivustosta