Forum CMS Made Simple FR

Version complète : [Résolu] Aide à Finaliser requete svp !
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: #1.9.4.2
#~ Url du site : http://www.amavie.fr
#~ Hébergeur / Soft : Gandi AI / http://www.amavie.fr
#~ Informations Système :
----------------------------------------------

Cms Version: 1.9.4.2

Installed Modules:

* CMSMailer: 2.0.1
* FileManager: 1.1.0
* MenuManager: 1.7.6
* ModuleManager: 1.4.2
* News: 2.11.3
* nuSOAP: 1.0.2
* Printing: 1.1.2
* Search: 1.6.10
* ThemeManager: 1.1.4
* TinyMCE: 2.8.4
* CGExtensions: 1.26.4
* LightBox: 1.0.1
* FormBuilder: 0.7
* Statistics: 1.1.3
* FrontEndUsers: 1.14
* CustomContent: 1.7.3


Config Information:

* php_memory_limit:
* process_whole_template: false
* output_compression: false
* max_upload_size: 10000000
* default_upload_permission: 664
* url_rewriting: none
* page_extension:
* query_var: page
* image_manipulation_prog: GD
* auto_alias_content: true
* locale:
* default_encoding: utf-8
* admin_encoding: utf-8
* set_names: true


Php Information:

* phpversion: 5.3.2-1ubuntu4.9.1
* md5_function: On (Vrai)
* gd_version: 2
* tempnam_function: On (Vrai)
* magic_quotes_runtime: Off (Faux)
* E_STRICT: 0
* E_DEPRECATED: 0
* memory_limit: 128M
* max_execution_time: 30
* output_buffering: 4096
* safe_mode: Off (Faux)
* file_uploads: On (Vrai)
* post_max_size: 8M
* upload_max_filesize: 2M
* session_save_path: /var/lib/php5 (1733)
* session_use_cookies: On (Vrai)
* xml_function: On (Vrai)


Server Information:

* Server Api: apache2handler
* Server Db Type: MySQL (mysql)
* Server Db Version: 5.1.41


----------------------------------------------

#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~


Bonjour,
Je suis en train d'approfondir ma petite compétence à l'utilisation de ADOdb en refaisant certains exemples proposés sur le forum, et j'ai des erreurs dont je ne comprends pas la provenance.
Merci de vos lumières !
J'ai repris les requêtes du topic http://www.cmsmadesimple.fr/forum/viewtopic.php?id=3115 (comptage d'enregistrements sur la table "content") à la fois sur mon site de test hébergé chez GandiAI (dont informations systèmes ci-dessus) et mon serveur local sous WampServer, et j'ai des résultats différents :
1 En testant sur la table "content", j'ai :
Sur serveur de production :
Balise comptage
Code :
global $gCms;
$db = &$gCms->GetDb();
     $sql = "SELECT * FROM ".cms_db_prefix()."content";
     $dbresult =& $db->Execute($sql);
echo $dbresult -> RecordCount();
Balise display_comptage
Code :
global $gCms;
$smarty = &$gCms->GetSmarty();
           $smarty_data = "{comptage}";
           $smarty->_compile_source('temporary template', $smarty_data, $_compiled );
@ob_start();
           $smarty->_eval('?>' . $_compiled);//
           $final_compiled = @ob_get_contents();
@ob_end_clean();
echo "Il y a ".$final_compiled." pages dans le site.";
Dans ma page http://www.amavie.net/index.php?page=comptage
le code {comptage}

Le résultat affiche le nombre de pages, mais pas le texte de présentation !

Sur serveur local :
Le résultat s'affiche correctement, avec le texte

[Image: resultatLocal.jpg]

Une idée de la cause de l'absence du texte sur la page du site ?

Même codes de balises, sur table ajoutée cms_0adherent_agree

Sur le site en production, j'ai de nouveau seulement le nombre d'enregistrements !
En local, avec exactement la même table, ma page s'affiche en mode dégradé texte seul jusqu'au titre de la page, et en dessous un message d'erreur de WampServer :

( ! ) Fatal error: Call to a member function RecordCount() on a non-object in C:\wamp\www\amavienet\lib\content.functions.php(969) : eval()'d code on line 5

Quand je mets CmsMs en mode debug, je n'obtiens aucun message d'erreur de Cmsms, ni en prod, ni en local !

Qui aurait une idée ?
Merci.
Citation :Dans ma page http://www.amavie.net/index.php?page=comptage
le code {comptage}

Le résultat affiche le nombre de pages, mais pas le texte de présentation !

ca n'est pas sensé être la balise {display_comptage} plutôt ?

de plus je pencherais personnellement pour une solution plus simple : une seule balise

Code :
global $gCms;
$db = &$gCms->GetDb();
     $sql = "SELECT * FROM ".cms_db_prefix()."content";
     $dbresult =& $db->Execute($sql);

if($dbresult == FALSE)
{
echo "erreur de traitement sql";
exit;
}

echo "Il y a ".$dbresult -> RecordCount()." pages dans le site.";

tu peux également t'inspirer de cet article pour pousser un peu adodb
Aîe aîe aîe ... ouille ... l'inattention ...!
Merci Bess : bien sûr que c'était {display_comptage} pour afficher le résultat proprement ! (et c'est ce que j'avais en local, mais copié trop vite ce matin !)
Merci aussi pour le lien vers le blog : ouf enfin du français ... ! (ma pauv vieille tête n'arrive plus à suivre à la fois l'anglais et le langage de requête objet pourtant bien pratique quand je vois le code des exemples !)

Toujours est-il que, même avec ton code simplifié, j'ai le résultat correct sur le site de production :
http://www.amavie.net/index.php?page=comptage
Alors que j'ai une erreur de traitement sql en local ... sans que WampServer ne donne de code erreur cette fois !

Un utilisateur de wampServer aurait une idée ?
Voilà ma config locale :
----------------------------------------------

Citation :Cms Version: 1.9.4.2

Installed Modules:

* CMSMailer: 2.0.1
* FileManager: 1.1.0
* MenuManager: 1.7.6
* ModuleManager: 1.4.2
* News: 2.11.3
* nuSOAP: 1.0.2
* Printing: 1.1.2
* Search: 1.6.10
* ThemeManager: 1.1.4
* TinyMCE: 2.8.4
* FormGen: .01
* Skeleton: 1.8.1


Config Information:

* php_memory_limit:
* process_whole_template: false
* output_compression: false
* max_upload_size: 10000000
* default_upload_permission: 664
* url_rewriting: none
* page_extension:
* query_var: page
* image_manipulation_prog: GD
* auto_alias_content: true
* locale:
* default_encoding: utf-8
* admin_encoding: utf-8
* set_names: true


Php Information:

* phpversion: 5.3.4
* md5_function: On (Vrai)
* gd_version: 2
* tempnam_function: On (Vrai)
* magic_quotes_runtime: Off (Faux)
* E_STRICT: 0
* E_DEPRECATED: 0
* memory_limit: 128M
* max_execution_time: 60
* output_buffering: 1
* safe_mode: Off (Faux)
* file_uploads: On (Vrai)
* post_max_size: 10M
* upload_max_filesize: 10M
* session_save_path: c:/wamp/tmp (0777)
* session_use_cookies: On (Vrai)
* xml_function: On (Vrai)


Server Information:

* Server Api: apache2handler
* Server Db Type: MySQL (mysql)
* Server Db Version: 5.1.53
----------------------------------------------
Merci.
En "attendant", je vais tester sur Gandi puisque le code fonctionne y compris sur ma table ajoutée !
http://phplens.com/lens/adodb/docs-adodb...ecordcount

Citation :we will buffer all rows and return a count of the rows after all the records have been retrieved.

pas terrible question perf pour faire un compteur....

je te conseille une requete sql appropriée :

select count(*) from ...

voir l'exemple dispo dans l'article du blog que je t'ai donné
Merci bess !
En réalité, je ne cherche pas à faire un compteur ... je testais seulement cet exemple pour comprendre le fonctionnement et la syntaxe de ADOdb !

Je constate qu'une partie de la difficulté que je rencontre viens de WampServer et pas forcément de mes requêtes, puisque quand je monte sur mon serveur de production, ça fonctionne, y compris sur une des tables de mon application !

Donc je vais clore ce topic, et peut-être chercher de nouveau sur le forum de WampServer (pour l'instant je n'y ai pas trouvé de réponse adaptée!).
Citation :je testais seulement cet exemple pour comprendre le fonctionnement et la syntaxe de ADOdb
va voir ici http://adodb.sourceforge.net/ et le http://phplens.com/lens/adodb/docs-adodb.htm et aussi http://phplens.com/phpeverywhere/adodb_french
Bonsoir,
jce76350 a écrit :
Citation :je testais seulement cet exemple pour comprendre le fonctionnement et la syntaxe de ADOdb
va voir ici http://adodb.sourceforge.net/ et le http://phplens.com/lens/adodb/docs-adodb.htm et aussi http://phplens.com/phpeverywhere/adodb_french

Merci Jce !
J'ai déjà fait et refait certains exemples ... qui fonctionnent, mais mes propres requêtes restent ... infructueuses !
Je reviens dans la soirée !
Bonjour,
J'ai ré-activé ce topic pour donner la partie de code qui fonctionne (ça peut servir à d'autres qui sait !) :

Donc il s'agit d'afficher certains champs extrait de ma table cms_0agree, filtrés sur la valeur de la variable $username
Code :
global $gCms;
$db = &$gCms->GetDb();
echo "<table>";

$username='plorton_AT_ plorton.fr'; //modif email by JCE ne pas mettre email en clair sur un forum

$query = "SELECT a.civilite, a.nom, a.prenom, a.adresse, a.cp, a.ville, a.agree, a.dateAgrement, a.rcpro FROM ".cms_db_prefix()."0agree a  WHERE a.email LIKE '$username' ";

$dbretour = &$db->Execute($query);//exécution de la requête
if($dbretour === false) { echo "La requête provoque une erreur !";exit();}

while ($row = $dbretour->FetchRow())
{
echo <<<AFFICHE
<tr>
    <td class="colIntitules">-&nbsp;Praticien(ne)&nbsp;:&nbsp;</td>
    <td class="colDonnees">{$row['civilite']}&nbsp;{$row['prenom']}&nbsp;{$row['nom']}</td>
</tr>

<tr>
    <td colspan="2">afficher les chams utiles !
    </td>
</tr>
AFFICHE;
}
echo "</table>";
//
Le résultat visible ici http://www.amavie.fr/index.php?page=testReq1.

Ma difficulté arrive ensuite :
la condition du filtre doit être l'utilisateur qui viens de s'identifier par Feu pour souscrire une assurance.
J'ai essayé diverses syntaxes en utilisant les jointures avec les tables de Feu ...
Code :
SELECT f2.username, a.civilite, a.nom, a.prenom, a.adresse, a.cp, a.ville, a.agree, a.dateAgrement, a.rcpro FROM
cms_feusers_loggedin AS f1 LEFT JOIN cms_feusers_users AS f2
    ON f1.userid = f2.id // résultat = email du souscripteur
LEFT JOIN cms_0agree AS a
    ON f2.username = a.email
En français, la requête doit :
Séléctionner certains champs de la table cms_0agree
quand la valeur du champs cms_0agree.email = valeur du chams cms_feusers_users.username correspondant à l'id de l'utilisateur connecté soit cms_feusers_loggedin.userid

Le résultat reste vide !

Et ... comment faire si plusieurs utilisateurs sont connectés en même temps ?
J'ai essayé de créer une variable de session intégrée au gabarit de connexion, sans succès !

Merci de vos aides !
Je tiens juste à rappeler de penser à utiliser cet appel pour $gCms :
Code :
$gCms = cmsms(); //global $gCms;

Donc un début de code tel que celui-ci :
Code :
global $gCms;
$db = &$gCms->GetDb();
Devrait être tel que çà :
Code :
$gCms = cmsms();
$db = &$gCms->GetDb();
ou çà
Code :
$db = cmsms()->GetDb();

C'est pour la compatibilité à long terme selon Robert Campbell (Calguy1000).
Bonjour,

kraygoon a écrit :Je tiens juste à rappeler de penser à utiliser cet appel pour $gCms :
Code :
$gCms = cmsms(); //global $gCms;

Donc un début de code tel que celui-ci :
Code :
global $gCms;
$db = &$gCms->GetDb();
Devrait être tel que çà :
Code :
$gCms = cmsms();
$db = &$gCms->GetDb();
ou çà
Code :
$db = cmsms()->GetDb();

C'est pour la compatibilité à long terme selon Robert Campbell (Calguy1000).

Merci de ce rappel utile : j'ai justement lu hier soir l'arrivée de la version 1.10 Beta ..., avec les avantages énormes en gain mémoire entr'autre ...et l'inconvénient de certaines incompatibilités DEFINITIVES de codage !
Va falloir que chacun reçoive l'info ... qui est déjà passée ici et là, mais il me semble sans que ce soit une assez forte incitation à mettre à jour son code ... mais aussi ses connaissances et pratiques ! En tout cas, c'est mon cas : quand les "nouvelles" conventions sont arrivées, j'ai eu du mal à comprendre le pourquoi et le comment des "équivalences" de code
Code :
$gCms = cmsms();
$db = &$gCms->GetDb();   equivalent à    $db = cmsms()->GetDb();
Je vois bien une seule ligne au lieu de deux, mais selon quelle(s) règles passe-t-on de l'une à l'autre ? ...
Je reporte et continue ce fil dans les annonces http://www.cmsmadesimple.fr/forum/viewto...520#p22520

Bon, toujours est-il que cela ne me donne pas une piste de solution à ma difficulté immédiate !
N'aurais-tu pas une suggestion Kraygoon ?
Bonjour JCE
Citation :$username='plorton_AT_ plorton.fr'; //modif email by JCE ne pas mettre email en clair sur un forum
... et merci : je m'aperçois ce matin que tu as occulté l'adresse que j'avais mis en clair (une vieille pratique ... du temps où !).
Faut vraiment que je me mette aux bonnes pratiques !
Message reçu.
Me revoilà,
D'abord pour donner une version répondant aux "bonnes pratiques" de l'état de ma requête qui répond à la première partie de ma question (si ça peut servir ...) :

Donc il s'agit d'afficher certains champs extrait de ma table cms_0agree, filtrés sur la valeur de la variable $username
Code :
$db = &$gCms->GetDb();

echo "<table>";

$username='toto'

$query = "SELECT a.civilite, a.nom, a.prenom, a.adresse, a.cp, a.ville, a.agree, a.dateAgrement, a.rcpro
FROM ".cms_db_prefix()."0agree a  
WHERE a.email = '$username' ";

$dbretour = &$db->Execute($query);//exécution de la requête
if($dbretour === false) { echo "La requête provoque une erreur !";exit();}

while ($row = $dbretour->FetchRow())
{
echo <<<AFFICHE
<tr>
    <td class="colIntitules">-&nbsp;Praticien(ne)&nbsp;:&nbsp;</td>
    <td class="colDonnees">{$row['civilite']}&nbsp;{$row['prenom']}&nbsp;{$row['nom']}</td>
</tr>

<tr>
    <td colspan="2">afficher les champs utiles !
    </td>
</tr>
AFFICHE;
}
echo "</table>";
//

Et je clos ce topic !
Merci de vos aides.