Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Tietokantahakua useammalle sivulle

Sivun loppuun

stageradio [22.01.2009 22:23:30]

#

Tässä olen yrittänyt saada toimintaan tietokannasta haettuja uutisia jotka näytettäisiin kymmenen ryppäissä jaettuna eri sivuille.
koodin pätkän olen täältä sivuilta joskus napannut ja sitä muunnellut. ensimmäisen (keikkailmoitus taulun) kanssa toimi moitteetta mutta kun yritin soveltaa samaa koodia tähän niin saan vain seurakseni seuraavanlaisen virheilmoituksen:

Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /home/stagerad/public_html/news.php on line 29

rivillä 29 siis teksi:

      $maara = mysql_result(mysql_query("SELECT COUNT(*) FROM news"), 0);
<?php
 require("config.php");

 require("header.php");

$dbhost = 'localhost';
$dbuser = 'username';
$dbpass = 'password';
$arvot = array();
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
$dbname = 'news';


// yhdellä sivulla olevien viestien määrä
$vps = 10;

// luetaan osoitteen mukana tullut sivunumero
if (isset($_GET['sivu'])) {
    $sivu = $_GET['sivu'];
}

$sivu = intval($sivu);

// haetaan näytettävät viestit tietokannasta
$viestit = mysql_query("SELECT date, text, headline FROM news
                        ORDER BY date DESC LIMIT ".($sivu * $vps).", {$vps}");

// selvitetään viestien määrä
$maara = mysql_result(mysql_query("SELECT COUNT(*) FROM news"), 0);

// luodaan sivunumerolista, jos sivuja on useampia
if ($maara > $vps) {
    echo "<p>";
    for ($i = 0; $i < $maara / $vps; $i++) {
        // tulostetaan pystyviivat sivunumeroiden väliin
        if ($i <> 0) {
            echo " | ";
        }
        // jos tämä sivu näytetään, tulostetaan sivun numero lihavoituna
        if ($sivun == $i) {
            echo "<b>".($i + 1)."</b>";
        // muussa tapauksessa luodaan linkki toiselle sivulle
        } else {
            echo "<a href=\"{$_SERVER['PHP_SELF']}?sivu={$i}\">".($i + 1)."</a>";
        }
    }
    echo "</p>";
}

// tulostetaan tietokannasta luetut viestit
for ($i = 0; $i < $vps; $i++) {
    // varmistetaan, että viimeisellä sivulle ei tule ylimääräistä
    if ($i + $sivu * $vps < $maara) {
        // tulostetaan viestin tiedot yksinkertaisesti muotoiltuna
        $aika = mysql_result($viestit, $i, 0);
        $nimi = mysql_result($viestit, $i, 1);
        $teksti = mysql_result($viestit, $i, 2);
        echo "<p><b>$date</b> kirjoitti
              <b>".date("d.m.y H:i", $headline)."</b>:<br>
              <i>{$text}</i></p>";
    }
}

?>

käytin samaa pohjaa toiseen samankaltaiseen sivuun joka toimi hyvin. mutta tähän se ei sitten enään toiminutkaan. missä vika??

(jos jotain muutakin epäolennaista näkyy niin saa korjata :)

pistemies [22.01.2009 22:39:26]

#

Näyttäisi herjaavan tätä riviä:

$maara = mysql_result(mysql_query("SELECT COUNT(*) FROM news"), 0);

Veikkaan, että tietokannasta ei löydy yhtää riviä ja siksi tuo ilmoittaa virheen.

Avuksi tulee mysql_free_result

ajv [22.01.2009 23:05:35]

#

Jos taulussa ei ole yhtään riviä, COUNT(*) palauttaa 0, eikä se aiheuta virhettä.

stageradio [22.01.2009 23:07:35]

#

lisäsin tietokantaan rivejä mutta vika ei poistu..

en tiedä vaikuttaako asiaan mutta missä muodossa olisi järkevintä pitää taulukon kenttien tyypit .. (text, date) .. tällä hetkellä on päivämäärässä tuo date ja muissa text

Grez [22.01.2009 23:31:20]

#

Onko toi nyt ihan varmasti täsmälleen se koodi mitä olet käyttänyt. Näyttäisi todennäköiseltä, että "SELECT COUNT(*) FROM news" olisi jotain kirjoitettuna väärin tms, niin että kysely vaan palauttaisi virheen. Silloin tosin aikaisemmallakaan rivillä ei pitäisi toimia.

Vasta_alkaja [23.01.2009 07:06:06]

#

Sinulta puuttuu ainakin alusta

mysql_select_db($dbname, $conn) or die ("Tietokannan valitseminen epäonnistui");

Teuro [23.01.2009 10:43:18]

#

Ja kyselyn jälkeen perinteinen

<?php
echo mysql_error();
?>

Saattaa kertoa hyvinkin tarkkaan missäpäin virhe majailee. Luultavamminkin date saattaa aiheuttaa ongelmia, koska se on kuitenkin varattu sana...

tsuriga [23.01.2009 12:17:22]

#

Suosittelisin käyttämään echo error:n tilalla Exceptioneita, esimerkki.

Vasta_alkaja [23.01.2009 12:29:45]

#

Testasin itse tuota date hommaa ja toimi ihan moitteetta.

stageradio [23.01.2009 20:01:31]

#

Kiitoksen avuista .. tosiaan lisäsin mysql_select_db:n ja hieman siistin koodia ja johan lähti pelittämään!

kumarrus


Sivun alkuun

Vastaus

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

Tietoa sivustosta