Avatar billede Calle5463 Forsker
31. december 2016 - 13:22 Der er 7 kommentarer og
1 løsning

Tegnsæt

Jeg er helt klart lidt udfordringer på tegnsæt, og det er sikkert også det der "river" et par andre uhensigtsmæssigheder jeg har omkring login. Men first thing first.
Kan det være localhosten (hvor skal jeg kigge?)

Situationen er:
WordPress på localhost (xampp)

Har kørt plugin: Utf8ize

phpMyAdmin:
Servers forbindelsestegnsæt: utf8mb4_unicode_ci
Alle mysql-tabeller: utf8mb4_unicode_ci

Tabellen wp_options:
blogname = "Føns Vig ....." -> "Føns Vig ....." på hjemmesiden (header)
blogdescription = "Føns Vig ....." -> "Føns Vig ....." på hjemmesiden (under header)

Tabellen cer_medlemsdata:
f_name = "Føns - Føns" -> "Føns - F?ns" i udskrifter af medlemsliste på hjemmeside (html, php)
Avatar billede vagnk Juniormester
31. december 2016 - 17:02 #1
I min WP er tabellerne sat "utf8mb4_unicode_520_ci" og det virker. Når du skal rette skal du sikkert ned i hver enkelt tabel og rette ved hver eneste VARCHAR.
Avatar billede Calle5463 Forsker
01. januar 2017 - 20:21 #2
Status: Jeg har ændret alle tabeller til utf8_unicode_ci (uanset ovenstående), og manuelt været "alle" felter (wp_users, wp_usermeta, cer_medlemsdat) igennem, for at rette mærkelige tegn til æøå.....

Nu vises de korrekte tegn i WordPress' login, user, profil etc., og det ser desuden ud til, at login og useradm virker efter hensigten

Men i min egen udskrift af medlemsliste (html, php, mysql) vises æøå som en sort rhombe/firkant med et ?.

<?php
// ------------------------------------------------------------------------------
// ------------                    snippet nr 3                    --------------
// ------------------------------------------------------------------------------




require_once("toolbox/connect_to_db.php");

require_once('toolbox/style.php');
require_once('toolbox/javascripts.php');
require_once('toolbox/funktioner.php');


// ------------------------------------------------------------------------------



function user_email($user_id) {
    echo "<form>";
    echo "<input type='text' name='user_id' hidden value='" . $user_id . "'>";
    echo "<input type='submit' name='send_besked' value='send besked'>";
    echo "</form>";
}


function vis_records($con) {
    $sql_select = "SELECT
                        medlemsnr,
                        f_name,
                        m_name,
                        l_name,
                        user_email,
                        tlf,
                        mobil,
                        itemname,
                        wp_user_ID
                   
                    FROM
                        cer_medlemsdata
                       
                        LEFT JOIN cer_aftaler ON cer_aftaler.medlems_id = cer_medlemsdata.id AND cer_aftaler.hovedgruppe_id = '1'
                        LEFT JOIN cer_item ON cer_aftaler.item_id = cer_item.ITEM_ID
                        RIGHT JOIN wp_users ON wp_users.ID = cer_medlemsdata.wp_user_ID
                       
                    WHERE
                        cer_medlemsdata.id > '0'
                       
                    ORDER BY
                        cer_medlemsdata.medlemsnr";

    $res = $con->query($sql_select);   
    echo "<table align='center' width='50%'>";
        echo "<tr><th>Nr</th>";
        echo "<th align='left'>Navn</th>";
        // echo "<th>Email</th>";
        echo "<th align='left'>Tlf</th>";
        echo "<th align='left'>Plads</th>";
        echo "<th>Besked</th>";
               
    if ($res->num_rows > 0) {
        while($row = $res->fetch_array()) {
            $navn = $row['f_name'] . " " . $row['m_name'] . " " . $row['l_name'];
            $tlf = "Mob: " . $row['mobil'];
            if($row['mobil'] == '' AND $row['tlf'] > '0') {
                $tlf = "Tlf: " . $row['tlf'];
                } else if($row['mobil'] == '' AND $row['tlf'] == '') {
                    $tlf = 'Ikke oplyst';
                    }
                echo "<tr><td align='center'>" . $row['medlemsnr'] . "</td>";
                echo "<td>" . $navn . "</td>";
                // echo "<td>" .  $row['user_email'] . "</td>";
                echo "<td align='left'>" . $tlf . "</td>";
                echo "<td align='left'>" . $row['itemname'] . "</td>";
                echo "<td align='center'>";
                    echo "<form name='medlems_id' method='POST' >";
                    echo "<input type='text' hidden name='navn' value='" . $navn . "' > ";
                    echo "<input type='text' hidden name='user_id' value='" . $row['wp_user_ID'] . "' > ";
                    echo "<input type='submit' name='knap' value='Send'> ";
                    echo "</form> ";
                echo "</td></tr>";
                   
        }
    echo "</table>";   
    } else {
        echo "<br>0 results";
    }
}

// ----------------------------------------------------------------------------------
$mysqli = forbind_til_database();

if(isset($_POST['knap'])) {
    $url = "http://localhost/wordpress/kontakt-medlem?wp_user_id=" . $_POST['user_id'] . "&navn=" . $_POST['navn'];
    redirect($url);
    } else {
    vis_records($mysqli);
}

$mysqli->close();
?>
Avatar billede Calle5463 Forsker
01. januar 2017 - 23:37 #3
Jeg overvejer i øvrigt at sætte dem til utf8_general_ci .....
Avatar billede vagnk Juniormester
02. januar 2017 - 03:14 #4
Min anbefaling er at lave en regulær plugin der fortager ændringerne i databasen. Dette sagt af hensyn til ændringer/opgraderinger der kommer fra WP, samt hensyn til dem der skal følge efter dig som admin.

I det foreliggende kunde du måske lave nogle kopitabeller som du kopierer indholdet af WP-tabellerne over i, og derefter laver din medlemsliste. Alternativt kunne du oversætte de specielle tegn i den php-kode du bruger. Jeg forestiller mig at listen bliver lavet i et while-loop.

Mit standard tegnsæt er latin1_danish_ci.
Avatar billede Calle5463 Forsker
02. januar 2017 - 12:37 #5
Jeg tror det er en eller anden indstilling i WordPress jeg ikke har styr på!

Tabeller sorteres alle med det samme tegnsæt (utf8_uncode_ci), og serverens (PHPMyAdmin) forbindelsestegnsæt er sat til utf8mb4_unicode_ci (kan ikke sættes til utf8_uncode_ci).

Data i tabellerne users og usermeta (som er WP's) bliver skrevet i tabellerne og vist på hjemmeside som æøåÆØÅ. (Ved brug af WP's/Ultimativ Medlems Acount)

Når jeg viser min egen medlemsliste bliver æøåÆØÅ i tabellerne til ?????? på hjemmesiden.
Avatar billede Calle5463 Forsker
03. januar 2017 - 16:46 #6
Det her løste min udfordring -

mysqli_set_charset($con,"utf8");

- indsat i bunden af min funktion der forbinder til databasen.
Avatar billede vagnk Juniormester
03. januar 2017 - 20:01 #7
Smart. Af hensyn til senere vedligehold vil jeg anbefale dig at dokumentere den et sted hvor den er til at finde.
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