eli onko joku helppo / näppärä tapa tulostaa mysql taulusta sarakkeet
järjestettynä sen mukaan mitä otsikkoa klikkaa. Eli jos on Otsikot/sarakkeet
A B C niin klikkaamalla B sarakkeet järjestyy b:n mukaan jne jne.
SELECT juttu,toinen FROM taulu ORDER BY b
Joo, mutta toi linkki sivulla, pitääkö tehdä sivu a, sivu b ja sivu c.
Vai onko joku helpompi tapa järjestää tiedot.
Tähän tyyliin onnistunee:
Linkkiin: ?sivu=juttu&order=b
SELECT juttu,toinen FROM taulu ORDER BY $_GET['order']
hngrhfffypllrrts... Edellä mainittu teksti oli tarkoitettu kuvaamaan ylläpitäjän kommenttia joka tukehtuu kahviin ja pullaan saman aikaisesti kun huomaa että yksinkertaisella SQL-Exploitilla on täytetty tietokanta Cialis- ja muilla pippelinpidennyslinkeillä.
$order = mysql_real_escape_string(stripslashes($_GET['order']));
Minimissään.
Ja ei käyttäjälle tartte kertoa sen tietokannan sarakkeiden nimiä.
MySQL ymmärtää ORDER BY 1 // ensimmäisen sarakkeen mukaan ORDER BY 2 // toisen sarakkeen mukaan jne... ?sivu=juttu&sort=1&order=ASC ?sivu=juttu&sort=1&order=DESC ?sivu=juttu&sort=2&order=ASC ?sivu=juttu&sort=2&order=DESC <?php $order = isset($_GET['order']) && $_GET['order'] == 'DESC') ? 'DESC' ?:'ASC'; $sort = isset($_GET['sort']) && is_numeric($_GET['sort']) ? intval($_GET['sort']) : 1; $sql = "SELECT foo FROM bar ORDER BY {$sort} {$order}"; ?>
Edit. bugit koodissa
ajv kirjoitti:
Ja ei käyttäjälle tartte kertoa sen tietokannan sarakkeiden nimiä.
?sivu=juttu&sort=1&order=ASC ... $sql = "SELECT foo FROM bar ORDER BY {$sort} {$order}";
No juu sit kun taulurakenne muuttuu niin tuleepi ongelmia joten kannattaa käyttää sarakkeiden nimiä kyselyssä. Sekä linkkien on hyvä olla kuvaavia vaikka siinä ei sarakkeen nimeä olisikaan.
Offtopic: MySQL-lauseeseen sisälle muuttujat pystyy lisäämään laittamalla ne yksinkertaisesti {$muuttuja} tyylillä? Itselläni kun on ollut mitä ihmeellisempiä hipsuvirityksiä, toimivia mutta eivät järin järkevän näköisiä koodin keskellä.
Otetaan vaikka tuosta ajv:n koodista esimerkki.
Siis jos tuolla tavalla lisäät, niin lisäät aivan tavallisen merkkijonon, johon voi sisällyttää muuttujia (Olettaen, että käytetään lainausmerkkejä, ""). Eikä ees noista aaltosulkeita tarvitse käyttää, ellei vaarana ole, että muuttujat tai muu merkkijono sotkeudu toisiinsa.
Tämä toimii:
$sql = "SELECT foo FROM bar ORDER BY {$sort} {$order}";
Niinkuin tämäkin:
$sql = "SELECT foo FROM bar ORDER BY $sort $order";
Tässä esimerkki, milloin tarvitsee käyttää aaltosulkeita:
$nimi = "Jari"; $merkkijono = "{$nimi}n auto on punainen.";
Eli muuttuja sekoittuisi muuten muuhun tekstiin, jos aaltosulkeita ei käytetä (tässä tapauksessa kirjaimeen n). PHP-tulkki vain antaisi virheilmoituksen tuntemattomasta muuttujasta $nimin.
Virhe:
$nimi = "Jari"; $merkkijono = "$nimin auto on punainen.";
Saan otsikot näin, mutta nyt noi vielä linkeiksi niin että klikkaamalla
otsikkoa sisältö järjestykseen sarakkeen mukaan.
$dbname = 'kalen'; $db_selected = mysql_select_db($dbname, $link); if (!$db_selected) { die("Could not set $dbname: " . mysql_error()); } $res = mysql_query('select * from uutiset', $link); echo "<hr>" . mysql_field_name($res, 0) . "\n<br>"; echo mysql_field_name($res, 1) . "\n<br>"; echo mysql_field_name($res, 2) . "\n<br>"; echo mysql_field_name($res, 3) . "\n<br>"; echo mysql_field_name($res, 4) . "\n<hr>";
peg kirjoitti:
Saan otsikot näin, mutta nyt noi vielä linkeiksi niin että klikkaamalla
otsikkoa sisältö järjestykseen sarakkeen mukaan.
peg kirjoitti:
echo "<hr>" . mysql_field_name($res, 0) . "\n<br>";
echo mysql_field_name($res, 1) . "\n<br>";
echo mysql_field_name($res, 2) . "\n<br>";
echo mysql_field_name($res, 3) . "\n<br>";
echo mysql_field_name($res, 4) . "\n<hr>";
Eikö taulukon otsikot pitäisi olla <thead>-tagien sisällä (ja se varsinainen sisältö tbodyssa)?
<table> <thead> <!-- otsikkorivi ja otsikot omiin soluihinsa --> </thead> <tbody> <!-- varsinainen taulukon sisältö --> </tbody> </table>
Solun tekstistä voi tehdä ihan normaalin linkin. Tuolla jo aiemmin on neuvottu, että minkä tyyppinen sen linkin pitää olla ja miten sen avulla saadaan kyselyn tulokset järjestettyä.
en ole saanut tätä toimimaan vieläkään, voisko joku jeesata?
eli valittaa tosta
<?php $order = isset $yhteys = mysql_connect($server, $user, $pass) or die("Virhe kytkettäessä tietokantaan!"); mysql_select_db($database,$yhteys) or die("Virhe valittaessa tietokantaa!"); // Yhdistäminen mysql kantaan suoritettu, sitten itse asiaan echo "<html><body>"; echo "<form method='POST' action='send.php'> <pre> Lähettäjä: <input type='text' name='sender' size='40'> Otsikko: <input type='text' name='otsikko' size='40'> uutinen: <input type='text' name='uutinen' size='40'> </pre> <input type='submit' value=' Lisää linkki ' target='_self' name='B1'> <input type='reset' value='Tyhjennä' name='B2'> </p> </form>"; //haetaan kaikki tavarat $kysely = "SELECT * FROM uutiset ORDER BY {$sort} {$order}";// ORDER BY 4 ASC"; //suoritetaan kysely $haku = mysql_query($kysely, $yhteys) or die("Virhe kyselyssä!"); echo "<table border>"; echo "<tr><td><b>id</b></td><td><b>sender</b></td><td><b>uutinen</b></td> <td><b>otsikko</b></td><td><b>aika</b></td></tr>"; //käydään tavarat läpi for ($i = 0; $i < mysql_num_rows($haku); $i++) { //haetaan nimi, hinta ja määrä muuttujiin $id = mysql_result($haku, $i, "id"); $sender = mysql_result($haku, $i, "sender"); $uutinen = mysql_result($haku, $i, "uutinen"); $otsikko = mysql_result($haku, $i, "otsikko"); $aika = mysql_result($haku, $i, "aika"); //tulostetaan taulukon rivi echo "<tr><td>$id</td><td>$sender</td><td>$uutinen</td> <td>$otsikko</td><td>$aika</td></tr>"; } echo "</table>"; echo "</body></html>"; //header("Location: http://62.44.217.75/uutinen.php"); if(isset($submit)) { //$aika = time(); mysql_query("INSERT INTO uutiset (sender,uutinen,aika,otsikko) VALUES ('$sender','$uutinen','$aika','$otsikko')") or die("Lisäys ei onnistunut!". mysql_error()); } echo "<form method='POST' action='send.php'> <pre> Lähettäjä: <input type='text' name='sender' size='40'> Otsikko: <input type='text' name='otsikko' size='40'> uutinen: <input type='text' name='uutinen' size='40'> </pre> <input type='submit' value=' Lisää linkki ' target='_self' name='B1'> <input type='reset' value='Tyhjennä' name='B2'> </p> </form>"; $order = isset($_GET['order']) && $_GET['order'] == 'DESC') : 'DESC' ? 'ASC'; $sort = isset($_GET['sort']) && is_numeric($_GET['sort']) : intval($_GET['sort']) ? 1; $remote=getenv("REMOTE_ADDR"); echo ($remote); echo ("<a href=\"uutinen.php?id=uutiset&sort=2&order=ASC\">uutinen</a>"); mysql_close($yhteys); ?>
ylimäärästä sulkua yms. yms. hanki kunnon editori. Kaksoispiste ja kysymysmerkki toistepäin, ternary operation (hirveät nuo php.netin linkit)
tsuriga kirjoitti:
Kaksoispiste ja kysymysmerkki toistepäin, ternary operation (hirveät nuo php.netin linkit)
Hups, mun moka...
$order = isset($_GET['order']) && $_GET['order'] == 'DESC') ? 'DESC' : 'ASC';
Tietenkin tosiaan noin päin...
En saa edelleenkään toimimaan, sivu tulostuu, mutta järjestyksen muuttuminen
ei pelaa. http://62.44.217.249/harkat/uutinen.php Antakee neuvoja jos keksitte
vian, koodi on myös sivulla.
Tulosta se SQL-lause ja mieti mikä siinä on pielessä.
tarkoititko siis tätä.
$sql = 'SELECT * FROM `uutiset` ORDER BY `uutiset` . `id` ASC ';
En, vaan sitä $kysely-muuttujaa, jonka sisällön nyt tuolla sivulla oletkin tulostanut:
SELECT * FROM uutiset ORDER BY "$order"
.
Arvaatko mikä on vikana?
Luultavasti, mutta ainoa tulostus joka menee läpi, hipsut tai sulkeet antaa errorin. Noi {} vaikka tossa joku antoi ymmärtää että niitä voisi käyttää.
SELECT * FROM uutiset ORDER BY "$order"
on ihan yhtä pätevä seuraavan SQL-lauseen kanssa:
SELECT * FROM uutiset ORDER BY "kuukerin nelli"
Eli vinkki-vitonen: oikea syntaksi olisi esim:
...ORDER BY 1
Eli kotitehtäväksi jää, miten saat tuolta osoiteriviltä sarakkeen numeron ympättyä tuohon SQL-lauseeseen.
Toinen vinkki vielä: mitkä olikaan hipsujen ja lainausmerkkien erot PHP:ssä?
En periaatteestakaan anna suoraa vastausta, koska aikaisemmissa esimerkeissä on jo selkeästi esitetty miten koodin pitäisi toimia.
Älä anna, mutta selitä vielä lisää, olen ihan pihalla...
{$order} sentään jo toimii.
echo "kysely alkaa tästä:++++".$kysely."++++ ja loppuu tähän, pastee se Putkaan, jookojooko";
{$order}:n "toimimisella" tuskin on yhtään sen enempää hyötyä, jos kaikki muu on pielessä.
ja pastee se plusmerkkien välinen rimpsu siis tänne...
Kivakiva, viikkosit asensinmyslin janytkaikki pitää muailotyttönä...
Tuossa tuo aikaisempi vastaus korjattuna:
<?php //jos osoiteriviltä on annettu parametrit, käytetään niitä, muuten oletuksena $order on ASC ja $sort 1 $order = isset($_GET['order']) && $_GET['order'] == 'DESC') ? 'DESC' :'ASC'; $sort = isset($_GET['sort']) && is_numeric($_GET['sort']) ? intval($_GET['sort']) : 1; //käytetään lainausmerkkejä eikä hipsuja, jolloin merkkijono parsitaan muuttujien varalta. Ei lainausmerkkejä ORDER BY-komentoon. $kysely = "SELECT foo FROM bar ORDER BY {$sort} {$order}"; echo $kysely."<br />"; $haku = mysql_query($kysely, $yhteys) or die("Virhe kyselyssä!"); //jne.. tulostukset ja muut sulla toimikin jo. ?>
Tuolla pitäisi minun käsittääkseni toimia. Ja linkit menevät:
uutinen.php?sort=1&order=ASC
uutinen.php?sort=1&order=DESC
uutinen.php?sort=2&order=ASC
uutinen.php?sort=2&order=DESC
No niin, juuri kun luulin päässeeni jyvälle niin ei. Nimittäin
LIMIT ei pelitä, se asetetaan jotenkin toisin vai?
esim. http://62.44.217.249/harkat/uutinen.php
Samalla periaatteella se LIMITinkin ymppääminen SQL-lauseeseen toimii, mutta sitähän nyt ei yleensä käyttäjän tarvitse antaa osoiteriviltä. Vai oletko kenties tekemässä tuohon sivutusta?
Kunhan opettelen, mutta periaate sellaiselle toiminnalle että tulostetaan
kannasta 0-30 sitten 31-60 jne..
Tuo sivutus koodivinkki on silloin apunasi.
En paljoa muuttanut tuota alkuperäistä sivutuskoodia, mutta pikku
bugi sivulla 24 vain muutama rivi ja tulostaa silti sivulle 25
linkin joka on tyhjä.
http://62.44.217.249/harkat/sukusi.php
Aihe on jo aika vanha, joten et voi enää vastata siihen.