compac Seniormester
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 Seniormester
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 Juniormester
16. juli 2020 - 16:36 #4
Din php fil skal være gemt som utf-8, ligesom DB skal være utf-8
compac Seniormester
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 Seniormester
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 Seniormester
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
Blandt 18.000 indberetninger om databrud er menneskefejl den mest almindelige: Sådan undgår din virksomhed de mest basale databrud
18.000 anmeldelser om databrud er tikket ind hos Datatilsynet siden siden GDPR-loven trådte i kraft. "Mange af de fejl, som vi ser, beror på relativt banale fejl,” lyder det fra tilsynets it-sikkerhedspecialist Allan Frank. Se her, hvordan du relativt nemt kan undgå dem.
Computerworld
IBM vinder millionaftale om nyt toldsystem
Skatteforvaltningen har tegnet en tiårig kontrakt IBM om levering af det sidste it-system til i en omfattende systemudskiftning i toldsystemerne og som først forventes afsluttet i 2025. Se alle detaljerne her.
CIO
Podcast: Hos Viking Life-Saving Equipment er it gået fra at være backend til at være noget, som kunderne spørger aktivt efter
Podcast, The Digital Edge: Viking leverer en stadig større del af deres produkt som en tjeneste. Som en del af tjenesten tager Viking ansvar for sikkerheden ved at levere, dokumentere og vedligeholde det nødvendige sikkerhedsudstyr. Hør hvordan Henrik Balslev senior digital director hos Viking har løftet den opgave.
Job & Karriere
Microsoft i kæmpe dansk satsning - åbner tre store datacentre i Danmark
Microsoft lancerer kæmpe satsning fra hovedkvarteret i Lyngby. Selskabet åbner tre store bæredygtige datacentre på Sjælland.
White paper
Cisco Umbrella: Sådan udvikler truslerne sig netop nu
Hver eneste dag håndterer de mere end 30 datacentre under Cisco Umbrella mere end 240 milliarder forespørgsler fra 190 lande. Det giver sikkerhedseksperter hos Cisco Talos et enestående datagrundlag for at kortlægge, hvordan cybertrusselsbilledet udvikler sig. I dette whitepaper kan du læse, hvordan trusselsbilledet har udviklet sig hen over 2020. Men – endnu vigtigere – om, hvordan din organisation bedst forbereder sig på at håndtere truslerne i tiden der kommer.