Avatar billede tif12345 Nybegynder
11. august 2004 - 20:16 Der er 7 kommentarer og
1 løsning

query problem

I index.php har jeg følgende query

$query=mysql_query("SELECT *  FROM TABLE WHERE type='type' AND name like '$letter%' AND platform='$pf' ORDER BY id DESC LIMIT 0,5");

platform='$pf' - bruges fx når jeg kalder noget ligende
index.php?pf=platform , frem.

MEN, når folk kommer frem til min side, altså kun index.php, kaldes $pf ikke, da jeg ikke vil kalde noget frem specifikt fra $pf, men bare generelt alt, så der vises ikke noget på index.php, hvilket jeg jo gerne vil ha. Følgende query viser det jeg gerne vil ha på index.php:

$query=mysql_query("SELECT *  FROM TABLE WHERE type='type' AND name like '$letter%' ORDER BY id DESC LIMIT 0,5");

Men hvis jheg bare smider det ind, så kan jeg ikke få resultater ved at kalde $pf frem.

Så hvordan bruger jeg begge ?
Avatar billede Slettet bruger
11. august 2004 - 20:45 #1
if(isset($_GET[pf])) {
    // her er din uri noget ala index.php?pf=platform
} else {
    // her er din uri noget ala index.php
}
Avatar billede coderdk Praktikant
11. august 2004 - 20:56 #2
$pf = ( isset( $_GET['pf'] ) ? $_GET['pf'] : 'plaform' );

Hvis $_GET['pf'] ikke er sat bliver den sat til "platform"... Ellers tager den hvad der står i $_GET['pf']
Avatar billede tif12345 Nybegynder
11. august 2004 - 22:25 #3
Uhmmm, det kan jeg godt nok ikke lige få til at virke. Lad os tage udgangspunkt i det som coderdk bruger. Hvis pf så ikke bliver sat, kommer der til at stå platform så? Altså, ligesom
$query=mysql_query("SELECT *  FROM TABLE WHERE type='type' AND name like '$letter%' AND platform='platform' ORDER BY id DESC LIMIT 0,5"); ?
Problemet er bare at hvis pf ikke er speciferet til noget, så vil jeg ha den til at SELECTE alt (hvilket i eksemplet faktiskt kun bliver speciferet til en ting, 'platform')

Jeg bruger følgende i index.php
---
$query=mysql_query("SELECT *  FROM TABLE WHERE type='type' AND name like '$letter%' AND platform='$pf' ORDER BY id DESC LIMIT 0,5");
print "<a href=\"indexcat.php?pf=$pf&s=$letter\">".$letter."</a>
              ";
                while($result=mysql_fetch_array($query)){
print "<a href=\"ffa\">$row[name]</a>
              ";
}
---
Avatar billede coderdk Praktikant
11. august 2004 - 22:36 #4
Hmm ok, prøv med:

$sql = "SELECT *  FROM TABLE WHERE type='type' AND name like '$letter%' ";
$sql .= ( isset( $_GET['pf'] ) ? "AND platform = '$_GET[pf]' " : '' );
$sql .= "ORDER BY id DESC LIMIT 0,5";
$query = mysql_query( $sql );
Avatar billede tif12345 Nybegynder
12. august 2004 - 15:28 #5
Det funker desværre slet ikke.. Med det får jeg bare en bunke fejl

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource

Men i begge dine eksempler der definerer du platform til at være noget. Hvis Platform så ikke er noget , vil der blot komme til at stå AND platform = '' (altså ingen ting)- hvilket jo ikke ville lave et SELECT blandt alt

Et SELECT for alt vil se sådan her ud (altså uden platform defineret overhovedet)
$query=mysql_query("SELECT *  FROM TABLE WHERE type='type' AND name like '$letter%' ORDER BY id DESC LIMIT 0,5");
med det, kan jeg få mit index.php til at se ud som jeg vil, men går jeg så til en side hvor jeg definerer $pf, fx index.php?pf=noget, så virker det jo ikke da $pf ikke bliver defineret i querien

Jeg håber det gir mening
Avatar billede Slettet bruger
12. august 2004 - 16:16 #6
Du kan gøre som jeg viste i den første kommentar.

<?PHP
if(isset($_GET[pf])) {
    $pf = $_GET[pf];
    $query=mysql_query("SELECT *  FROM TABLE WHERE type='type' AND name like '$letter%' AND platform='$pf' ORDER BY id DESC LIMIT 0,5");
} else {
    $query=mysql_query("SELECT *  FROM TABLE WHERE type='type' AND name like '$letter%' ORDER BY id DESC LIMIT 0,5");
}
?>
Avatar billede coderdk Praktikant
13. august 2004 - 01:24 #7
tif12345, nej I dette eksempel:

$sql = "SELECT *  FROM TABLE WHERE type='type' AND name like '$letter%' ";
$sql .= ( isset( $_GET['pf'] ) ? "AND platform = '$_GET[pf]' " : '' );
$sql .= "ORDER BY id DESC LIMIT 0,5";
$query = mysql_query( $sql );

Kommer der, hvis der ikke er angivet en ?pf=blah i URL'en, til at stå:

SELECT *  FROM TABLE WHERE type='type' AND name like '$letter%' ORDER BY id DESC LIMIT 0,5

Hvis der der f.eks. står ?pf=blah kommer der SQL'en til at se således ud:

SELECT *  FROM TABLE WHERE type='type' AND name like '$letter%' AND platform = 'blah'  ORDER BY id DESC LIMIT 0,5

Finten er denne:

$sql .= ( isset( $_GET['pf'] ) ? "AND platform = '$_GET[pf]' " : '' );

Hvis $_GET['pf'] er sat så tilføjer vi "AND platform = '$_GET[pf]' " til $sql, ellers tilføjer vi '' (tom streng). :)

$var = ( true ? 'sand' : 'falsk' );

Her vil $var altid være 'sand', og:

$var = ( false ? 'sand' : 'falsk' );

Her vil den altid være 'falsk' :)

Måske tror den at $_GET['pf'] er sat? Prøv at erstatte isset( $_GET['pf'] ) med strlen( $_GET['pf'] ) > 0
Avatar billede tif12345 Nybegynder
14. august 2004 - 18:44 #8
Jeg siger tak for de mange gode bidrag. Jeg fik det endelig til at virke via cypermanns metode.

Endnu engang, tak!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester