Elikkäs oon nyt opetellut PHP:tä ja sain sillä nyt jotain aikaiseksikin, mutta en kokonaan. Tarkoituksena olisi saada sivustolle sellainen "tilastokone", jolla voi merkitä otteluiden tulokset ja se antaa tarvittavat pisteet sarjataulukkoon (voitto: 3p, tasapeli: 1p, tappio: 0p), sarjataulukko myös päivittyisi sen mukaan, eli eniten pisteitä oleva joukkue ylimpänä jne. Viimeisimmät ottelut näkyisivät myös etusivulla.
Itse olen saanut aikaan sen verran, että valikosta valitaan joukkue ja maalien määrä ja se tulos näkyy seuraavalla sivulla:
tilastokone.php
<form action="ottelut.php" method="get"> <b>Kotijoukkue:</b><br> <select name="kotijoukkue"> <option value="Kuolema">Kuolema</option> <option value="SSK">SSK</option> <option value="Conservation">Conservation</option> <option value="Rangers">Rangers</option> <option value="Lihapullat">Lihapullat</option> </select> <select name="kotitulos"> <option value="0">0</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> </select> <br><br> <b>Vierasjoukkue:</b><br> <select name="vierasjoukkue"> <option value="Kuolema">Kuolema</option> <option value="SSK">SSK</option> <option value="Conservation">Conservation</option> <option value="Rangers">Rangers</option> <option value="Lihapullat">Lihapullat</option> </select> <select name="vierastulos"> <option value="0">0</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> </select> <br><br> <input type="submit"> </form>
ottelut.php
<html> <body> <a href=tilastokone.php>Lisää uusi ottelu</a> <br> <br> <br> <b>Viimeisimmät ottelut:</b><br> </body> </html> <?php //skripti näyttää ottelun tuloksen ja antaa sen mukaan oikeat pisteet $koti = $_GET['kotijoukkue']; $vieras = $_GET['vierasjoukkue']; $kotitulos = $_GET['kotitulos']; $vierastulos = $_GET['vierastulos'];
Minne tallennat nuo tilastotiedot ja mihin enimmäkseen apua tarvitset?
Niin siis tarvisin apuja ihan siihen, että miten tuollaista kannattaisi lähteä toteuttamaan. Minne nuo tilastotiedot olisi järkevintä tallentaa?
MySQL:äänhän ne on kätevintä tallentaa. Varmasti löytyy monen monta hyvää opasta ihan googlettamalla "MySQL PHP opas". Mureakuhasta ainakin löytyy hyvä opas alkuun pääsemiseen.
Ihailen ainakin koodailujesi aihetta :)
Ohi menee, mutta sattui tuosta koodista silmään tällainen:
<option value="Kuolema>Kuolema</a>">Kuolema</option>
Epäilläkseni valuessa vähän ekstraa.
Tulokset voi tallentaa joko tiedostoon tai tietokantaan.
Yksi ratkaisu on tallentaa tulokset sellaisenaan tiedostoon:
<?php $tied = fopen("lista.txt", "a"); fwrite($tied, "$koti\r\n"); fwrite($tied, "$vieras\r\n"); fwrite($tied, "$kotitulos\r\n"); fwrite($tied, "$vierastulos\r\n"); fclose($tied); ?>
Nyt jos Rangers voittaa Kuoleman 2 - 0 ja Conservation voittaa SSK:n 1 - 0, tiedostoon lista.txt ilmestyvät nämä rivit:
Kuolema Rangers 0 2 Conservation SSK 1 0
Sitten pitää vielä toisessa PHP-tiedostossa muodostaa tiedoston lista.txt perusteella halutut tilastot. Tässä on vähän mallia:
<?php // luetaan tiedoston rivit taulukkoon $rivit = file("lista.txt"); // käsitellään taulukosta neljä riviä kerrallaan for ($i = 0; $i < count($rivit); $i += 4) { $koti = $rivit[$i]; $vieras = $rivit[$i + 1]; $kotitulos = $rivit[$i + 2]; $vierastulos = $rivit[$i + 3]; // lisätään yhden pelin tiedot taulukkoon $ottelut[] = array($koti, $vieras, $kotitulos, $vierastulos); // lasketaan joukkueiden pisteitä taulukossa if ($kotitulos > $vierastulos) { $pisteet[$koti] += 3; } if ($vierastulos > $kotitulos) { $pisteet[$vieras] += 3; } if ($kotitulos == $vierastulos) { $pisteet[$koti]++; $pisteet[$vieras]++; } } // otetaan kunkin joukkueen pisteet taulukkoon foreach ($pisteet as $joukkue => $tulos) { $pistelista[] = array($tulos, $joukkue); } // järjestetään pisteet sisältävä taulukko rsort($pistelista); echo "<h1>Pistetilanne:</h1>"; echo "<table border>"; // näytetään kaikkien joukkueiden pisteet foreach ($pistelista as $tiedot) { echo "<tr><td>" . $tiedot[1] . "</td><td>" . $tiedot[0] . "</td></tr>"; } echo "</table>"; echo "<h1>Uusimmat ottelut:</h1>"; echo "<table border>"; // näytetään 5 uusinta peliä for ($i = count($ottelut) - 1; $i >= 0 && $i >= count($ottelut) - 5; $i--) { $tiedot = $ottelut[$i]; echo "<tr><td>" . join("</td><td>", $tiedot) . "</td></tr>"; } echo "</table>"; ?>
Tarvitaan siis kolme PHP-sivua: sivu, jonka kautta voi lähettää pelin tiedot (nykyinen tilastokone.php), sivu, joka tallentaa lähetetyt tiedot tiedostoon (nykyinen ottelut.php:n loppuosa), sekä sivu, joka näyttää tilastot (nykyinen ottelut.php:n alkuosa).
Tiedostoja käyttäessä täytyy vielä muistaa, että jos tiedostoon pitää kirjoittaa (niin kuin nyt pitää), tiedostoon täytyy olla kirjoitusoikeus. Käytännössä tämä tarkoittaa, että ennen skriptin käyttöä täytyy luoda tyhjä tiedosto lista.txt sekä antaa sille sopiva chmod-arvo.
En keksinyt miten saisi siihen sarjataulukkoon valmiiksi joukkueet 0 pisteellä, tuo sitten lisäisi siihen pisteet otteluiden mukaan?
Kirjoita tiedoston alkuun jotain tällaista:
<?php $pisteet["Kuolema"] = 0; $pisteet["SSK"] = 0; // jne. ?>
Muuta myös ensimmäisen for-silmukan alussa viittaukset $rivit[...]
muotoon trim($rivit[...])
.
Antin tapaa, mutta jokaisella joukkueella on oma id-numero ja tämän samaisen id:n kanssa pelaillaan myöhemmin. Tällöin joukkueen nimiin voi tehdä suht'helposti muutoksia.
Itsekin joskus tein pallopeleille tilastosivun (ja itseasiassa nytkin on yksi sivusto tekeillä, kunhan vain saisi sen sellaiseen kuntoon että kehtaisi näyttää)
<mainos title=upeaakin upeampi ja ennen kaikkea "moderni" sivusto>
http://www.terolepisto.net/salibandy/_index.php
</mainos>
edit:
Itseasiassa tuossa omassa sivustossani oli ihan suhteellisen kelvollinen hallinta, josta pystyi muuttamaan otteluiden joukkueita ja niiden mukaan pystyi päivittämään lopputuloksia ja kone laski pisteet sen mukaan.
tilastot.php
<?php // luetaan tiedoston rivit taulukkoon $rivit = file("lista.txt"); // käsitellään taulukosta neljä riviä kerrallaan for ($i = 0; $i < count($rivit); $i += 4) { $koti = $rivit[$i]; $kotitulos = $rivit[$i + 1]; $vierastulos = $rivit[$i + 2]; $vieras = $rivit[$i + 3]; // lisätään yhden pelin tiedot taulukkoon $ottelut[] = array($koti, $kotitulos, $vierastulos, $vieras); // lasketaan joukkueiden pisteitä taulukossa if ($kotitulos > $vierastulos) { $pisteett[$koti] += 3; $voitott[$koti] += 1; $pelitt[$koti] += 1; $pelitt[$vieras] += 1; } if ($vierastulos > $kotitulos) { $pisteett[$vieras] += 3; $voitott[$vieras] += 1; $pelitt[$koti] += 1; $pelitt[$vieras] += 1; } if ($kotitulos == $vierastulos) { $pisteett[$koti]++; $pisteett[$vieras]++; $pelitt[$koti] += 1; $pelitt[$vieras] += 1; } } // otetaan kunkin joukkueen pisteet taulukkoon foreach ($pelitt as $joukkue => $pelit) foreach ($voitott as $joukkue => $voitot) foreach ($pisteett as $joukkue => $pisteet) { $pistelista[] = array($joukkue, $pelit, $voitot, $pisteet); } // järjestetään pisteet sisältävä taulukko rsort($pistelista); echo "Sarjataulukko:"; echo "<table border=0>"; echo "<tr><td><b>Joukkue</b></td><td><b>O</b></td><td><b>V</b></td><td><b>P</b></td></tr>"; // näytetään kaikkien joukkueiden pisteet foreach ($pistelista as $tiedot) { echo "<tr><td>" . $tiedot[0] . "</td><td>" . $tiedot[1] . "</td>" . "<td>" . $tiedot[2] . "</td>" . "<td>" . $tiedot[3] . "</td></tr>"; } echo "</table>"; echo "<br>"; echo "<br>"; echo "Uusimmat ottelut:"; echo "<table border=0>"; // näytetään 5 uusinta peliä for ($i = count($ottelut) - 1; $i >= 0 && $i >= count($ottelut) - 5; $i--) { $tiedot = $ottelut[$i]; echo "<tr><td>" . join("</td><td>", $tiedot) . "</td></tr>"; } echo "</table>"; ?> <html> <body> <br> <br> <br> <a href=tilastokone.php>Lisää uusi ottelu</a> </body> </html>
ottelut.php
<?php $tied = fopen("lista.txt", "a"); fwrite($tied, "$kotijoukkue\r\n"); fwrite($tied, "$kotitulos\r\n"); fwrite($tied, "$vierastulos\r\n"); fwrite($tied, "$vierasjoukkue\r\n"); fclose($tied); ?> <html> <body> <a href=tilastot.php>Tästä tilastoihin</a> </body> </html>
Nyt kun mulla on tuolla tavalla ja lista.txt:ssä lukee näin:
SSK 3 0 Kuolema
Silloin se merkkaa sarjataulukkoon SSK:n 2 kertaa ja Kuolema jää kokonaan
merkkaamatta, tuo ongelma tuli sen jälkeen, kun laitoin ton merkkaamaan
myös otteluiden määrät, voittojen määrät ja pisteiden määrät.
Oon nyt varmaan tehny taas jonkun mokan tai jotain jää puuttumaan koodista?
Aihe on jo aika vanha, joten et voi enää vastata siihen.