Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Taulukon listaus MySQL:stä PHP:n avulla

Sivun loppuun

wisekki [09.10.2008 13:56:10]

#

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

Metabolix [09.10.2008 14:18:06]

#

<?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.

wisekki [09.10.2008 14:22:56]

#

Kiitos ja kumarrus erittäin ripeästä vastauksesta :)
Kokeilenpa samantein..

- Antti

wisekki [10.10.2008 14:46:10]

#

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

Andu [10.10.2008 14:55:46]

#

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 :)

wisekki [10.10.2008 15:58:28]

#

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

Metabolix [10.10.2008 16:12:20]

#

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.
?>

Antti Laaksonen [10.10.2008 16:51:55]

#

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>

wisekki [10.10.2008 17:04:52]

#

Kiitoksia hyvistä vastauksista :)
Ja eikun vääntämään..

wisekki [15.10.2008 12:31:26]

#

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

ZcMander [15.10.2008 12:45:39]

#

Tuota soveltamalla pitäis onnistua:

https://www.ohjelmointiputka.net/koodivinkit/24487-php-sivutus


Sivun alkuun

Vastaus

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

Tietoa sivustosta