openMairie.org | Démonstration | Documentation | Forum

[openrecensement] erreur SQL lors de l'edition de l'attestation


#1

Salut Florent…

Probleme de syntaxe dans le fichier ./app/pdfetat_html.php lors de l’edition des attestions

class utils - getCollectivite(): db->query(“select * from om_parametre where om_collectivite=1”); VERBOSE
class utils - database::isError(): QUERY => select * from om_etat where id=‘attestation’ and actif =‘Oui’ and om_collectivite = DEBUG
class utils - database::isError(): SGBD ERROR => nativecode=1064 ** You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ‘’ at line 1 DEBUG
class utils - database::isError(): PEAR ERROR => DB Error: syntax error DEBUG

De plus tous les caractères utf8 apparaissnt en deux caractères sur les documents PDF
pdf -> “Le signataire du présent avis certifie que…” alors que les textes sont bien encodés (UTF8) dans le navigateur

Merci encore


#2

Après avoir modifié tous les tests conditionnels du style if(DBCHARSET==“UTF8”) … pour forcer le traitement en UTF-8, Il manquait le module php-xml pour la fonction utf8_decode.
L’installation du module php-xml à résolu le problème des caractères accentués.

Question : où trouver la liste des modules php à installer obligatoirement pour openmairie?

Enfin en rétablissant les sources initiales, il s’avère que la définition (en commentaire) du CHARSET dans le fichier app/locales.inc.php, est incorrecte, il suffit de remplacer la ligne
//define(‘CHARSET’, ‘UTF-8’ );
par
define(‘CHARSET’, ‘UTF8’);
pour que l’application traite convenablement les documents en utf8.


#3

L’erreur fait suite à la requete de sélection de l’objet métier dans le fichier app/pdfetat_html.php

$sql= "select * from om_etat where id='".$obj."'"; // select obj
$sql.= " and actif='Oui'";
$sql.= " and om_collectivite ='".$_SESSION['collectivite']."'";
$res1 = $f->db->query($sql);
$f->isDatabaseError($res1);

celle-ci retourne un résultat vide car la table “actif” est une valeur 0 ou 1 et non pas Oui-Non …
donc remplacer
$sql.= " and actif=‘Oui’"; par $sql.= " and actif=‘1’";
et valider dans la table om_etat le champ “Actif” à 1 sous peine d’erreur