Avatar billede Slettet bruger
29. juli 2010 - 00:44 Der er 31 kommentarer og
1 løsning

sortering efter forbogstav

Jeg har lavet en liste:


# - A - B - C - D .. osv


Jeg ville så, som det nok er blevet gættet, have at hvis man trykker på A så kommer alle titler der starter med A frem.
Og når man trykker på # kommer alle der starter med et tal frem.

Jeg vil så også gerne at der kommer en tekst frem der siger "Ingen titler starter med x" hvor X er bogstavet der er trykket på.

Og som en bonus vil jeg gerne have at når der ikke er trykket på et bogstav, så kommer der bare en liste med de 5 nyeste film.

Hvis nogen kan hjælpe mig med det vil jeg blive meget glad :O)
Avatar billede Slettet bruger
29. juli 2010 - 00:46 #1
Altså data'en skal komme frem under selve bogstaverne.

ex:

# - A - B - C - D ... osv

a
ab
ac
osv...
Avatar billede majbom Novice
29. juli 2010 - 07:42 #2
$res = mysql_query("SELECT * FROM tabel WHERE title LIKE '".$forbogstav."%'");

if(mysql_num_rows($res)<1){
  echo "der er ingen titler der starter med $forbogstav";
}


hvis du skal hente alle numre kan du bruge i stedet:

$query_string = "... WHERE title REGEXP '^[0-9]'"
Avatar billede Slettet bruger
29. juli 2010 - 12:25 #3
Jeg er lidt lost der.

Hvordan skal jeg lave linket fx til A'et?
Avatar billede majbom Novice
29. juli 2010 - 20:05 #4
<a href="visliste.php?q=a">A</a>

og på siden hvor du hente fra db'en:

if(isset($_GET['q']) && !empty($_GET['q']) && strlen($_GET['q'])==1){
  $forbogstav = $_GET['q'];
}

og så din sql-query her...
Avatar billede Slettet bruger
30. juli 2010 - 12:20 #5
Har lidt problemer.
Den kommer bare ud og siger "No input file specified."



echo "<font><center># - <a href='movies.php?q=a'>A</a> - B";



if(isset($_GET['q']) && !empty($_GET['q']) && strlen($_GET['q'])==1){
  $forbogstav = $_GET['q'];
}

$result = mysql_query("SELECT * from MOVIES WHERE TITLE LIKE '".$forbogstav."%' ORDER BY TITLE DESC");
While($row=mysql_fetch_array($result))
{

echo "<font size='4'>".$row['TITLE']."</font> | <font size='0,6em'>(".$row['m_RELEASE'].")</font><br>";

}
Avatar billede Slettet bruger
30. juli 2010 - 14:04 #6
Nu har jeg prøvet at lege lidt med det.
Og det betyder at jeg har lavet linket om.


<a href=\"index.php?movies&q=".$_GET['q']."\">A</a>


Har også prøvet med:


<a href=\"index.php?movie&q=".$forbogstav."\">A</a>


Men de virker ikke helt.
Der kommer ikke noget bogstav.

Jeg har dette på samme side (movie.php):

if(isset($_GET['q']) && !empty($_GET['q']) && strlen($_GET['q'])==1){
  $forbogstav = $_GET['q'];
}

$result = mysql_query("SELECT * from MOVIES WHERE TITLE LIKE '".$forbogstav."%' ORDER BY TITLE DESC");
While($row=mysql_fetch_array($result))
{

echo "<font size='4'>".$row['TITLE']."</font> | <font size='0,6em'>(".$row['m_RELEASE'].")</font><br>";

}


Jeg kan godt se at der ikke kommer noget bogstav oppe i adresse linjen. Men hvorfor gør der ikke det?
Avatar billede majbom Novice
30. juli 2010 - 14:12 #7
du skal vel have en linje med alle bogstaverne som links?

<?php
                                    $index_arr = Array();
                                    $index_arr[] = "0-9";
                                    foreach(range("A", "Z") as $i){
                                        $index_arr[] = $i;
                                    }
                                    $index_arr[] = "Æ";
                                    $index_arr[] = "Ø";
                                    $index_arr[] = "Å";
                               
                                    foreach($index_arr as $i){
                                        echo "<li><a href=\"movie.php?q=$i\"";
                                        echo ($_GET['q'] == $i)? " style=\"font-weight:bold;\"" : "";
                                        echo ">$i</a></li>\n";
                                    }
                                    ?>
Avatar billede Slettet bruger
30. juli 2010 - 14:48 #8
Det var en god måde at gøre det på.

Nu har jeg sat den op.. lige et hurtigt spørgsmål.
Hvad gør det sidste \n

Men jeg skulle gerne have et link der ser sådan ud:
index.php?=movie&q=$i

Men så hopper den bare ud og viser index.php
Selvom der i adressen står:
index.php?movie&q=a

Under det du har skrevet der. Kan det så passe at jeg skal have denne kode del under:


$result = mysql_query("SELECT * from MOVIES WHERE TITLE LIKE '".$forbogstav."%' ORDER BY TITLE DESC");
While($row=mysql_fetch_array($result))
{

echo "<font size='4'>".$row['TITLE']."</font> | <font size='0,6em'>(".$row['m_RELEASE'].")</font><br>";

}
Avatar billede majbom Novice
30. juli 2010 - 17:25 #9
ja du skal bare lige have:

if(isset($_GET['q']) && !empty($_GET['q'])){
  $forbogstav = $_GET['q'];
}

inden din query
Avatar billede Slettet bruger
31. juli 2010 - 18:43 #10
Puhha havde lige fået en masse vagter på mit arbejde.
Så har ikke haft så meget tid.

Nu har jeg kigget på det.
Det virker både og.

Jeg kan ikke få den til at vise titler der starter med et tal.
Tror det var det du var inde på tidligere.

Og så kan jeg kun få den til at virke med dette link:

  echo "<a href=\"movie.php?q=$i\"";


Men så åbner den det hele i en ny side.
Hvis jeg laver linket om til:

echo "<a href=\"index.php?movie&q=$i\"";


Så går den bare ud på min index.php side når jeg trykker på et bogstav. Men den skriver stadig hele adressen i toppen.
fx:
www.minside.dk/index.php?movie$q=A


Sådan ser hele filen ud pt:

<?php
include("config.php");

echo    "<div id='maincontent'>";
echo      "<div class='mainblock2'>";
echo        "<font><center># - <a href=\"index.php?movie&q=".$_GET['q']."\">A</a> - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z - Æ - Ø - Å</center></font>";
echo      "</div>";
echo      "</div>";
echo    "<div id='maincontent'>";
echo      "<div class='mainblock2'>";

$index_arr = Array();
$index_arr[] = "0-9";

foreach(range("A", "Z") as $i){
$index_arr[] = $i;
}
$index_arr[] = "Æ";
$index_arr[] = "Ø";
$index_arr[] = "Å";
                               
foreach($index_arr as $i){
echo "<a href=\"index.php?movie&q=$i\"";
echo ($_GET['q'] == $i)? " style=\"font-weight:bold;\"" : "";
echo ">$i</a> - \n";
}

if(isset($_GET['q']) && !empty($_GET['q'])){
  $forbogstav = $_GET['q'];
}
echo "<br><br>";
$result = mysql_query("SELECT * from MOVIES WHERE TITLE LIKE '".$forbogstav."%' ORDER BY TITLE DESC");
While($row=mysql_fetch_array($result))
{

echo "<font size='4'>".$row['TITLE']."</font> | <font size='0,6em'>(".$row['m_RELEASE'].")</font><br>";

}
                                 


echo "</div>";
echo "</div>";
?>
Avatar billede Slettet bruger
31. juli 2010 - 18:45 #11
Den øverste alfabetkæde skal der bare ses bort fra.
Den her jeg lige slettet.
Avatar billede Slettet bruger
31. juli 2010 - 20:12 #12
Fandt ud af at få linket til at virke.

Nu mangler jeg kun 2 ting.
Jeg skal have den til at vise titlerne der er tal.
Og når jeg kommer ind på movie.php og der ikke er valgt et bogstav.
Så skal der være top 5 nyeste film lige under bogstaverne.
Avatar billede Slettet bruger
01. august 2010 - 18:45 #13
Mangler stadig lidt hjælp :)

Stadig med at vise titler i tal.
Har kigget lidt på det du skrev tidligere.
Men kan ikke rigtigt flette det rigtigt ind.

Og det sidste skal være den der top 5 over nyeste film når der ikke er valgt bogstaver eller tal.
Avatar billede majbom Novice
01. august 2010 - 21:27 #14
finderne den titlerne med tal og vil bare ikke vise dem, eller hvordan skal dit problem forstås?
Avatar billede Slettet bruger
01. august 2010 - 21:31 #15
Den finder ikke noget.
Den kommer med beskeden "der er ingen titler der starter med 0-9"

Så den finder dem igen.
Avatar billede majbom Novice
02. august 2010 - 08:09 #16
hvad mener du med: "Så den finder dem igen. " ?
Avatar billede Slettet bruger
02. august 2010 - 09:16 #17
LOL var på vej i seng der. Havde nok lige været op i 10 eller 12 timer for meget.

Men der skulle stå at  "Så den finder dem ikke", eller "Så den finder ingen" ved ikke lige hvad der gik galt.
Men nu har jeg fået sovet lidt :P
Avatar billede majbom Novice
02. august 2010 - 09:47 #18
jeg går ud fra at der står "q=0-9" i din adresselinje når den burde vise titler med tal?
og som din kode ser ud sætter du bare q ind i din query i stedet for at gøre som  jeg skrev tidligere når det er tal: $query_string = "... WHERE title REGEXP '^[0-9]'"
Avatar billede Slettet bruger
02. august 2010 - 10:17 #19
Det har jeg prøvet. Og nu prøvet igen...
Men jeg må indrømme jeg ikke rigtigt kan se hvordan jeg skal smide det ind:


$result = mysql_query("SELECT * from MOVIES WHERE TITLE LIKE '".$forbogstav."%' ORDER BY TITLE DESC");
$query_string = "SELECT * from MOVIES WHERE TITLE REGEXP '^[0-9]'"
While($row=mysql_fetch_array($result))


Det virkede ikke
Så har jeg prøvet lidt af mig selv ved ikke om det er muligt:
Eller retter det var det ikke. Men jeg prøver mig skam frem inden jeg skriver.


$result = mysql_query("SELECT * from MOVIES WHERE TITLE LIKE '".$forbogstav."%' OR TITLE REGEXP '^[0-9]' ORDER BY TITLE DESC");
While($row=mysql_fetch_array($result))


Men så viser den hele tide de titler der starter med tal.
Kan man ikke bruge OR i sådanne situation?
Avatar billede majbom Novice
02. august 2010 - 11:02 #20
du skal hente titler med tal hvis q=="0-9", så vi laver en if-sætning:

[pre]if($forbogstav=="0-9"){
  $query = "SELECT * FROM movies WHERE title REGEXP '^[0-9]' ORDER BY title DESC";
}else{
  $query = "SELECT * FROM movies WHERE title LIKE '".$forbogstav."%' ORDER BY title DESC";
}

$result = mysql_query($query) or die(mysql_error());
[{pre]
Avatar billede majbom Novice
02. august 2010 - 11:02 #21
hov...

if($forbogstav=="0-9"){
  $query = "SELECT * FROM movies WHERE title REGEXP '^[0-9]' ORDER BY title DESC";
}else{
  $query = "SELECT * FROM movies WHERE title LIKE '".$forbogstav."%' ORDER BY title DESC";
}

$result = mysql_query($query) or die(mysql_error());
Avatar billede Slettet bruger
02. august 2010 - 11:08 #22
Okay... Lige så jeg er helt med.

Når du skriver if ($forbogstav=="0-9")

Så betyder det at hvis Forbogstav er et tal så
$query ..... tal
Ellers
$guery ..... bogstav.

Hvorfor er det at man bruger 2 lighedstegn?
Og hvorfor bruger man % efter forbogstav i qurey'en?
Avatar billede majbom Novice
02. august 2010 - 12:48 #23
det er rigtig forstået med if-sætningen, næsten. det betyder at strengen i $forbogstav er præcis "0-9" (uden gåseøjne :) )

man bruger to lighedstegn når man sammenligner, hvis du kun bruger ét tildeler du - f.eks.

$foo = 7 //her tildeler du værdien 7 til variablen foo
if($foo == 7){ //her sammenligner du variablen foo med tallet 7 - hvis udtrykket er sandt (det er de, da vi lige har tildelt tallet 7 i forrige linje) vil koden i if-sætningen blive kørt
}
if($foo = 8){ //her tildeler du værdien 8 til variablen foo i en if-sætning, det lykkedes altid og du vil komme ind i if-sætningen. det kan bedre forklares med en funktion der gør noget mere end at tildele en værdi, som returnerer true, hvis opgaven lykkedes og false hvis det ikke lykkedes. når du gør det i en if-sætning, vil if-sætningen fungere på baggrund af retur-værdien fra denne funktion.


håber det gav mening :)

%-tegnet er et jokertegn, så den tager alt som starter med $forbogstav, uanset hvad der kommer efter.

virker det ellers efterhånden? :)
Avatar billede Slettet bruger
02. august 2010 - 13:01 #24
Okay... Så hvis der ikke havde været % så ville den ikke tage nogen titler?

Ja det begynder at ligne noget.

Lige nu leger jeg med hvordan jeg laver den sidste if...

Altså hvis Forbogstavet ikke er valgt så skal den vise top 5 nyheder.
Ligenu laver den bare en liste når jeg ikke har valgt et bogstav.

Det er super dejlig med god hjælp og forklaringer du er en god og tålmodig det skal du ha stor tak for :)

Det jeg er ude i lige nu er som sagt en ny if sætning:
Men jeg gør noget forkert. Jeg mangler lidt viden på det punkt.
Har prøvet at lave noget ala det her:
Men det er mening at det skal være if($forbogstav ikke er valgt og der har jeg lidt problemer:


if($forbogstav){ // Mangler noget
$query = "SELECT * FROM MOVIES ORDER BY TITLE DESC LIMIT 5";
}else{
if($forbogstav=="0-9"){
  $query = "SELECT * FROM MOVIES WHERE TITLE REGEXP '^[0-9]' ORDER BY TITLE DESC";
}else{
  $query = "SELECT * FROM MOVIES WHERE TITLE LIKE '".$forbogstav."%' ORDER BY TITLE DESC";
}
Avatar billede Slettet bruger
02. august 2010 - 13:04 #25
Der manglede også lige den sidste tuborgklamme til at lukke den if-sætning jeg har prøvet at lave.
Avatar billede majbom Novice
02. august 2010 - 21:42 #26
der mangler faktisk ikke ret meget:

if(!isset($forbogstav)){ // hvis forbogstav ikke er valgt
  $query = "SELECT * FROM MOVIES ORDER BY TITLE DESC LIMIT 5";
}else{
  if($forbogstav=="0-9"){
      $query = "SELECT * FROM MOVIES WHERE TITLE REGEXP '^[0-9]' ORDER BY TITLE DESC";
  }else{
    $query = "SELECT * FROM MOVIES WHERE TITLE LIKE '".$forbogstav."%' ORDER BY TITLE DESC";
  }
}


nej hvis %-tegnet ikke havde været med, ville den kun vælge titler der kun indeholdt det valgte bogstav og ikke andet
Avatar billede Slettet bruger
02. august 2010 - 22:30 #27
Nu virker det.
Du må gerne poste et svar.
Og hvis du keder dig så har jeg lidt forståelse spørgsmål.
1000 tak for hjælpen.

Her laver du en array der hedder index_arr

$index_arr = Array(); // her laver du array'en
$index_arr[] = "0-9"; // her indsætter du så 0-9 hvilket betyder hvad gør [] efter arr?

foreach(range("A", "Z") as $i){ // her laver du så en bogstaverne fra A til Z. hvad gør "foreach" helt præcis?
$index_arr[] = $i; // hvad er det så der sker her?
}
$index_arr[] = "Æ"; // dette kan jeg godt regne ud.
$index_arr[] = "Ø";
$index_arr[] = "Å";



Næste del er så:


foreach($index_arr as $i){ // her laver du så en foreach igen. Denne linje gør hver mulighed i index_arr til i eller hvad?
echo "<a href=\"index.php?movie&q=$i\""; // her laver du linket det har jeg forstået
echo ($_GET['q'] == $i)? " style=\"font-weight:bold;\"" : ""; // det første er jeg lidt i tvivl om _GET['q'] == $i)? hvad gør det? Har ikke helt forsået den der _GET
echo ">$i</a> - \n"; \\ og hvad gør \n
}




Sidste del:

if(isset($_GET['q']) && !empty($_GET['q'])){ \\ hvis _GET['q'] ikke er valgt og/eller tom??  Eller hvad menes med denne linje og de 2 &.
  $forbogstav = $_GET['q']; \\ her laver du _GET['q'] til forbogstav. Det har jeg vidst også forstået korrekt.


Mange tak for hjælpen
Avatar billede majbom Novice
02. august 2010 - 22:45 #28
$index_arr = Array(); // her laver du array'en - YES!
$index_arr[] = "0-9"; // her indsætter du så 0-9 hvilket betyder hvad gør [] efter arr? - hvis du ikke brugte [] ville du bare overskrive arrayet og så ville$index_arr bare være en alm variabel med indholdet 0-9 :)

foreach(range("A", "Z") as $i){ // her laver du så en bogstaverne fra A til Z. hvad gør "foreach" helt præcis? - i dette tilfælde løber den igennem alle de bogstaver der findes imellem A og Z
$index_arr[] = $i; // hvad er det så der sker her? - og her er det faktisk det samme som med 0-9 længere oppe
}
$index_arr[] = "Æ"; // dette kan jeg godt regne ud.
$index_arr[] = "Ø";
$index_arr[] = "Å";


foreach($index_arr as $i){ // her laver du så en foreach igen. Denne linje gør hver mulighed i index_arr til i eller hvad? - ja den løber hele arrayet igennem og smider værdien over i $i, som du kan bruge inde i løkken
echo "<a href=\"index.php?movie&q=$i\""; // her laver du linket det har jeg forstået - YES
echo ($_GET['q'] == $i)? " style=\"font-weight:bold;\"" : ""; // det første er jeg lidt i tvivl om _GET['q'] == $i)? hvad gør det? Har ikke helt forsået den der _GET - $_GET er det array der indeholder variablerne fra din uri (adresselinje) og q er jo det forbogstav der skal listes - her tjekkes der om q er det samme som det link vi er ved at udskrive - hvis det er det, sætter vi en style; font-weight: bold; - dvs. at teksten bliver fed - dette er blot en lille indiaktor for at det er denne der er valgt :) lir/gejl/whatever :)
echo ">$i</a> - \n"; \\ og hvad gør \n - \n laver et linjeskift i kildekoden, det er blot for at gøre kilden mere overskuelig ved fejlfinding
}


if(isset($_GET['q']) && !empty($_GET['q'])){ \\ hvis _GET['q'] ikke er valgt og/eller tom??  Eller hvad menes med denne linje og de 2 &. - isset tjekker om variablen eksisterer og empty tjekker om variablen er tom (!empty tjekker som at den IKKE er tom :) - ! = NOT og && betyder OG - dvs at begge udtryk skal være opfyldt
  $forbogstav = $_GET['q']; \\ her laver du _GET['q'] til forbogstav. Det har jeg vidst også forstået korrekt. - YES


håber det giver mening - her kommer et svar :)
Avatar billede Slettet bruger
02. august 2010 - 22:55 #29
Puha er da ved at forstå lidt af det.
Men lære bedst ved at arbejde med det selv og så få hjælp hen af vejen.

1000 tak.
Avatar billede majbom Novice
02. august 2010 - 23:07 #30
selv tak :)

ja der er ikke andet for end bare at springe ud i det!
Avatar billede Slettet bruger
02. august 2010 - 23:32 #31
Helt rigtigt.
Desværre må jeg vidst holde en lille pause da jeg fra imorgen ikke rigtigt har en computer. :( Men så har jeg jo bl.a. denne tråd at kigge i hvis det tager lang tid før jeg får min egen tilbage :)
Avatar billede majbom Novice
03. august 2010 - 08:05 #32
hehe ja der er da blevet en lille samling af brugbare tips her :)
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