Avatar billede 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.
Avatar billede 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.
Avatar billede 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?
Avatar billede claes57 Ekspert
16. juli 2020 - 10:34 #3
jeg tænkte - bare for test - at prøve
$alphachar = array_merge([...range('A', 'Z'), 'Æ','Ø', 'Å', 'æ','ø', 'å']);
Avatar billede 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
Avatar billede 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.
Avatar billede 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?
Avatar billede 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
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

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