compac Mester
15. juli 2020 - 20:35 Der er 6 kommentarer og
1 løsning

Udskriv af æ,ø,å -poster i index til database.

Jeg har en database, hvor jeg skal vise poster der begynder med forbogstav a, b, c, osv. indtil æøå.
Jeg har oprettet en række links med forbogstaverne i alfabetet. Ved aktivering af et bogstav vises alle poster med det aktiverede bogstav..
Problemet er, at Æ,Ø Å ikke virker.
ÆØÅ står  som link, men der sker intet når de aktiveres.
Jeg har kontrolleret at php.ini og databasen er UTF:8.

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<?php
$db = new mysqli('localhost','root','passw','demo');
mysqli_set_charset( $db, 'utf8');
$sort = isset($_GET['firstLetter']) ? filter_input(INPUT_GET, 'firstLetter',FILTER_SANITIZE_URL) : "" ;
if($sort == "") {
$sql = "SELECT * FROM countries ORDER BY name DESC" ;   
    }else{
$sql = "SELECT * FROM countries WHERE name LIKE '$sort%' ORDER BY name DESC" ;
    }
$execute = $db->query("$sql");
$alphachar = array_merge([...range('A', 'Z'), 'Æ','Ø', 'Å']); 
foreach ($alphachar as $element) {
  printf('<a href="%s?firstLetter=%s">%s</a> | ', $_SERVER['PHP_SELF'] , $element, $element);
}
  printf('<a href="%s">ALL</a> | ', $_SERVER['PHP_SELF'] );     
$rowcount = $execute->num_rows ;
echo "<table id=\"thetable\" cellspacing=\"0\" width=\"520\">";
echo "<tr> <th>name</th>  </tr>";

$c = 1;
if ($rowcount > 0 ) {
    $row = $db->query($sql) ; 
    echo "<br>";
    while ($row = $execute->fetch_assoc()) {
    echo '<br>';
    echo $row['name'];
    echo "</td><td WIDTH='50'>";
    echo "</td></tr>";       
    }
    }
echo "</table>";
Forlen dag var jeg her med et andet spørgsmål til koden, men det er løst.
claes57 Ekspert
15. juli 2020 - 20:42 #1
måske er php bare dum, og så skal
$alphachar = array_merge([...range('A', 'Z'), 'Æ','Ø', 'Å']);
rettes, så æøå også er med.
compac Mester
16. juli 2020 - 10:15 #2
ÆØÅ er netop med i 
$alphachar = array_merge([...range('A', 'Z'), 'Æ','Ø', 'Å']);.
Skal det gøres på en anden måde?
claes57 Ekspert
16. juli 2020 - 10:34 #3
jeg tænkte - bare for test - at prøve
$alphachar = array_merge([...range('A', 'Z'), 'Æ','Ø', 'Å', 'æ','ø', 'å']);
sukos Novice
16. juli 2020 - 16:36 #4
Din php fil skal være gemt som utf-8, ligesom DB skal være utf-8
compac Mester
17. juli 2020 - 15:26 #5
I min my.ini er ;Path to the language sat til:
lc-messages=en_US
- hvis jeg retter den til lc-messages=en_DK vil serveren ikke starte (det er WAMP)
De andre ting er OK: Database og tabel er gemt som UTF-8, og php-fil er gemt som UTF-8.
compac Mester
18. juli 2020 - 22:18 #6
Jeg tror ikke det er det rigtige sted at rette, for Wamp kan rette sprog i sine indstillinger. (højreklik på ikonen og language). Det har jeg naturligvis gjort, men desværre løste ikke mit problem.
Jeg forstår ikke at det er så besværlig at løse. Der må være nogen der har forsøgt at trække ord ud af en database med ÆØÅ.
Det er let nok at sortere alfabetisk. Men når man vil have fat i ord, der begynder med med de danske tegn opstår der problemer. Er der nogen der har et forslag til hvordan jeg skal gribe det an?
compac Mester
23. juli 2020 - 21:57 #7
Denne kode kan oprette et indeks fra en database, hvorfra man kan vælge bogstaver A, B, C, osv. og få vist hvilke poster, der findes med det valgte bogstav, ligesom i leksikon.
 
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<?php
$db = new mysqli('localhost','root','passw','demo');
mysqli_set_charset( $db, 'utf8');
$sort = isset($_GET['firstLetter']) ? filter_input(INPUT_GET, 'firstLetter',FILTER_SANITIZE_STRING) : "" ;
if($sort == "") {
$sql = "SELECT * FROM countries ORDER BY name DESC" ; 
    }else{
$sql = "SELECT * FROM countries WHERE name LIKE '$sort%' ORDER BY name DESC" ;
    }
$execute = $db->query("$sql");
$alphachar = array_merge([...range('A', 'Z'), 'Æ','Ø', 'Å']);
foreach ($alphachar as $element) {
  printf('<a href="%s?firstLetter=%s">%s</a> | ', $_SERVER['PHP_SELF'] , $element, $element);
}
  printf('<a href="%s">ALL</a> | ', $_SERVER['PHP_SELF'] );   
$rowcount = $execute->num_rows ;
echo "<table id=\"thetable\" cellspacing=\"0\" width=\"520\">";
echo "<tr> <th>name</th>  </tr>";

$c = 1;
if ($rowcount > 0 ) {
    $row = $db->query($sql) ;
    echo "<br>";
    while ($row = $execute->fetch_assoc()) {
    echo '<br>';
    echo $row['name'];
    echo "</td><td WIDTH='50'>";
    echo "</td></tr>";     
    }
    }
echo "</table>";

- det virker også med danske tegn ÆØÅ .

Løsningen på spørgsmålet er meget banal: FILTER_SANITIZE_URL skal rettes til
FILTER_SANITIZE_STRING
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

Opret Preview

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





Premium
Test: Lenovos seneste budget-basker kan det hele - man skal dog leve med en alt for synlig svaghed
Computerworld tester Lenovos Ideapad 5. Maskinen er stærk, prisen er skarp og designet er vellykket. Men der er stadig en god grund til at springe modellen over.
Job & Karriere
Regner din ferie væk? Brug tiden på at søge en af disse otte stillinger, der er ledige netop nu
Det sjasker ned over hele Danmark. Du kan bruge de våde sommerdage på at søge et af disse otte job, der er ledige lige nu.
White paper
Sådan får du et sikrere og mere effektivt netværk med SD-WAN
Kombinationen af cloud og mere effektive arbejdsformer - og hjemmearbejde – kan både netværk og sikkerhed nemt blive udfordret. Samtidig kan de traditionelle løsninger hurtigt blive dyre, især når sikkerheden skal følge med. I dette whitepaper kan du læse om udfordringerne med de traditionelle netværkskonfigurationer og hvilke fordele som et software defined netværk kan give, samt hvordan du tænker sikkerhed ind i løsningen fra starten.