Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: php + mysql lukeminen

Sivun loppuun

Clacier [01.08.2010 17:03:08]

#

Hei.
myslissäni on table users, jossa on ainakin sarakkeet nick | rahat | jne


TOP listalla 10 eniten rahaa omistavat pelaajat selvitän tälläisellä koodilla

$sql = mysql_query("SELECT * FROM users ORDER BY rahat DESC limit 10");

Miten selvitän 10 vähiten rahaa omistavat? kokeilin jotain order by !rahat, ei se kuitenkaan toiminut..


Toinen kysymys:
miten pystyn laskea kaikkien käyttäjien rahat yhteensä?

tyyliin 'Rahaa käyttäjillä yhteensä $result euroa!'

kiitos vaivautujille :Q

trilog [01.08.2010 17:10:15]

#

Clacier kirjoitti:

Miten selvitän 10 vähiten rahaa omistavat? kokeilin jotain order by !rahat, ei se kuitenkaan toiminut..

Lajittele listaus nousevaan järjestykseen, eli ORDER BY rahat ASC.

Clacier kirjoitti:

miten pystyn laskea kaikkien käyttäjien rahat yhteensä?

SELECT SUM(rahat) FROM users;

Macro [01.08.2010 17:12:26]

#

SELECT COUNT(rahat) AS yhteensa FROMT users

Toimisiko tuo toiseen kysymykseesi?

Muokkaus. trilog ehtikin ensin. Mutta eikös COUNT tee saman kuin SUM, vai laskeeko se kuinka monta rahakohtaa löytyy (perjaatteessa sama kuin laskisi käyttäjien määrän)?

trilog [01.08.2010 17:18:04]

#

Macro kirjoitti:

Mutta eikös COUNT tee saman kuin SUM, vai laskeeko se kuinka monta rahakohtaa löytyy (perjaatteessa sama kuin laskisi käyttäjien määrän)?

COUNT laskee tulosrivien lukumäärän, SUM summaa kentän arvot.

Clacier [01.08.2010 17:20:20]

#

Okei, kiitos molemmille. Kolmas ongelma:
users tablessa on myös sarake ip.

profiiliin olisi tarkoitus saada Samalta osoitteelta: jossa olisi listattuna kaikki muut käyttäjät users tablesta, joilla on sama ip siinä ip sarakkeessa.

Pätkä profiilin koodista (tiedän ettei ole sisennykset kunnossa, ei tarvi mainita):

<?php
$getnick = mysql_real_escape_string($_GET["nick"]);
$sql = mysql_query("SELECT * FROM users WHERE nick='$getnick'");
$result = mysql_num_rows($sql);
if($result == 0) {
echo'<h1>Virhe</h1><p>Hakemaasi pelaajaa ei löytynyt!';
}
else {
$row = mysql_fetch_array($sql);
echo '<tr class=profile1><td width=20%><b>Käyttäjätunnus</b></td><td>';
if($row['vip'] == 1) {
echo'<img src="images/vip.png"> ';
}
echo $row['nick'] . '</td></tr>';
echo '<tr class="profile2"><td><b>Tunnus luotu</b></td><td width=80% >' . $row['cdate'] . '</td></tr>';
echo '<tr class="profile1"><td><b>Viimeisin kirjautuminen</b></td><td>' . $row['ldate'] . '</td></tr>';
if($row['clan'] == "") {
echo'<tr class="profile2"><td><b>Klaani</b></td><td>Ei klaania</td></tr>';
} else {
echo '<tr class="profile2"><td><b>Klaani</b></td><td><a href="klaani.php?nimi=' . urlencode($row['clan']) . '">' . $row['clan'] . '</a></td></tr>';
}
echo '<tr class="profile1"><td><b>Rahat</b></td><td>' . $row['rahat'] . '€</td></tr></table>';
echo'<table class="sameip"><tr><td>Samalta osoitteelta: </td><td>' . $samalta . '</td></tr></table>';
}
?>

Clacier [01.08.2010 18:29:10]

#

trilog kirjoitti:

Clacier kirjoitti:

Miten selvitän 10 vähiten rahaa omistavat? kokeilin jotain order by !rahat, ei se kuitenkaan toiminut..

Lajittele listaus nousevaan järjestykseen, eli ORDER BY rahat ASC.

Klaanisivulla on seuraavanlainen koodi:

<table class="latest" width="30%" style="border: solid 1px black;">
<caption>Lahjoitukset</caption>
<tr class="profile1"><td>Pelaaja</td><td>&euro;</td></tr>

<?php
include'database/database.php';
$getnimi = mysql_real_escape_string($_GET["nimi"]);
$sql = mysql_query("SELECT * FROM clans WHERE name='$getnimi'");
$row = mysql_fetch_array($sql);
$sql2 = mysql_query("SELECT * FROM users WHERE clan='$getnimi' ORDER BY lahjoittanut" );
while($row2 = mysql_fetch_array($sql2)) {
echo '<tr class="profile2"><td><a href="user.php?nick=' . $row2['nick'] . '">' . $row2['nick'] . '</a></td><td>' . $row2['lahjoittanut'] . '€</tr>
';
}
?></table>

Klaanissa Euro on 3 jäsentä; Akkue, Error sekä Jynde.
ylläolevalla koodilla table on seuraavanlainen:

Lahjoitukset
Pelaaja €
Akkue 100.00€
Error 248.00€
Jynde 1022.00€

Miksi ne ovat järjestettynä silti nousevaan järjestykseen? (ilman ASC)
ja miten ne saa järjestettyä laskevaan järjestykseen?

Chiman [01.08.2010 19:01:03]

#

Clacier kirjoitti:

Miksi ne ovat järjestettynä silti nousevaan järjestykseen? (ilman ASC)
ja miten ne saa järjestettyä laskevaan järjestykseen?

ASC on oletus. Käytä sen tilalla DESC, jos haluat laskevan järjestyksen. (Tulevat sanoista ascending ja descending, nouseva ja laskeva)

trilog [01.08.2010 19:09:26]

#

Clacier kirjoitti:

Miksi ne ovat järjestettynä silti nousevaan järjestykseen? (ilman ASC)
ja miten ne saa järjestettyä laskevaan järjestykseen?

MySQL:n oletuslajitteluperuste on nouseva (ASC), joten sitä ei periaatteessa tarvitse erikseen määritellä. Itse pidän kuitenkin selvempänä, että kyselystä näkee selvästi, missä järjestyksessä tulokset ovat, eikä se riipu mistään oletusasetuksista. (Sitä paitsi jos oletus joskus vaihtuu, on hyvä, että lajitteluperuste on määritelty täsmällisesti.) Laskeva järjestys onnistuu DESC-määreellä, kuten olit sitä tuolla ensimmäisessä viestissä käyttänytkin.

Clacier kirjoitti:

profiiliin olisi tarkoitus saada Samalta osoitteelta: jossa olisi listattuna kaikki muut käyttäjät users tablesta, joilla on sama ip siinä ip sarakkeessa.

Haluatko siis listata IP-osoitteen perusteella joitakin tietoja? Sehän onnistuu rajaamalla hakujoukosta WHEREllä haluttu IP.


Suosittelen lukemaan täältä löytyvän hyvän oppaan MySQL:stä ja PHP:stä.

Clacier [01.08.2010 20:19:31]

#

Kokeilin samalta ip systeemiksi:

$ipquery = mysql_query("SELECT nick FROM users WHERE lip = '$row[lip]'");
foreach($row69 = mysql_fetch_assoc($ipquery)) {
echo '<a href="' . $row69['nick'] . '">' . $row69['nick'] . '</a> ';
}

Parse error unexpected ')' :O

eli odottamaton ), uuh, en käsitä missä..

Macro [01.08.2010 20:30:50]

#

En tiedä edes tuon toimivuudesta, sillä minusta $row[lip] on vähän hassusti kirjoitettu. Itse olisin laittanut tuonne sen näin: {$row["lip"]}

Muuten, mikä tuo [lip]-tagi on? Tekee sisennyksen. :o

-tossu- [01.08.2010 20:40:08]

#

Foreach ei toimi noin, käytä whileä, lisäksi olet kirjoittanut vahingossa $ipqueery.

<?php
$ipquery = mysql_query("SELECT nick FROM users WHERE lip = '" . $row['lip'] . "'");
while($row69 = mysql_fetch_assoc($ipquery)) {
	echo '<a href="' . $row69['nick'] . '">' . $row69['nick'] . '</a> ';
}

Tuon pitäisi toimia

Clacier [01.08.2010 20:50:50]

#

-tossu- kirjoitti:

Foreach ei toimi noin, käytä whileä, lisäksi olet kirjoittanut vahingossa $ipqueery.

<?php
$ipquery = mysql_query("SELECT nick FROM users WHERE lip = '" . $row['lip'] . "'");
while($row69 = mysql_fetch_assoc($ipquery)) {
	echo '<a href="' . $row69['nick'] . '">' . $row69['nick'] . '</a> ';
}

Tuon pitäisi toimia

Joo, kiitos. Yksi "bugi" vielä, jos olet käyttäjän Jorma profiilissa, samalta osoitteelta näkyy "Jorma" + ne muut.. eli se $_GET['nick'] pitäis saada kadotettua siitä samasta osotteelta- kohdasta.

-tossu- [01.08.2010 21:04:53]

#

Tarkoitatko, että $_GET['nick']:n ei pitäisi näkyä listassa? Siinä tapauksessa kokeile tätä koodia.

<?php
$ipquery = mysql_query("SELECT nick FROM users WHERE lip = '" . $row['lip'] . "'");
while($row69 = mysql_fetch_assoc($ipquery)) {
    if($_GET['nick'] != $row69['nick'])
        echo '<a href="' . $row69['nick'] . '">' . $row69['nick'] . '</a> ';
}

Clacier [01.08.2010 21:08:04]

#

Joo, kiitos. lukkoon vaan

Macro [01.08.2010 21:19:50]

#

Sen voi tarkistaa jo kyselyssä.

SELECT nick FROM users WHERE lip = '{$row["lip"]}' AND lip <> '{$_GET["nick"]}'

Chiman [01.08.2010 21:32:30]

#

Macro kirjoitti:

SELECT nick FROM users WHERE lip = '{$row["lip"]}' AND lip <> '{$_GET["nick"]}'

Tuossa koodissa on turva-aukko. Koskaan ei pidä liittää käyttäjän syötteitä (mm. $_GET tai $_POST) tietokantakyselyyn suoraan tuolla tavalla. Lisätietoja löytyy esim. mysql-oppaista.

Macro [01.08.2010 21:44:08]

#

Niin totta vie onkin. Korjataan se mysql_real_escape_string()-funktiolla.

-tossu- [01.08.2010 22:21:23]

#

Eikös tuo Macron SQL-kysely ole muutenkin väärin? Tämän pitäisi toimia.

<?php
mysql_query("SELECT nick FROM users WHERE lip = '" . $row['lip'] . "' AND nick <> '" . mysql_real_escape_string($_GET['nick']) . "'");

Sivun alkuun

Vastaus

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

Tietoa sivustosta