Probleem met database collatie

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sam Clauw

Sam Clauw

27/09/2010 10:21:32
Quote Anchor link
Ik heb het probleem via Google al meermaals tegengekomen. Sommigen vinden een oplossing, anderen dan weer niet. Ik maak jammer genoeg deel uit van die anderen, en probeer het via PhpHulp op te lossen. Mijn dank ik groot voor diegene die me een duidelijke oplossing kan bieden ;)

Ik situeer mijn probleem: mensen moeten een aanwezigheidsformulier invullen. Dit formulier wordt nadat alles correct werd ingevuld, doorgestuurd naar m'n mysql database. Dit lijkt met goed te lukken, de gegevens komen allemaal binnen.

Mijn probleem is echter het volgende: speciale tekens worden blijkbaar niet ondersteund. é, ç, à, è, ü, ... worden weergegeven als é ç é & è Ã... Ik begrijp ondertussen dat dit vast en zeker met de collatie van de tabel te maken heeft. Ik heb m'n tabel en m'n varcharvelden al op "utf8_unicode_ci", "utf8_general_ci" en "utf8_swedish_ci" geplaatst, maar die tekens blijven op onverklaarbare wijze verkeerd binnen stromen.

De php instructie "htmlspecialchars" kan ik niet gebruiken, want de klant wil de gegevens uit de database gewoon naar een Excel2000 file kunnen downloaden. Het is met andere woorden érg belangrijk dat die tekens meteen goed in de database komen te staan.

Kan iemand mij hier uit dit probleem helpen? Ik heb het altijd al vreemd gevonden waarom die tekensets bestaan, maar er nog nooit echt bij stil moeten staan. Nu sta ik in feite met m'n rug tegen de muur en zal uiteindelijk een gat in de lucht springen wanneer het me duidelijk wordt! Alvast bedankt voor de moeite die jullie voor mij willen doen ;)

N.B.: kan misschien handig zijn, maar m'n karakterset van m'n html file is de volgende:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Gewijzigd op 27/09/2010 10:25:08 door Sam Clauw
 
PHP hulp

PHP hulp

24/12/2024 13:42:11
 
- SanThe -

- SanThe -

27/09/2010 10:26:09
Quote Anchor link
Echo je ze ook onder utf-8?

Je toevoeging had ik nog niet gezien.
Gewijzigd op 27/09/2010 10:27:03 door - SanThe -
 
Jelmer -

Jelmer -

27/09/2010 10:33:09
Quote Anchor link
Zou dit, direct na het verbinden met je database, helpen?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
mysql_query("SET NAMES 'utf8'")
?>
 
Sam Clauw

Sam Clauw

27/09/2010 10:45:02
Quote Anchor link
Jelmer rrrr op 27/09/2010 10:33:09:
Zou dit, direct na het verbinden met je database, helpen?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
mysql_query("SET NAMES 'utf8'")
?>

Lukt dit ook wanneer er een verbinding gemaakt wordt via mysqli? M'n regel om te verbinden met de DB ziet er namelijk zo uit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $subscription = new mysqli(MYSQL_SERVER,MYSQL_USER,MYSQL_PASS,MYSQL_DB); ?>


Indien "ja", dan moet jouw coderegel waarschijnlijk meteen na die verbinding regel staan?

Toevoeging op 27/09/2010 10:49:26:

Sam Clauw op 27/09/2010 10:45:02:
Jelmer rrrr op 27/09/2010 10:33:09:
Zou dit, direct na het verbinden met je database, helpen?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
mysql_query("SET NAMES 'utf8'")
?>

Lukt dit ook wanneer er een verbinding gemaakt wordt via mysqli? M'n regel om te verbinden met de DB ziet er namelijk zo uit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $subscription = new mysqli(MYSQL_SERVER,MYSQL_USER,MYSQL_PASS,MYSQL_DB); ?>


Indien "ja", dan moet jouw coderegel waarschijnlijk meteen na die verbindingsregel staan?




Toevoeging op 27/09/2010 10:50:07:

Sam Clauw op 27/09/2010 10:45:02:
Jelmer rrrr op 27/09/2010 10:33:09:
Zou dit, direct na het verbinden met je database, helpen?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
mysql_query("SET NAMES 'utf8'")
?>

Lukt dit ook wanneer er een verbinding gemaakt wordt via mysqli? M'n regel om te verbinden met de DB ziet er namelijk zo uit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $subscription = new mysqli(MYSQL_SERVER,MYSQL_USER,MYSQL_PASS,MYSQL_DB); ?>


Indien "ja", dan moet jouw coderegel waarschijnlijk meteen na die verbindingsregel staan?

Toevoeging op 27/09/2010 10:51:15:

Jelmer rrrr op 27/09/2010 10:33:09:
Zou dit, direct na het verbinden met je database, helpen?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
mysql_query("SET NAMES 'utf8'")
?>

Lukt dit ook wanneer er een verbinding gemaakt wordt via mysqli? M'n regel om te verbinden met de DB ziet er namelijk zo uit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $subscription = new mysqli(MYSQL_SERVER,MYSQL_USER,MYSQL_PASS,MYSQL_DB); ?>


Indien "ja", dan moet jouw coderegel waarschijnlijk meteen na die verbinding regel staan?
Gewijzigd op 27/09/2010 10:46:28 door Sam Clauw
 
Jelmer -

Jelmer -

27/09/2010 10:52:10
Quote Anchor link
Jep, naja, die query moet uitgevoerd worden voordat je INSERT of SELECT queries gaat uitvoeren wil die wijziging van NAMES van kracht zijn op die queries. Best logisch eigenlijk :P
 
Sam Clauw

Sam Clauw

27/09/2010 10:53:20
Quote Anchor link
Jelmer rrrr op 27/09/2010 10:33:09:
Zou dit, direct na het verbinden met je database, helpen?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
mysql_query("SET NAMES 'utf8'")
?>

Lukt dit ook wanneer er een verbinding gemaakt wordt via mysqli? M'n regel om te verbinden met de DB ziet er namelijk zo uit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $subscription = new mysqli(MYSQL_SERVER,MYSQL_USER,MYSQL_PASS,MYSQL_DB); ?>


Indien "ja", dan moet jouw coderegel waarschijnlijk meteen na die verbinding regel staan?

M'N EXCUSES VOOR DIE VELE QUOTES. IK PROBEER ZE TE VERWIJDEREN DOOR M'N BERICHT AAN TE PASSEN, MAAR ZE KOMEN ER STEEDS AUTOMATISCH IN TE STAAN. 'T IS M'N EERSTE POST MET DE NIEUWE PHPHULP, SORRY VOOR DIT VOORVAL. KAN IEMAND DIT ALSNOG VOOR MIJ WAT PROPERDER PLAATSEN? THX!

Toevoeging op 27/09/2010 10:58:26:

Ik heb nu het volgende geprobeerd:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

        $subscription
= new mysqli(MYSQL_SERVER,MYSQL_USER,MYSQL_PASS,MYSQL_DB);
        
        mysql_query("SET NAMES 'utf8'");
        
        $sql = "SELECT email FROM registrations WHERE email = '" . $email . "' OR name = '" . $name . "' OR address = '" . $address . "'";
        
        if(!$result = $subscription->query($sql)){
            trigger_error('Fout in query:' . $subscription->error);
        }
else{ // als de e-mail nog niet in de database voor komt

        }
?>


En ik krijg de volgende error wanneer ik m'n formulier verstuur:

Warning: mysql_query() [function.mysql-query]: Access denied for user 'www-data'@'localhost' (using password: NO) in /var/www/vhosts/Southantwerp.com/httpdocs/vip/index.php on line 58

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /var/www/vhosts/Southantwerp.com/httpdocs/vip/index.php on line 58

Ik doe dus weeral iets verkeerds? :)
 
Jelmer -

Jelmer -

27/09/2010 11:21:47
Quote Anchor link
Jep, je moet die query met je eigen verbinding uitvoeren. Blijkbaar gebruik je MySQLi (wat een stuk beter is dan mysql_query etc gebruiken) dus dan wordt het
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$subscription
->query("SET NAMES 'utf8'");
?>
 
Sam Clauw

Sam Clauw

27/09/2010 11:33:47
Quote Anchor link
De foutmelding van daarnet ben ik alvast kwijt. Dit staat nu in men php file:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php

$subscription
= new mysqli(MYSQL_SERVER,MYSQL_USER,MYSQL_PASS,MYSQL_DB);
        
        $subscription->query("SET NAMES 'utf8'");
        
        $sql = "SELECT email FROM registrations WHERE email = '" . $email . "' OR name = '" . $name . "' OR address = '" . $address . "'";

?>


Het oorspronkelijke probleem blijft echter bestaan: die speciale tekens komen er maar niet door. Ongelooflijk :s
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.