Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Tulostus ryhmiteltynä tietyn sarakkeen mukaan

Sivun loppuun

merlin [20.01.2015 09:38:45]

#

Tulostan jälleen kerran hevosten kilpailutuloksia kilpailut nimisestä taulusta. Ongelmana on, että haluaisin tulostaa kilpailut iän mukaan. Kilpailut taulu näyttää tältä:

- kilpailut
- id
- hevos_id (= linkitys hevoset -tauluun)
- pvm (= kisapäivä)
- ika (= hevosen ikä kilpailupäivänä, yksinkertainen numero, esim. 2)
- paikka
- laji (= ravi, este, koulu)
- jaos
- lahto (= ravilähtö)
- sija (= hevosen sijoitus kisoissa)
- osallistujat (= osallistujien kokonaismäärä lähdössä)
- muuta (= sisältää ravihevosilla ajan)
- voittosumma (voitettu rahasumma numerona, ei € mukana)

Tarkoitus siis tulostaa vuodet, jolta hevosella on kisoja. 8-vuotiaalla hevosella voi olla tuloksia esimerkiksi 2-, 3-, 5- ja 7-vuotiskausilta (ei siis kaikilta aina välttämättä). Ikäotsikkoa ei tulosteta jos tuloksia siltä vuodelta ei ole.

Kilpailukalenteri näyttää nyt tältä html-muodossa:

<table class="kilpailut">
<thead>
<tr>
<th class="tb1" width="20%">Kisapäivä/date</th>
<th class="tb1" width="25%">Paikka/organizer</th>
<th class="tb1" width="25%">Lähtö/race</th>
<th class="tb1" width="10%">Sija/placing</th>
<th class="tb1" width="20%">Muuta/other</th>
</tr>
<tr><th class="tb3" colspan="5">1-vuotias</th></tr>
</thead>
<tbody>
<tr>
<td class="tb2">1.1.2015</td>
<td class="tb2">järjestäjä</td>
<td class="tb2">lähtö (jaos)</td>
<td class="tb2">0/0</td>
<td class="tb2">aika, voittosumma</td>
</tr>
</tbody>
<tr><th class="tb3" colspan="5">2-vuotias</th></tr>
</thead>
<tbody>
<tr>
<td class="tb2">1.1.2015</td>
<td class="tb2">järjestäjä</td>
<td class="tb2">lähtö (jaos)</td>
<td class="tb2">0/0</td>
<td class="tb2">aika, voittosumma</td>
</tr>
</tbody>
</table>

Tältä näyttää tällähetkellä yksinkertainen tulostus ilman ikäluokkiin jakoa:

$kysely = $yhteys->prepare("SELECT *, DATE_FORMAT(pvm,'%d.%m.%Y') AS oikeapaiva FROM kilpailut WHERE hevos_id=? ORDER BY pvm DESC");
// suoritetaan kysely
$kysely->execute(array($id));

while ($rivi = $kysely->fetch()) {
echo "<tr>";
echo "<td class=\"tb2\">" . $rivi["oikeapaiva"] . "</td>";
echo "<td class=\"tb2\">" . $rivi["paikka"] . "</td>";
echo "<td class=\"tb2\">" $rivi["lahto"] . " (" . $rivi["jaos"] . ")</td>";
echo "<td class=\"tb2\">";
if ($rivi["sija"] <> 0) {echo $rivi["sija"] . "/" . $rivi["osallistujat"];}
else {echo "hyll";}
echo "</td>";
echo "<td class=\"tb2\">" . $rivi["muuta"];
if ($rivi["voittosumma"] <> 0) {echo ", " . number_format($rivi["voittosumma"], 2, '.', ',') . "€";}
else {echo "";}
echo "</td></tr>";
}

AkeMake [20.01.2015 18:45:48]

#

Hae tietokannasta ensisijaisesti suoraan lajiteltuna sen hevosen iän mukaan "ORDER BY ika, pvm DESC".

Sen jälkeen voit joka kierroksella tarkistaa onko hevosen ikä ollut tässä kilpailussa sama kuin edellisellä kerralla ja jos ei niin teet tarvittavat toimenpiteet. Eli jotenkin tähän tyyliin (en tarkistanut toimiiko):

$kysely = $yhteys->prepare("SELECT *, DATE_FORMAT(pvm,'%d.%m.%Y') AS oikeapaiva FROM kilpailut WHERE hevos_id=? ORDER BY ika, pvm DESC");
// suoritetaan kysely
$kysely->execute(array($id));
echo "<tbody>";
while ($rivi = $kysely->fetch()) {
   if (!isset($ika) || (isset($ika) && $ika != $rivi["ika"])) {
      $ika = $rivi["ika"];
      echo "<tr>";
      echo "<th colspan='5'>" . $ika . "-vuotias</th>";
      echo "<tr>";
   }
   echo "<tr>";
   echo "<td class=\"tb2\">" . $rivi["oikeapaiva"] . "</td>";
   echo "<td class=\"tb2\">" . $rivi["paikka"] . "</td>";
   echo "<td class=\"tb2\">" $rivi["lahto"] . " (" . $rivi["jaos"] . ")</td>";
   echo "<td class=\"tb2\">";
   echo ($rivi["sija"] <> 0) ? $rivi["sija"] . "/" . $rivi["osallistujat"] : "hyll";
   echo "</td>";
   echo "<td class=\"tb2\">" . $rivi["muuta"];
   echo ($rivi["voittosumma"] <> 0) ? ", " . number_format($rivi["voittosumma"], 2, '.', ',') . "€" : "";
   echo "</td></tr>";
}
echo "</tbody>";

p99o [20.01.2015 19:48:10]

#

merlin kirjoitti:

ika (= hevosen ikä kilpailupäivänä, yksinkertainen numero, esim. 2)

Syntymäpäivän laittaminen, ja siitä laskeminen voisi olla järkevämpää.

Teuro [20.01.2015 20:09:40]

#

p99o kirjoitti:

merlin kirjoitti:

ika (= hevosen ikä kilpailupäivänä, yksinkertainen numero, esim. 2)

Syntymäpäivän laittaminen, ja siitä laskeminen voisi olla järkevämpää.

Ja tämä syntypäivä siis hevostauluun, eikä kilpailutauluun. Tulostus ei mene rikki, koska ikä lasketaan kilpailupäivän mukaan, eikä nykyhetken mukaan. Tuollainen hevosen ikä on täysin turha kenttä.

merlin [20.01.2015 22:20:33]

#

Kiitokset kokeilen näitä huomenna ja palailen.

Ikä on sen takia, että hevoset eivät ikäänny tasaisesti. Syntymäpäivästä laskeminen ei toimi. Olisi tarkoitus jatkossa alkaa ikäännyttää heppoja tasaisesti, mutta sitten täytyisi eritellä vanhat ja uudet hepat. Nyt iän lisääminen tauluun on toiminut tosi hyvin :)

makumaku [20.01.2015 22:49:31]

#

merlin kirjoitti:

Olisi tarkoitus jatkossa alkaa ikäännyttää heppoja tasaisesti

Se mitä itse olen biologiasta oppinut niin kaikki hevoset ikääntyvät aina tasaisesti, joka päivä ne ikääntyvät noin yhden päivän lisää. Joten hevosen iän laskeminen syntymäajasta ja kilpailupäivästä onnistuu takuuvarmasti.

merlin [21.01.2015 10:30:29]

#

Makumaku, Tämä ei ole tulossa oikeille hevosille käyttöön vaan virtuaalihevosille :) "pelissä" hevoset ikääntyvät usein monta virtuaalivuotta yhden reaalivuoden aikana. Mun hepat ikääntyy kisamenestyksen mukaan.

--

Kiitos AkeMake, sain tolla homman toimiin ihan täydellisesti :)!

uusia ongelmia

Minulla on stat.php, jossa koodi kerää hevoselle statistiikan sen kilpailutuloksista tällaiseen muotoon= 25:6-5-4-3-2
25 = kilpailut yhteensä
6 = voitot
5 = 2. sija
4 = 3. sija
3 = 4. sija
2 = 5. sija
Huonompia sijoja ei merkitä erikseen.

Hevosten sivuille tuon linkitän ensin perustietoihin yksinkertaisesti includella, tuo id on määritelty hevosen sivulla.

Haluaisinkin nyt tuon statistiikan esiintymään myös kahdessa muussa tapauksessa:
1. hevosen sivuille kisakalenteriin (joka yllä), joka ikävuosiluokan kisojen statistiikka esitetty kisakalenterissa vuosiotsikon rinnalla:

<table class="kilpailut">
<thead>
<tr>
<th class="tb1" width="20%">Kisapäivä/date</th>
<th class="tb1" width="25%">Paikka/organizer</th>
<th class="tb1" width="25%">Lähtö/race</th>
<th class="tb1" width="10%">Sija/placing</th>
<th class="tb1" width="20%">Muuta/other</th>
</tr>
<tr><th class="tb3" colspan="5">1-vuotias (TÄNNE STATISTIIKKA)</th></tr>
</thead>
....

2. hevoslista.php nimiselle sivulle, johon listaan kaikki hevoset taulukkoon. Tällä hetkellä taulukko näyttää tältä:
hevosen nimi | rotu | sukupuoli | statistiikka | id, muokkaa
hevoslista.php taulukkokoodi:

<table>
<thead>
<tr><th class="tb3" colspan="5">Lämminveriset</td></tr>
</thead>
<tbody>
<?php // valmistetaan kysely
$kysely = $yhteys->prepare("SELECT id, nimi, koodinimi, rotu_lyhenne, rotu, sukupuoli, ika, kilpailutaso, kilpailumatka, rata FROM hevoset WHERE talli='ravi' AND kaytto='kisa' AND rotu_lyhenne IN ('lv', 'am-lv', 'ransk-lv', 'am-ransk-lv') ORDER BY rotu, ika");
// suoritetaan kysely
$kysely->execute(array());

// n&auml;ytet&auml;&auml;n kyselyn tulokset taulukossa

// k&auml;sitell&auml;&auml;n tulostaulun rivit yksi kerrallaan
while ($rivi = $kysely->fetch()) {

 echo "<tr><td class=\"tb2\"><strong><a href=\"horse2.php?name=" . $rivi["koodinimi"] . "\">" . $rivi["nimi"] . "</a></strong></td>";
 echo "<td class=\"tb2\">" . $rivi["rotu"] . "</td>";
 echo "<td class=\"tb2\">" . $rivi["sukupuoli"] . "</td>";
 echo "<td class=\"tb2\">TÄNNE STATISTIIKKA</td>";
 echo "<td class=\"tb2\">" . $rivi["id"] . ", <a href=\"http://waldorff.thefakepony.com/admin/muokkaa_ravi.php?name=" . $rivi["koodinimi"] . "\">muokkaa</a>" . "</td></tr>";

}

?>

</tbody>
</table>

Koodi näyttää teistä tällä hetkellä varmaan ihan kamalalta, mutta toimii mulla joten en ole jaksanut alkaa sitä siistimään tai muuttamaan.

stat.php:

// valmistetaan kysely
$kysely = $yhteys->prepare("SELECT COUNT(sija) FROM kilpailut WHERE hevos_id=?;");
// suoritetaan kysely
$kysely->execute(array($id));

// näytetään kyselyn tulokset taulukossa

// käsitellään tulostaulun rivit yksi kerrallaan
while ($rivi = $kysely->fetch()) {
	echo $rivi["COUNT(sija)"] . ":";
}

// valmistetaan kysely
$kysely = $yhteys->prepare("SELECT COUNT(sija) FROM kilpailut WHERE sija = '1' AND hevos_id=?;");
// suoritetaan kysely
$kysely->execute(array($id));

// näytetään kyselyn tulokset taulukossa

// käsitellään tulostaulun rivit yksi kerrallaan
while ($rivi = $kysely->fetch()) {
	echo $rivi["COUNT(sija)"] . "-";
}

// valmistetaan kysely
$kysely = $yhteys->prepare("SELECT COUNT(sija) FROM kilpailut WHERE sija = '2' AND hevos_id=?;");
// suoritetaan kysely
$kysely->execute(array($id));

// näytetään kyselyn tulokset taulukossa

// käsitellään tulostaulun rivit yksi kerrallaan
while ($rivi = $kysely->fetch()) {
	echo $rivi["COUNT(sija)"] . "-";
}

// valmistetaan kysely
$kysely = $yhteys->prepare("SELECT COUNT(sija) FROM kilpailut WHERE sija = '3' AND hevos_id=?;");
// suoritetaan kysely
$kysely->execute(array($id));

// näytetään kyselyn tulokset taulukossa

// käsitellään tulostaulun rivit yksi kerrallaan
while ($rivi = $kysely->fetch()) {
	echo $rivi["COUNT(sija)"] . "-";
}

// valmistetaan kysely
$kysely = $yhteys->prepare("SELECT COUNT(sija) FROM kilpailut WHERE sija = '4' AND hevos_id=?;");
// suoritetaan kysely
$kysely->execute(array($id));

// näytetään kyselyn tulokset taulukossa

// käsitellään tulostaulun rivit yksi kerrallaan
while ($rivi = $kysely->fetch()) {
	echo $rivi["COUNT(sija)"];
}

// valmistetaan kysely
$kysely = $yhteys->prepare("SELECT COUNT(sija) FROM kilpailut WHERE sija = '5' AND hevos_id=?;");
// suoritetaan kysely
$kysely->execute(array($id));

// näytetään kyselyn tulokset taulukossa

// käsitellään tulostaulun rivit yksi kerrallaan
while ($rivi = $kysely->fetch()) {
	echo  "-" . $rivi["COUNT(sija)"];

}

Ongelmana siis ilmeisesti include. Miten saisin tuon stat.php toimimaan myös listoissa, kun nyt omana itsenään se toimii hyvin kun se tulostetaan vain kerran yhden hevosen sivuille :P Määritin tuon hevos_idin kyllä molemmissa samaksi kuin hevostaulun id.

merlin [22.01.2015 14:11:17]

#

Edelliset ongelmat edelleen ratkaisematta ja jonkun takia tällainen uudelleenohjaus ei toimi? Onko väärällä sivulla (lomakkeenkäsittelijässä) vai mikä ongelma?

tiedosto.php

include("config.php");

ini_set("display_errors", 1);
ini_set("error_reporting", E_ALL | E_STRICT);


$kysely = $yhteys->prepare("SELECT koodinimi FROM hevoset WHERE koodinimi = ?");
$kysely->execute(array($_GET["name"]));

$namet = $kysely->fetchAll(PDO::FETCH_COLUMN, 0);


$nimi = $_GET["name"];


$kysely = $yhteys->prepare("SELECT id, koodinimi FROM hevoset WHERE koodinimi=?");

$kysely->execute(array($nimi));

while ($rivi = $kysely->fetch()) {
$id = $rivi["id"] ;
}

if (get_magic_quotes_gpc()) {
    $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
    while (list($key, $val) = each($process)) {
        foreach ($val as $k => $v) {
            unset($process[$key][$k]);
            if (is_array($v)) {
                $process[$key][stripslashes($k)] = $v;
                $process[] = &$process[$key][stripslashes($k)];
            } else {
                $process[$key][stripslashes($k)] = stripslashes($v);
            }
        }
    }
    unset($process);
}

//avataan yhteys kantaan
   mysql_connect('hosti', 'käyttäjä', 'salasana');
mysql_query ("set character_set_client='utf8'");
   mysql_select_db('taulu');

   //syötetään tieto kantaan
   mysql_query("UPDATE hevoset SET
nimi='".mysql_real_escape_string($_POST['nimi'])."',
koodinimi='".mysql_real_escape_string($_POST['koodinimi'])."',
rekisterinumero='".mysql_real_escape_string($_POST['rekisterinumero'])."',
rotu='".mysql_real_escape_string($_POST['rotu'])."',
rotu_lyhenne='".mysql_real_escape_string($_POST['rotu_lyhenne'])."',
sukupuoli='".mysql_real_escape_string($_POST['sukupuoli'])."',
sakakorkeus='".mysql_real_escape_string($_POST['sakakorkeus'])."',
syntymaaika='".mysql_real_escape_string($_POST['syntymaaika'])."',
syntymaaika_muu='".mysql_real_escape_string($_POST['syntymaaika_muu'])."',
ika='".mysql_real_escape_string($_POST['ika'])."',
vari='".mysql_real_escape_string($_POST['vari'])."',
painotus='".mysql_real_escape_string($_POST['painotus'])."',
kilpailutaso='".mysql_real_escape_string($_POST['kilpailutaso'])."',
kilpailumatka='".mysql_real_escape_string($_POST['kilpailumatka'])."',
kaytto='".mysql_real_escape_string($_POST['kaytto'])."',
talli='".mysql_real_escape_string($_POST['talli'])."',
rata='".mysql_real_escape_string($_POST['rata'])."',
koulu='".mysql_real_escape_string($_POST['koulu'])."',
este='".mysql_real_escape_string($_POST['este'])."',
kentta='".mysql_real_escape_string($_POST['kentta'])."',
valjakko='".mysql_real_escape_string($_POST['valjakko'])."',
hunter='".mysql_real_escape_string($_POST['hunter'])."',
equitation='".mysql_real_escape_string($_POST['equitation'])."',
kasvattaja='".mysql_real_escape_string($_POST['kasvattaja'])."',
maahantuoja='".mysql_real_escape_string($_POST['maahantuoja'])."',
rotu_en='".mysql_real_escape_string($_POST['rotu_en'])."',
vari_en='".mysql_real_escape_string($_POST['vari_en'])."',
sakakorkeus_en='".mysql_real_escape_string($_POST['sakakorkeus_en'])."',
luonne='".mysql_real_escape_string($_POST['luonne'])."',
i='".mysql_real_escape_string($_POST['i'])."',
i_l='".mysql_real_escape_string($_POST['i_l'])."',
ii='".mysql_real_escape_string($_POST['ii'])."',
ii_l='".mysql_real_escape_string($_POST['ii_l'])."',
iii='".mysql_real_escape_string($_POST['iii'])."',
iie='".mysql_real_escape_string($_POST['iie'])."',
ie='".mysql_real_escape_string($_POST['ie'])."',
ie_l='".mysql_real_escape_string($_POST['ie_l'])."',
iei='".mysql_real_escape_string($_POST['iei'])."',
iee='".mysql_real_escape_string($_POST['iee'])."',
e='".mysql_real_escape_string($_POST['e'])."',
e_l='".mysql_real_escape_string($_POST['e_l'])."',
ei='".mysql_real_escape_string($_POST['ei'])."',
ei_l='".mysql_real_escape_string($_POST['ei_l'])."',
eii='".mysql_real_escape_string($_POST['eii'])."',
eie='".mysql_real_escape_string($_POST['eie'])."',
ee='".mysql_real_escape_string($_POST['ee'])."',
ee_l='".mysql_real_escape_string($_POST['ee_l'])."',
eei='".mysql_real_escape_string($_POST['eei'])."',
eee='".mysql_real_escape_string($_POST['eee'])."',
sukuselvitys='".mysql_real_escape_string($_POST['sukuselvitys'])."',
copyt='".mysql_real_escape_string($_POST['copyt'])."',
kuva1='".mysql_real_escape_string($_POST['kuva1'])."',
kuva2='".mysql_real_escape_string($_POST['kuva2'])."',
kuva3='".mysql_real_escape_string($_POST['kuva3'])."',
kuva4='".mysql_real_escape_string($_POST['kuva4'])."',
kuva5='".mysql_real_escape_string($_POST['kuva5'])."',
jalostusinfo='".mysql_real_escape_string($_POST['jalostusinfo'])."'
WHERE id='$id'");

   header("Location: http://osoite.fi/sivu.php");
	echo mysql_error();

Antaa errorin tosta tokavikasta rivistä, joka on toi header?

"Warning: Cannot modify header information - headers already sent by (output started at /home/.../tiedosto.php:2) in /home/.../tiedosto.php on line 112"

Grez [22.01.2015 14:21:36]

#

https://www.ohjelmointiputka.net/keskustelu/19348-session-start-headers-already-sent/sivu-1

merlin [22.01.2015 15:57:06]

#

Grez, kiitos - olin taas tietenkin googlannut kaikella muulla kuin itse virhe-lauseella :P Toimii!

Vielä tuo stat.php tulostaminen noihin uusiin konteksteihin häikkää :/

merlin [25.01.2015 11:34:18]

#

Löytyisikö apua tohon statistiikan tulostamiseen apua :)?

Grez [25.01.2015 11:39:12]

#

Oliko se mihin tarvittiin apua siis seuraava:

merlin kirjoitti:

Ongelmana siis ilmeisesti include. Miten saisin tuon stat.php toimimaan myös listoissa, kun nyt omana itsenään se toimii hyvin kun se tulostetaan vain kerran yhden hevosen sivuille :P Määritin tuon hevos_idin kyllä molemmissa samaksi kuin hevostaulun id.

Siis millä tavalla se ei toimi? Virheilmoitus?

Luulisi tuon sinänsä toimivan missä vaan missä $yhteys ja $id on alustettu samalla tavalla.

merlin [26.01.2015 10:25:21]

#

Grez, en ole nyt varma mitä tarkoitat $yhteyden alustamisella, mutta ongelmana on se etten tiedä miten tuon statistiikan tulokset saisi tulostettua keskelle tuon toisen kyselyn tulosten tulostamista. (stat.php:ssä olevat kyselyt ja tulostukset keskelle alla olevaa kyselyä ja tulostusta, voisikohan vielä epäselvemmin selostaa?)

Edellinen yhteys, kysely ja tulostushan keskeytyy kun keskelle tungetaan ihan toiset systeemit, esimerkiksi jos laitan vaan pokkana ton includen tähän (TÄNNE STATISTIIKKA -kohtaan):

<table>
<thead>
<tr><th class="tb3" colspan="5">Lämminveriset</td></tr>
</thead>
<tbody>
<?php // valmistetaan kysely
$kysely = $yhteys->prepare("SELECT id, nimi, koodinimi, rotu_lyhenne, rotu, sukupuoli, ika, kilpailutaso, kilpailumatka, rata FROM hevoset WHERE talli='ravi' AND kaytto='kisa' AND rotu_lyhenne IN ('lv', 'am-lv', 'ransk-lv', 'am-ransk-lv') ORDER BY rotu, ika");
// suoritetaan kysely
$kysely->execute(array());

// n&auml;ytet&auml;&auml;n kyselyn tulokset taulukossa

// k&auml;sitell&auml;&auml;n tulostaulun rivit yksi kerrallaan
while ($rivi = $kysely->fetch()) {

 echo "<tr><td class=\"tb2\"><strong><a href=\"horse2.php?name=" . $rivi["koodinimi"] . "\">" . $rivi["nimi"] . "</a></strong></td>";
 echo "<td class=\"tb2\">" . $rivi["rotu"] . "</td>";
 echo "<td class=\"tb2\">" . $rivi["sukupuoli"] . "</td>";
 echo "<td class=\"tb2\">TÄNNE STATISTIIKKA</td>";
 echo "<td class=\"tb2\">" . $rivi["id"] . ", <a href=\"http://waldorff.thefakepony.com/admin/muokkaa_ravi.php?name=" . $rivi["koodinimi"] . "\">muokkaa</a>" . "</td></tr>";

}

?>

</tbody>
</table>

Toi stat.php täytyisi varmaan saada hoidettua yhdellä kyselyllä, niin sen voisi liittää helposti tohon yllä olevaan kyselyyn lisäämällä vaan toisen taulun, joissa idit on samat (id = hevos_id).

stat.php:

// valmistetaan kysely
$kysely = $yhteys->prepare("SELECT COUNT(sija) FROM kilpailut WHERE hevos_id=?;");
// suoritetaan kysely
$kysely->execute(array($id));

// näytetään kyselyn tulokset taulukossa

// käsitellään tulostaulun rivit yksi kerrallaan
while ($rivi = $kysely->fetch()) {
	echo $rivi["COUNT(sija)"] . ":";
}

// valmistetaan kysely
$kysely = $yhteys->prepare("SELECT COUNT(sija) FROM kilpailut WHERE sija = '1' AND hevos_id=?;");
// suoritetaan kysely
$kysely->execute(array($id));

// näytetään kyselyn tulokset taulukossa

// käsitellään tulostaulun rivit yksi kerrallaan
while ($rivi = $kysely->fetch()) {
	echo $rivi["COUNT(sija)"] . "-";
}

// valmistetaan kysely
$kysely = $yhteys->prepare("SELECT COUNT(sija) FROM kilpailut WHERE sija = '2' AND hevos_id=?;");
// suoritetaan kysely
$kysely->execute(array($id));

// näytetään kyselyn tulokset taulukossa

// käsitellään tulostaulun rivit yksi kerrallaan
while ($rivi = $kysely->fetch()) {
	echo $rivi["COUNT(sija)"] . "-";
}

// valmistetaan kysely
$kysely = $yhteys->prepare("SELECT COUNT(sija) FROM kilpailut WHERE sija = '3' AND hevos_id=?;");
// suoritetaan kysely
$kysely->execute(array($id));

// näytetään kyselyn tulokset taulukossa

// käsitellään tulostaulun rivit yksi kerrallaan
while ($rivi = $kysely->fetch()) {
	echo $rivi["COUNT(sija)"] . "-";
}

// valmistetaan kysely
$kysely = $yhteys->prepare("SELECT COUNT(sija) FROM kilpailut WHERE sija = '4' AND hevos_id=?;");
// suoritetaan kysely
$kysely->execute(array($id));

// näytetään kyselyn tulokset taulukossa

// käsitellään tulostaulun rivit yksi kerrallaan
while ($rivi = $kysely->fetch()) {
	echo $rivi["COUNT(sija)"];
}

// valmistetaan kysely
$kysely = $yhteys->prepare("SELECT COUNT(sija) FROM kilpailut WHERE sija = '5' AND hevos_id=?;");
// suoritetaan kysely
$kysely->execute(array($id));

// näytetään kyselyn tulokset taulukossa

// käsitellään tulostaulun rivit yksi kerrallaan
while ($rivi = $kysely->fetch()) {
	echo  "-" . $rivi["COUNT(sija)"];

}

The Alchemist [26.01.2015 11:16:57]

#

Mä en alun alkaenkaan tajunnut, miksi väkisin halusit tehdä jokaisesta oman kyselynsä.

Lebe80 [26.01.2015 11:51:24]

#

Ihan kuin nuo skriptit vaatisivat jo jonkin sortin oman funktion käyttöä. Toistoa on niin per... perusteellisesti.

Eli vinkkinä: jonkin sortin luuppi, joka kutsuu omaa funktiota.

merlin [26.01.2015 12:13:11]

#

The Alchemist, oon niin avuton, että toi on ainoa jonka sain itse väsättyä :D Olen koittanut minulle täällä aiemmin toiseen tarkoitukseen annettua koodia muokkailla haluamanilaiseksi. Tällä olen siis aiemmin tulostanut aina listan eri vuosien menestyksestä. Oon vaan niin yksinkertainen etten saa tätä muokattua kertomaan kaikkien vuosien yhteistä menestystä.

Nyt siis tulostaa:
2-vuotiskausi :: 15:1-2-3-4-5, 1000€
3-vuotiskausi :: 15:1-2-3-4-5, 1000€
4-vuotiskausi :: ei kisannut
5-vuotiskausi :: 15:1-2-3-4-5, 1000€
6-vuotiskausi :: ei kisannut
jne.

Lisäksi tuo tulostaa turhaan ne vuodet, jolloin ei ole kisannut - niitä ei tarvitsisi tulostaa.

//Haetaan sijoitukset ja voittosummat. Haetaan väh 2 vuoden ikäisenä. Ikää ei tarvitse rajoittaa ylhäältä koska hevonen tuskin on kilpaillut ikäänsä vanhempana
$kysely = $yhteys->prepare('SELECT ika, COUNT(sija) AS kpl, SUM(voittosumma) AS summa FROM kilpailut WHERE hevos_id=? AND ika>=2 GROUP BY ika');
$kysely->execute(array($id));
//Kerätään tulokset taulukkoon
while ($rivi = $kysely->fetch()) {
	$sijoituksia[$rivi['ika']] = $rivi['kpl'];
	$voittosummat[$rivi['ika']] = $rivi['summa'];
}

//Haetaan eritellyt sijoitukset sijoille 1-3
$kysely = $yhteys->prepare('SELECT ika, sija, COUNT(sija) AS kpl FROM kilpailut WHERE hevos_id=? AND ika>=2 AND sija<4 GROUP BY ika, sija');
$kysely->execute(array($id));
//Kerätään tulokset taulukkoon
while ($rivi = $kysely->fetch()) {
	$sijoja[$rivi['ika']][$rivi['sija']] = $rivi['kpl'];
}

//Tulostetaan aiemmin taulukkoon kerätyt. Jos iälle ei ole lainkaan sijoituksia, tulostetaan "Ei sijoituksia"
for ($vuosi = 2; $vuosi <= $ika; $vuosi++) {
	echo "<b>$vuosi-vuotiskausi</b> :: ";
	if (isset($sijoituksia[$vuosi])) {
		echo $sijoituksia[$vuosi] . ':';
		//Näytetään sijataulukon tämän iän sijat 1-3 tai 0 jos arvoa ei ole.
		for ($i=1; $i<5; $i++) {
			echo ( isset($sijoja[$vuosi][$i]) ? $sijoja[$vuosi][$i] : 0 ) . '-';
		}
for ($i=5; $i<6; $i++) {
			echo ( isset($sijoja[$vuosi][$i]) ? $sijoja[$vuosi][$i] : 0 );
		}
		echo ', ' . $voittosummat[$vuosi] . '€<br />';
	} else {
		echo 'ei ole kilpaillut<br />';
	}
}

Lebe80, loopit on mulle hepreaa kuten yltä voi huomata. Ohjelmointiputkan oppaat on luettu pariinkin otteeseen, mutta itse en saa aloitettua mitään - valmiista saan kyllä vähän muokattua.

Kiitos kovasti kun jaksatte auttaa :)

qeijo [26.01.2015 17:03:43]

#

Kantarakenne on pielessä ja mm. tämän takia koko systeemi on huono.

merlin [26.01.2015 17:33:49]

#

qeijo, miten kanta on huono - ei kovin tyhjentävä viesti :/?

Metabolix [26.01.2015 18:15:24]

#

Kilpailutaulussasi on hevos_id, eli tuon perusteella yhteen kilpailuun voi osallistua vain yksi hevonen. Oikea rakenne olisi luultavasti sellainen, että olisi yksi taulu itse kilpailusta ja yksi taulu osallistujista. Kilpailutaulussa olisivat siis kilpailun yleiset tiedot (id, nimi, paikka, aika), ja osallistujataulussa olisivat yksittäisiä osallistujia koskevat tiedot (kilpailu_id, hevonen_id, tulos, mahdollisesti myös sija, palkintosumma ynnä muuta).

merlin [26.01.2015 21:11:25]

#

Metabolix, onko tuo kantarakenne ongelmallinen vain sen takia että sama tieto kertaantuu? Vai onko joku toinenkin syy miksi kannattaisi jakaa kahteen eri tauluun? Tuon on vaan niin hankala (omasta mielestä :D) saada toimimaan tulosten lähetyksen ja tulostamisen kannalta verrattuna tähän. Toki jos joku saisi supernäppärän tulosten lisäämisen edes ideoitua niin voisin kyllä vielä kuvitella kannan rakennetta muuttavani!
Auttaisiko kannan muuttaminen tuossa statistiikassakin vai miksi tuo on nykyisellään niin iso ongelma :D?

Nythän siis tallennan hevosten kilpailutulokset kantaan hevoskohtaisesti. Ensin valitaan valikosta hevonen jolle kisa lisätään ja sitten syötetään niin monta kisaa kuin hevoselle on. Alunperin toimi paremmin näin päin, mutta nyt voisi toimia jo paremmin niin - että lisätään kisa kerrallaan kun monesti tuloksia lisätessä yhdelle hevoselle on tullut vain yksi uusi kisa (jatkuvaa lomakkeen uudelleenlähetystä).

uusikisa.php

<h1>Uusi kisa (ravi)</h1>

<form method="post" action="tiedosto.php" onSubmit="submitonce(this)">

   <p>
   <select size="1" name="id">

   <?php
// valmistetaan kysely
$kysely = $yhteys->prepare("SELECT nimi, id FROM hevoset WHERE talli='ravi' ORDER BY nimi");
// suoritetaan kysely
$kysely->execute(array());

// n&auml;ytet&auml;&auml;n kyselyn tulokset taulukossa

// k&auml;sitell&auml;&auml;n tulostaulun rivit yksi kerrallaan
while ($rivi = $kysely->fetch()) {

echo "<option value=\"" . $rivi["id"] . "\">" . $rivi["nimi"] . "</option>";
}
?>

</select><br />
   <textarea rows="30" cols="110" name="tiedot">ikä++alaisuus++0000-00-00++paikka++lähtö++sija++osallistujat++aika++voittosumma++pisteet</textarea></p>

   <input type="submit" name="submit" value="Lähetä kisoja" />
</form>

tiedosto.php (lomakkeenkäsittelijä)

if (get_magic_quotes_gpc()) {
    $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
    while (list($key, $val) = each($process)) {
        foreach ($val as $k => $v) {
            unset($process[$key][$k]);
            if (is_array($v)) {
                $process[$key][stripslashes($k)] = $v;
                $process[] = &$process[$key][stripslashes($k)];
            } else {
                $process[$key][stripslashes($k)] = stripslashes($v);
            }
        }
    }
    unset($process);
}

//avataan yhteys kantaan
   mysql_connect('hosti', 'käyttäjä', 'salasana');
mysql_query ("set character_set_client='utf8'");
   mysql_select_db('tietokanta');

$id = mysql_real_escape_string($_POST['id']);

   //syötetään tieto kantaan
   $rivit = explode("\n", $_POST['tiedot']);
foreach ($rivit as $rivi) {
    list($ika, $jaos, $pvm, $paikka, $lahto, $sija, $osallistujat, $aika, $voittosumma, $pisteet) = explode('++',$rivi);
    mysql_query("INSERT INTO kilpailut (ika, jaos, pvm, paikka, lahto, sija, osallistujat, muuta, voittosumma, pisteet, hevos_id) VALUES (
    '".mysql_real_escape_string($ika)."',
    '".mysql_real_escape_string($jaos)."',
	'".mysql_real_escape_string($pvm)."',
	'".mysql_real_escape_string($paikka)."',
	'".mysql_real_escape_string($lahto)."',
	'".mysql_real_escape_string($sija)."',
    '".mysql_real_escape_string($osallistujat)."',
    '".mysql_real_escape_string($aika)."',
    '".mysql_real_escape_string($voittosumma)."',
    '".mysql_real_escape_string($pisteet)."',
    '$id'
    )");
	echo mysql_error();
}

qeijo [28.01.2015 10:25:49]

#

merlin kirjoitti:

qeijo, miten kanta on huono - ei kovin tyhjentävä viesti :/?
...
Metabolix, onko tuo kantarakenne ongelmallinen vain sen takia että sama tieto kertaantuu? Vai onko joku toinenkin syy miksi kannattaisi jakaa kahteen eri tauluun?

Suurin ongelma on datan 'integrity'.
Tietokanta* ilman relaatioita, avaimia ja viite-eheyksiä ei voi huolehtia omasta eheydestä.
Lisäksi se on vähintäänkin sekava ja vaikeasti hallinnoitavissa koska data on missä milloinkin jos jossain.

* Kanta jossa on Many-to-Many, Many-to-One, etc. kaltaisia suhteita.

merlin [28.01.2015 11:39:27]

#

qeijo, en ihan oikeasti ole kuin vasta aloittelija tietokantojen ja php:n parissa joten tuo sinun viestisi on täyttä hepreaa :/


Sivun alkuun

Vastaus

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

Tietoa sivustosta