/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Sortering af data
Fra : Bengt Wendt Sørensen


Dato : 12-12-02 13:15

Hej jeg er nu nået så langt med min udskrift fra databasen, at
jeg vil have at bruger, skal kunne sortere de forskellige koloner
ved at klikke på overskriften, men hvordan gøres dette, jeg
smider lige koden her:

<table width="85%" border="1" cellpadding="1" cellspacing="0">

<tr>
<td width="8%"><b>Arkiv Nr</b></td>
<td width="20%"><b>Komponist</b></td>
<td width="20%"><b>Titel</b></td>
<td width="25%"><b>Anvendelse</b></td>
</tr>

<?

$conn = mysql_connect("localhost", "****", "****");
mysql_select_db("bbbnoder");
$result = mysql_query("select * from noder order by komponist");
while ($row = mysql_fetch_array($result)) {
extract($row);
echo "<tr>";
echo "<td>$Nr</td>";
echo "<td>$komponist</td>";
echo "<td>$titel</td>";
echo "<td>$anvendelse</td>";
echo "</tr>";
}
mysql_close();

?>

</table>

Venligst Bengt

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Henrik Eghave (12-12-2002)
Kommentar
Fra : Henrik Eghave


Dato : 12-12-02 17:42

En nem metode er at sortere dine udtræk fra db vha.:

....order by xxx DESC
....order by xxx ASC

hth


"Bengt Wendt Sørensen" <bengt@wendt-net.dk> wrote in message
news:at9ujv$64v$1@sunsite.dk...
> Hej jeg er nu nået så langt med min udskrift fra databasen, at
> jeg vil have at bruger, skal kunne sortere de forskellige koloner
> ved at klikke på overskriften, men hvordan gøres dette, jeg
> smider lige koden her:
>
> <table width="85%" border="1" cellpadding="1" cellspacing="0">
>
> <tr>
> <td width="8%"><b>Arkiv Nr</b></td>
> <td width="20%"><b>Komponist</b></td>
> <td width="20%"><b>Titel</b></td>
> <td width="25%"><b>Anvendelse</b></td>
> </tr>
>
> <?
>
> $conn = mysql_connect("localhost", "****", "****");
> mysql_select_db("bbbnoder");
> $result = mysql_query("select * from noder order by komponist");
> while ($row = mysql_fetch_array($result)) {
> extract($row);
> echo "<tr>";
> echo "<td>$Nr</td>";
> echo "<td>$komponist</td>";
> echo "<td>$titel</td>";
> echo "<td>$anvendelse</td>";
> echo "</tr>";
> }
> mysql_close();
>
> ?>
>
> </table>
>
> Venligst Bengt
>
> --
> Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
> - Pædagogiske tutorials på dansk
> - Kom godt i gang med koderne
> KLIK HER! => http://www.html.dk/tutorials



Bengt Wendt Sørensen (13-12-2002)
Kommentar
Fra : Bengt Wendt Sørensen


Dato : 13-12-02 08:07

Henrik Eghave wrote in dk.edb.internet.webdesign.serverside.php:
> En nem metode er at sortere dine udtræk fra db vha.:
>
> ....order by xxx DESC
> ....order by xxx ASC
>
> hth
>
>
> "Bengt Wendt Sørensen" <bengt@wendt-net.dk> wrote in message
> news:at9ujv$64v$1@sunsite.dk...
> > Hej jeg er nu nået så langt med min udskrift fra databasen, at
> > jeg vil have at bruger, skal kunne sortere de forskellige koloner
> > ved at klikke på overskriften, men hvordan gøres dette, jeg
> > smider lige koden her:
> >
> > <table width="85%" border="1" cellpadding="1" cellspacing="0">
> >
> > <tr>
> > <td width="8%"><b>Arkiv Nr</b></td>
> > <td width="20%"><b>Komponist</b></td>
> > <td width="20%"><b>Titel</b></td>
> > <td width="25%"><b>Anvendelse</b></td>
> > </tr>
> >
> > <?
> >
> > $conn = mysql_connect("localhost", "****", "****");
> > mysql_select_db("bbbnoder");
> > $result = mysql_query("select * from noder order by komponist");
> > while ($row = mysql_fetch_array($result)) {
> > extract($row);
> > echo "<tr>";
> > echo "<td>$Nr</td>";
> > echo "<td>$komponist</td>";
> > echo "<td>$titel</td>";
> > echo "<td>$anvendelse</td>";
> > echo "</tr>";
> > }
> > mysql_close();
> >
> > ?>
> >
> > </table>
> >
> > Venligst Bengt

Tak men hvordan skal man lave et link som hvis det bliver
aktiveret udføre ordren??
> >
> > --
> > Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
> > - Pædagogiske tutorials på dansk
> > - Kom godt i gang med koderne
> > KLIK HER! => http://www.html.dk/tutorials
>
>


--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Bo Rattenborg (13-12-2002)
Kommentar
Fra : Bo Rattenborg


Dato : 13-12-02 08:09

<A HREF="udskriv.php?order_by=name">Navn</A>
<A HREF="udskriv.php?order_by=address">Adresse</A>

SELECT * FROM db ORDER BY '$order_by'

mvh
Bo



Jesper Brunholm (13-12-2002)
Kommentar
Fra : Jesper Brunholm


Dato : 13-12-02 12:02

Bo Rattenborg wrote:
> <A HREF="udskriv.php?order_by=name">Navn</A>
> <A HREF="udskriv.php?order_by=address">Adresse</A>
>
> SELECT * FROM db ORDER BY '$order_by'

Du skal dog huske at du derved meget tydeligt viser brugere, og
eventuelle hackere, at de laver et input som går til database-kaldet.

Du bør (på langt de fleste webhoteller) arbejde lidt med det input du
får ned fra adresselinien inden du bruger det i et databasekald. Det
kunne fx gå i retning af at validere indholdet at $order_by op imod et
array, og slette variablen hvis den ikke er en gyldig variabel,
derudover er addslashes() og strip_tags() php funktioner som jeg
jævnligt bruger i den sammenhæng.

Et alternativ, som jeg synes er lettere er:

<A HREF="udskriv.php?sorter=1">Navn</A>
<A HREF="udskriv.php?sorter=2">Adresse</A>

if(!isset($sort)){
$sort=1; /* sikr dig imod at tilgå en tom variabel */
}

settype($sort, "integer"); /* tving $sort til at være et heltal */
$sorteringer=array(
1=>'Navn', /* uden anførselstegn i key/nøgle fordi det er et tal */
2=>'Adresse'
);

$order_by=$sorteringer[$sort];

SELECT * FROM db ORDER BY '$order_by'

På den måde kan der kun komme et heltal fra adresselinien til dit
SQL-kald, sådan et kan ikke være skadeligt.

mvh

Jesper Brunholm


Bo Rattenborg (13-12-2002)
Kommentar
Fra : Bo Rattenborg


Dato : 13-12-02 15:32

> På den måde kan der kun komme et heltal fra adresselinien til dit
> SQL-kald, sådan et kan ikke være skadeligt.

Fed nok, der lærte jeg også noget.

Hvad nu hvis det er en søgeboks ?

Her vil man typisk søge på SELECT * FROM db WHERE name LIKE %$search%

Men hvad hvis der indtastes peter OR WHERE 1=1 i søgefeltet ? - hvordan bør
det tjekkes laves ?

Er der nogen der har nogle links til nogle danske sider vedr. PHP / MySQL og
sikkerhed ?

Mvh
Bo

ps. puha, det kan da ret hurtigt gå galt hvis ikke man tænker sig om.



Niels Andersen (13-12-2002)
Kommentar
Fra : Niels Andersen


Dato : 13-12-02 20:49

Bo Rattenborg wrote in <3df9ef78$0$24698$ba624c82@nntp02.dk.telia.net>:
> Her vil man typisk søge på SELECT * FROM db WHERE name LIKE %$search%

name LIKE '%$search%'

Husk dine quotes, det er dem, der gør tricket. :)

> Men hvad hvis der indtastes peter OR WHERE 1=1 i søgefeltet ? - hvordan
> bør det tjekkes laves ?

peter'; DELETE FROM tabelnavn;

Ca. 2 millisekunder efter kan dit sites overlevelse afgøres af, om du har
backup. Og det er ikke engang "worst case", alt efter projektet. :)

Humlen er at "escape" farlige tegn. Et quote-tegn gør fx. ikke noget i
mysql, hvis der er en backslash foran. I andre DBM-systemer dobbler man op:

SELECT * FROM tabel WHERE name LIKE 'peter\'; DELETE FROM tabelnavn;'
eller
SELECT * FROM tabel WHERE name LIKE 'peter''; DELETE FROM tabelnavn;'

> Er der nogen der har nogle links til nogle danske sider vedr. PHP / MySQL
> og sikkerhed ?

Der kan jeg ikke lige hjælpe.

> ps. puha, det kan da ret hurtigt gå galt hvis ikke man tænker sig om.

Hvem sagde Valus? *g*

--
Mvh.

Niels Andersen
(la nels. anersyn.)

Jens Tønnesen (19-12-2002)
Kommentar
Fra : Jens Tønnesen


Dato : 19-12-02 22:53

Niels Andersen <niels-usenet@myplace.dk> skrev i
dk.edb.internet.webdesign.serverside.php:

> Bo Rattenborg wrote:

> peter'; DELETE FROM tabelnavn;

> Ca. 2 millisekunder efter kan dit sites overlevelse afgøres af, om du
> har backup. Og det er ikke engang "worst case", alt efter projektet.
> :)

Jamen, lige præcis ovenstående skulle da ikke være et problem i PHP-
sammenhæng, da funktionen mysql_query kun vil udføre den første del af SQL-
sætningen, altså hen til det første semikolon.


Jesper Brunholm (13-12-2002)
Kommentar
Fra : Jesper Brunholm


Dato : 13-12-02 23:36

Bo Rattenborg wrote:
>>På den måde kan der kun komme et heltal fra adresselinien til dit
>>SQL-kald, sådan et kan ikke være skadeligt.
>
> Fed nok, der lærte jeg også noget.

Lækkert

> Hvad nu hvis det er en søgeboks ?

Så er vi på røven

Nej - du kan gøre en del, bla læse nogle at de ret kompetente artikler
om "SQL injections" som man kan finde på nettet. De handler ofte om at
beskytte IIS og asp, men vi andre kan også lære en del af dem alligevel,
ikke mindst at sørge for at ordinære brugere ikke i brugervenlighedens
navn får fejlmeldinger som giver hackere uendeligt meget information om
systemet de er på vej ind i... set_error_handler med tilhørende
funktioner kan gøre en del ret stærkt i retning af at give udvikleren
fuldt tilbagemeldingsniveau, men lukke for det varme vand til resten af
verden.

Next er min delkonklusion af køre op mod et badwords-array med i hvert
fald 'drop' og 'delete' (og lidt mere...), og fjerne de uønskede ord fra
input - der er sjældent grund til at man skal kunne søge efter netop de
ting...

Et modtræk er også at lukke for table-modification fra andre end en
selv, hvis man kan få sat db'en op til det (har jeg læst - jeg har ikke
lov til det på de db'er som jeg arbejder på - udover de 4 hvor det er
gjort som server-default )

Vi er selvfølgeligt ovre i et emne hvor årsagen til at man ikke lige kan
læse en "hot to-do's tutorial" online er at hackerne så ved hvordan man
har beskyttet sig hvis de gider søge lidt...

> Er der nogen der har nogle links til nogle danske sider vedr. PHP / MySQL og
> sikkerhed ?

Njah - man kan faktisk finde en del i nærværende gruppe, i
databasegruppen, og i de internationale pendanter. Det er dog langt fra
kogebøger.

> ps. puha, det kan da ret hurtigt gå galt hvis ikke man tænker sig om.

Ja - man kan godt få sved på panden ved tanken om hvad ens tidlige
"bedrifter" udi online-tjenester let kunne være blevet udsat for fordi
man ikke var obs på hvad man skulle gøre udover at "få det til at virke"

mvh

Jesper Brunholm


Niels Andersen (14-12-2002)
Kommentar
Fra : Niels Andersen


Dato : 14-12-02 11:12

Jesper Brunholm wrote in <3dfa60ed$1@news.wineasy.se>:
> Next er min delkonklusion af køre op mod et badwords-array med i hvert
> fald 'drop' og 'delete' (og lidt mere...), og fjerne de uønskede ord fra
> input - der er sjældent grund til at man skal kunne søge efter netop de
> ting...

På den anden side, den sjældne gang folk søger på det, synes jeg da at de
skal have lov.

Prøvede lige at leget lidt med en søgefunktion på et site jeg arbejder på
nu. En søgning på drop og select gav brugbare resultater. :)

Desuden synes jeg det er langt lettere at sørge for, at folk kan skrive hvad
som helst (addslashes() / DB::quote()), end at lave en liste med
undtagelser, som alligevel aldrig bliver komplet. :)

> Et modtræk er også at lukke for table-modification fra andre end en
> selv, hvis man kan få sat db'en op til det (har jeg læst - jeg har ikke
> lov til det på de db'er som jeg arbejder på - udover de 4 hvor det er
> gjort som server-default )

Yeps. Jeg kan finde på at lave fx. 3 forskellige logins til et enkelt site.
1) Bruges af den offentlige del af sitet, meget begrænsede rettigheder.
2) Bruges af admin-delen af sitet.
3) Bruges af db-admin (mig), når der fx. skal pilles ved tabeller.

> Vi er selvfølgeligt ovre i et emne hvor årsagen til at man ikke lige kan
> læse en "hot to-do's tutorial" online er at hackerne så ved hvordan man
> har beskyttet sig hvis de gider søge lidt...

Nogle ting tager man nu ikke skade ved at hackerne ved, bla. fordi de fleste
ved det i forvejen. :)

Strenge escapes, tal sikrer man sig rent faktisk også er tal osv.
Jeg har set sjove ting, hvor folk fx. bevist laver SQL-injections. Noget med
at de kan lave WHERE-delen af en SQL-query ved at drøne $_GET igennem. Ikke
smart. :)
Og så lige det med adgangsbegrænsning. Enhver ved at man på ca. alle
webhoteller har én db-konto med adgang til alt anden end "drop database".
Jeg tror ikke der er noget galt i at nogen finder ud af, at man har sat det
mere fornuftigt op end det.

> Ja - man kan godt få sved på panden ved tanken om hvad ens tidlige
> "bedrifter" udi online-tjenester let kunne være blevet udsat for fordi
> man ikke var obs på hvad man skulle gøre udover at "få det til at virke"
>

Når jeg har fået noget til at virke, har jeg typisk brugt under 10% af
udviklingstiden.
(Og her ser vi enda helt bort fra forberedelserne inden der skrives kode)

Det plejer kunder at være imponerede over. Hvis man fx. aftaler et projekt
med 14 dage til deadline, og dagen efter kan kunden lege med en grim,
brugerUvenlig men dog nogenlunde fungerende version. :)

--
Mvh.

Niels Andersen
(la nels. anersyn.)

Bo Rattenborg (17-12-2002)
Kommentar
Fra : Bo Rattenborg


Dato : 17-12-02 13:37

> som helst (addslashes() / DB::quote()), end at lave en

ok, blot for at skære det ud i pap, så bør jeg 'køre' en addslashes() og en
........ ? på $søgetekst ?

Eller hvordan bør jeg strikke ?

Mvh og tak for de foreløbige input
Bo




Niels Andersen (17-12-2002)
Kommentar
Fra : Niels Andersen


Dato : 17-12-02 13:44

Bo Rattenborg wrote in <3dff1a76$0$1771$ba624c82@nntp03.dk.telia.net>:
>> som helst (addslashes() / DB::quote()), end at lave en
> ok, blot for at skære det ud i pap, så bør jeg 'køre' en addslashes() og
> en ....... ? på $søgetekst ?

Ikke "og", men "eller". :)

De fleste begyndere bruger bare addslashes, og det fungerer da også helt
fint. Som standard sætter den backslash foran de farlige tegn. Man kan vist
give den en parameter, så den i stedet for slashes laver "double up" på de
farlige tegn. Det skal man nemlig bruge i nogle database-systemer.

Hvis man er til PEAR::DB bruger man funktionen DB::quote(). Den finder
nemlig selv ud af om der skal bruges backslashes, "double up", eller hvad
der nu skal til.

--
Mvh.

Niels Andersen
(la nels. anersyn.)

Bo Rattenborg (17-12-2002)
Kommentar
Fra : Bo Rattenborg


Dato : 17-12-02 13:54

> Hvis man er til PEAR::DB bruger man funktionen DB::quote(). Den finder
> nemlig selv ud af om der skal bruges backslashes, "double up", eller hvad
> der nu skal til.

Ok, jeg benytter MySQL og som udgangspunkt vil det være ok at køre en
addslashes() på søgeteksten ?

Hvilket ikke har nogen betydning for min søgetekst eller ?

Bo



Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408937
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste