Probleem met database collatie
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
Je toevoeging had ik nog niet gezien.
Gewijzigd op 27/09/2010 10:27:03 door - SanThe -
Jelmer rrrr op 27/09/2010 10:33:09:
Zou dit, direct na het verbinden met je database, helpen?
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:
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:
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:
Indien "ja", dan moet jouw coderegel waarschijnlijk meteen na die verbindingsregel staan?
Jelmer rrrr op 27/09/2010 10:33:09:
Zou dit, direct na het verbinden met je database, helpen?
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:
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:
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:
Indien "ja", dan moet jouw coderegel waarschijnlijk meteen na die verbindingsregel staan?
Toevoeging op 27/09/2010 10:51:15:
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:
Indien "ja", dan moet jouw coderegel waarschijnlijk meteen na die verbinding regel staan?
Jelmer rrrr op 27/09/2010 10:33:09:
Zou dit, direct na het verbinden met je database, helpen?
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:
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?
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:
Indien "ja", dan moet jouw coderegel waarschijnlijk meteen na die verbinding regel staan?
Gewijzigd op 27/09/2010 10:46:28 door Sam Clauw
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
Jelmer rrrr op 27/09/2010 10:33:09:
Zou dit, direct na het verbinden met je database, helpen?
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:
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
}
?>
$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? :)
Code (php)
1
2
3
4
5
6
7
8
9
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 . "'";
?>
$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