Tervehdys,
Yksinkertainen kysymys yksinkertaiselta ihmiseltä.
Kuinka PHP:lla saadaan tulostettua taulukko mysql-tietokannasta html-taulukkoon
niin, että joka toinen rivi olisi eri värillä sekä jokaisen rivin lopussa olisi
päivitä -nappula tietojen päivittämiseen?
Olettaisin sen olevan kohtalaisen helppo toteuttaa vai olenko ihan hakoteillä?
- AnttiK
<?php # yhdistetään mysql_connect("palvelin", "tunnus", "salasana"); # tehdään haku $r = mysql_query("SELECT * FROM kanta.taulu"); if (!$r) { die("Virhe haussa: ".mysql_error()); } # haetaan tulokset $taulu = array(); while ($rivi = mysql_fetch_assoc($r)) { $taulu[] = $rivi; } if (!count($taulu)) { die("Ei tuloksia."); } # tulostetaan echo "<table>"; # otsikkorivi echo "<thead>"; foreach ($taulu as $rivi) { echo "<tr>"; foreach ($rivi as $sarake => $tyhja) { echo "<th>".htmlspecialchars($sarake)."</th>"; } echo "</tr>\n"; break; # vain yksi rivi! } echo "</thead>"; # sisältö echo "<tbody>"; foreach ($taulu as $rivi) { echo "<tr>"; foreach ($rivi as $sarake) { echo "<td>".htmlspecialchars($sarake)."</td>"; } echo "</tr>\n"; } echo "</tbody>"; echo "</table>"; ?>
Värit saat lisätä itse. Käytä silmukan sisällä laskuria ($i++), laita värit taulukkoon ja ota taulukosta indeksin osoittama väri. Jos värit eivät riitä, voit käyttää indeksinä jakojäännöstä ($i = $i % count($varit)), jolloin taulukkoa kierretään ympäri.
Kiitos ja kumarrus erittäin ripeästä vastauksesta :)
Kokeilenpa samantein..
- Antti
Okei, se toimii jotenkuten :) Tosin tarkoitus oli vain lisätä joka toinen rivi
eri värillä, eg. kuten tämän foorumin jokainen threadi on listattuna...
Seuraava kysymys koskeekin listauksen järjestämistä. Onko ylläolevaan koodiin
kuinka helppo lisätä ominaisuus, joka järjestää halutun sarakkeen esim
aakkosjärjestykseen=?
- Antti
Tuolta PHP-oppaasta poimin:
lainaus:
SELECT * FROM varasto ORDER BY nimi
Järjestelee tietueet nimen mukaan pienimmästä suurimpaan.
SELECT * FROM varasto ORDER BY hinta DESC
Järjestelee tietueet hinnan mukaan suurimmasta pienimpään.
Etköhän tuon avulla osaa tehdä sen :)
Juu ton kyllä hanskasin, mutta kiitoksia :)
Tarkoitin, että valmiissa html-tulosteessa olisi jokaisen
table headerin kohdalla jonkinlainen järjestä -nappula, jolla
saisi tulosteen uuteen järjestykseen. Vai meneekö jo liian vaikeaksi
näinkin "yksinkertaisessa" koodinpätkässä?
- Antti
Voit joko lajitella taulukon JavaScriptilla (jolloin toiminta tietenkin on käyttäjän selaimesta kiinni) tai ladata sivun uudestaan tietyillä GET-parametreilla. Kirjoittelin taannoin aiheesta erään julkaisemattoman koodivinkin kommentiksi, katsele sieltä. Ajatuksena näin:
<?php $jarjestykset = array( "nimi_asc" => "nimi ASC", "hinta_asc" => "hinta ASC", # ... ); # Haetaan GET-muuttuja tai käytetään oletusta $jarjestys = empty($_GET["jarjestys"]) ? "nimi_asc" : $_GET["jarjestys"]; # Tarkistetaan valinnan kelpoisuus ja vikatilanteessa käytetään oletusta $jarjestys = empty($jarjestykset[$jarjestys]) ? $jarjestykset["nimi_asc"] : $jarjestykset[$jarjestys]; # Haetaan järjestyksellä $r = mysql_query("SELECT * FROM taulu ORDER BY $jarjestys"); # Otsikoihin linkit <a href="?jarjestys=nimi_asc">Nimi</a> jne. ?>
Tuossa on vielä yksi esimerkki, jossa on mukana järjestyksen valinta ja joka toisen rivin väritys. Esimerkki hakee tiedot taulusta "tuotteet", jossa täytyy olla kentät "nimi" ja "hinta".
<?php mysql_connect("localhost", "", ""); mysql_select_db("testit"); $jarj = "nimi"; if ($_GET["jarj"] == 1) $jarj = "nimi"; if ($_GET["jarj"] == 2) $jarj = "hinta"; $tiedot = mysql_query("SELECT nimi, hinta FROM tuotteet ORDER BY $jarj"); ?> <table border> <tr><th><a href="tuotteet.php?jarj=1">nimi</a></th> <th><a href="tuotteet.php?jarj=2">hinta</a></th></tr> <?php for ($i = 0; $i < mysql_num_rows($tiedot); $i++) { $nimi = mysql_result($tiedot, $i, 0); $hinta = mysql_result($tiedot, $i, 1); if ($i % 2 == 0) $vari = "white"; else $vari = "lightgray"; echo "<tr bgcolor=$vari><td>$nimi</td><td>$hinta</td></tr>"; } ?> </table>
Kiitoksia hyvistä vastauksista :)
Ja eikun vääntämään..
Yllä olevat koodit toimivat yllättävän hyvin, jopa meikäläisen
"omina" versioina :)
Seuraava kysymys koskeekin listauksen limittaamista eri sivuille.
Tietokantani yhdessä taulussa on yli 10000 riviä ja sen hakeminen
ja listaaminen php:llä kestää tovin (hidas serveri.)
Nyt haluaisin lisätä koodiin "seuraava / edellinen sivu" -linkit, jotka
vaihtavat sivua edes takaisin, pitäen järjestyksen siinä minkä
käyttäjä on mahdollisesti valinnut.
- AnttiK
Tuota soveltamalla pitäis onnistua:
https://www.ohjelmointiputka.net/koodivinkit/
Aihe on jo aika vanha, joten et voi enää vastata siihen.