Installation phpMyConferences - Ian`s Web Page
Transcription
Installation phpMyConferences - Ian`s Web Page
Installation phpMyConferences Y. Morère Janvier 2006 Résumé Cet article a pour but de présenter l’installation du Logiciel phpMyConferences : phpMyConferences est un outil intuitif de gestion de conférences. Il est developpé par l’équipe Sedre (Soutien en Développement pour la Recherche) http://sedre.loria.fr/. L’intérêt principal de cet outil est qu’il sépare complètement la partie présentation de la conférence (Les pages web regroupant les informations de la conférence : présentation, comités, appel à communication etc..) de la partie gestion des communications (soumission, relecture, acceptation etc...). La distribution choisie pour l’installation est une Gentoo. Mais tout autre distribution Linux fait l’affaire, il suffit d’installer le trio Apache/PHP/Mysql ainsi qu’un gestionnaire d’envoi de courrier électronique. Table des matières 1 Introduction 1.1 Prérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Fonctionnalités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Informations d’administration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Installation 2.1 Installation Mysql . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Installation Apache et PHP . . . . . . . . . . . . . . . . . . . . . . . 2.3 PhpMyAdmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4 Installation ssmtp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5 Préparation de la base de données . . . . . . . . . . . . . . . . . . . . 2.5.1 Création d’un nouvelle base . . . . . . . . . . . . . . . . . . . 2.5.2 Ajout d’un utilisateur de base de données (autre que root) . . 2.5.3 Configuration des droits du nouvel utilisateur sur la base créée 2.5.4 Essai connexion nouvel utilisateur . . . . . . . . . . . . . . . . 2.6 Installation phpMyConferences . . . . . . . . . . . . . . . . . . . . . 3 Configuration et 3.1 Configuration 3.2 Configuration 3.3 Configuration 3.4 Configuration utilisation phpMyConferences des informations générales . . . . . . . . . . . des options d’envoi d’email . . . . . . . . . . . du contrôle d’accès . . . . . . . . . . . . . . . des options de soumission des communications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2 2 3 . . . . . . . . . . 4 4 5 7 9 10 10 14 15 17 19 . . . . 25 26 27 30 32 Documentation phpMyConferences Version 0.1 3.5 3.6 3.7 3.8 3.9 3.10 3.11 Configuration des options d’évaluation des soumissions Configuration des informations des éventuels ateliers . Configuration des informations pour les inscriptions . Configuration et édition des listes, badges et étiquettes Gestion du site web . . . . . . . . . . . . . . . . . . . . Surveillance, sauvegarde et statistiques . . . . . . . . . Messagerie interne au site . . . . . . . . . . . . . . . . 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 38 39 47 50 58 63 4 Correction de Bugs en Vrac pour la version 8.0.2 64 5 conclusion 82 1 Introduction Le logiciel phpMyConferences est un outil intuitif de gestion de conférences. Il est developpé par l’équipe Sedre (Soutien en Développement pour la Recherche) http://sedre.loria.fr/. L’intérêt principal de cet outil est qu’il sépare complètement la partie présentation de la conférence (Les pages web regroupant les informations de la conférence : présentation, comités, appel à communication etc..) de la partie gestion des communications (soumission, relecture, acceptation etc...). Nous allons voir la configuration globale de phpMyconferences, en partant d’un système sans Apache, ni Php, ni mysql. En effet le logiciel a besoin de ce trio pour fonctionner. Puis nous installerons le logiciel et verrons comment l’utiliser. 1.1 Prérequis B La version de php doit être PHP4 ou PHP5 (4.3.0 minimum à cause de la fonction get_file_contents). Nous verrons comment modifier le code si vous avez une version antérieur de PHP et que vous ne pouvez pas la mettre à jour (Cf : correction de bugs en vrac). De plus PHP doit être compilé avec le support MySQL. N’oublier pas le support GD si vous voulez des graphiques pour la partie statistique du site. B Les versions de MySQL testées sont les suivantes : 3.21.x, 3.22.x, 3.23.x, 4.0.x et 4.1.x. B Un navigateur B un système de mailling automatique (au moins un client mail qui doit pouvoir relayer au serveur mail de votre FAI ou Université). Ceci nécessite une bonne configuration de la ligne SMTP du fichier php.ini. Sur les distributions que j’ai testée (gentoo et debian j’ai juste eu à configurer le client SMTP) B modifier la taille maximale (MAX_FILE_SIZE) dans le fichier php.ini des fichiers téléchargeable afin que les utilisateurs ne soient pas bloqués par un taille de fichier trop petite. B La version d’apache est peu importante, cela fonctionne sur apache1.3 et apache2. 1.2 Fonctionnalités B Gestion de l’évènement . Titre, lieu . Dates, date d’inscription, date de soumission, date de relecture B Gestion des papiers : Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 B B B B B B B B B 3 . Soumission des papiers . Choix des formats de papier électronique . Droits de visualisation . Association papier-relecteur . Acceptation/rejet des papiers => mél automatique . 6 Critères d’évaluation plus commentaire Gestion des utilisateurs : . 3 groupes avec des droits différents : . Administrateur, Comité de programmes : gestion de la conférence . Relecteurs : accès uniquement aux papiers soumis . Identification basée sur l’adresse mél des utilisateurs Gestion des ateliers : . Date, heures, responsable, description, URL. Gestion des inscriptions : . Catégorie des participants paramétrable . Suivi des inscriptions, paiement, documents requis . Facturation, modes de paiement paramétrables . Génération automatique du formulaire d’inscription avec les options dépendante de la catégorie Gestion des hébergements : . Type, association catégorie de participant/logements . Nombre de place, suivi du remplissage Gestion des évènements externes : . Visites, repas, etc. . Nombre d’évènements illimités définis par l’utilisateur. Gestion du courrier éléctronique : . 7 méls automatiques paramétrables par l’interface administrateur. . Envoi de messages par groupes d’utilisateur. Création de listes : . Listes paramétrables par interrogation SQL de la base de données. . Sortie des listes sous forme PDF ou HTML. . Génération automatique des badges des participants en PDF. . Création des planches d’étiquettes pour les publipostages. Divers : . Statistiques d’accès au site Web et aux papiers . Sauvegarde automatique de la base de données . Accès sécurisé par phpSecurePages Avantages concurrentiels : . Toute la gestion de la conférence se fait par l’interface Web,aucun script à paramétrer. . Pas de CGI-BIN, le site Web de la conférence et la gestion sont dans le même répertoire. . Interface administrateur multilingue (en cours d’implémentation). 1.3 Informations d’administration B Le logiciel est entièrement écrit en PHP et stocke toutes les informations relatives à la conférence dans une base de données MySQL. B L’installation par l’administarteur du serveur Web est réduite au plus simple : création d’un compte MySQL et d’une base de données Tout le reste se fait par phpMyConferences, création des tables y compris, à condition que l’on puisse créer les tables via le Web. B Pour l’utilisateur/administrateur de la conférence, l’installation consiste à désarchiver le Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 4 paquetage du logiciel à la racine du répertoire de la conférence. B Le premier accès à la racine du site demande les paramètres d’accès à mySql, crée les tables et un fichier de configuration en PHP avec les infos sur le serveur MySQL. B La partie publique du site (présentation, comités, appel à communication etc..) n’est pas écrite dans phpMyConferences. La présentation de la conférence doit être réalisée à part et placée dans un répertoire du site de la conférence variable/siteweb. Cela permet de ne pas être tributaire d’une présentation figée par les auteurs du logiciels. Les fonctionnalités de phpMyConferences seront utilisable par l’intermédiaire de simples liens dans les pages que vous aurez créées. 2 2.1 Installation Installation Mysql Avec gentoo, c’est assez simple. Il s’agit de bien configurer la variable USE de votre fichier make.conf et d’utiliser la commande emerge. USE="mmx mmxext sse 3dnowext apache2 esd ffmpeg network nsplugin v4l win32codecs xine gtk gtk2 gnome cdparanoia bash-completion cups encode foomaticdb glut ftp imagemagick ipv6 lesstif mysql nls spell eds opengl pam xv type1-fonts bitmap-fonts truetype-fonts ogg oggvorbis ssl threads readline foomaticdb gif png jpeg quicktime xml2 sdl java crypt pdflib berkdb mpeg truetype dvd alsa cdr gnome hal howl mikmod -arts -kde -ldap -qt " est un bon début puis # emerge mysql Après quelques minutes (tout depend de votre machine), mysql est installé sur votre machine. On va configurer pour que le serveur se lance au démarrage : # rc-update add mysql default puis on installe effectivement les bases de données par défaut : # /usr/bin/mysql_install_db et finalement on lance le serveur pour ne pas avoir à rebooter la machine. # /etc/init.d/mysql start On vient ensuite configurer l’administrateur des bases de données qui aura pour login root (mais il ne s’agit pas du compte administrateur Unix, ici c’est le DBA database administrator). Un nom plus approprié serait effectivement plus judicieux. Ici pas besoin d’être l’administrateur Unix. $ /usr/bin/mysqladmin -u root password ’mot_de_passe’ puis on teste la connexion : $ mysql -u root -p On s’arrête là pour l’instant au niveau de la base de données. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 2.2 5 Installation Apache et PHP Grâce à la gestion des dépendances sous gentoo, nous allons installer un seul paquet qui imposera l’installation du serveur web apache et de php4. # emerge mod_php Une fois le tout compilé et installé, il faut modifier quelques fichiers de configuration. Dans un premier temps, il faut dire à apache qu’il doit charger la module PHP. Ceci se passe dans le fichier /etc/conf.d/apache2 # vim /etc/conf.d/apache2 // faire la modification suivante APACHE2_OPTS="-D DEFAULT_VHOST -D SSL -D PHP4" Om modifie ensuite le fichier /etc/apache2/modules.d/70_mod_php.conf # vim /etc/apache2/modules.d/70_mod_php.conf <IfDefine PHP4> # Load the module first <IfModule !sapi_apache2.c> LoadModule php4_module </IfModule> modules/libphp4.so # Set it to handle the files <IfModule mod_mime.c> AddType application/x-httpd-php .php AddType application/x-httpd-php .phtml AddType application/x-httpd-php .php3 AddType application/x-httpd-php .php4 AddType application/x-httpd-php-source .phps </IfModule> AddDirectoryIndex index.php index.phtml </IfDefine> # Fix some bugs <Files *.php> # keep this the same size as post_max_size in php.ini LimitRequestBody 8388608 </Files> <Files *.phps> # keep this the same size as post_max_size in php.ini LimitRequestBody 8388608 </Files> On va modifier la variable upload_max_filesize # vim /etc/php/apache2-php4/php.ini ;;;;;;;;;;;;;;;; ; File Uploads ; Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 6 ;;;;;;;;;;;;;;;; ; Whether to allow HTTP file uploads. file_uploads = On ; Temporary directory for HTTP uploaded files (will use system default if not ; specified). ;upload_tmp_dir = ; Maximum allowed size for uploaded files. upload_max_filesize = 2M ; modifier ici pour avoir la taille max que vous désirez Afin d’éviter les erreurs du type Warning: xxx: URL file-access is disabled in the server configuration in yyy on line zz Il faut modifier une variable dans php.ini. Cette erreur est dûe à une désactivation de la directive allow_url_fopen contenue dans le fichier de configuration php.ini. La désactivation de cette directive est généralement réalisée par mesure de sécurité. ;;;;;;;;;;;;;;;;;; ; Fopen wrappers ; ;;;;;;;;;;;;;;;;;; ; Whether to allow the treatment of URLs (like http:// or ftp://) as files. ; allow_url_fopen = On ; Closed for security - <[email protected]> allow_url_fopen = On puis on lance apache2 et on configure pour qu’il se lance au démarrage. rc-update add apache2 default /etc/init.d/apache2 start Si lors du démarrage du serveur apache vous avez l’erreur suivante : httpd: Could not determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName modifiez le fichier httpd.conf et ajouter la ligne suivante : ServerName localhost Voilà, normalement tout est opérationnel pour l’installation de phpMyConferences. Un dernier test pour voir si le module PHP est activé : vim /var/www/localhost/htdocs/test.php <? phpinfo(); ?> puis à l’aide d’un navigateur aller à l’adresse http://localhost/test.php et là vous devriez avoir un tableau résumant la configuration de PHP sur votre serveur. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 2.3 7 PhpMyAdmin Afin de na pas avoir à écrire les commandes SQL pour la création de la base de donnée relative à la conférence, nous allons installer phpMyAdmin, qui va nous permettre par l’intermédiaire de notre navigateur de réaliser graphiquement toues les actions nécessaires à la mise en place de la base pour la conférence. La commande suivante permet d’installer phpmyadmin : emerge phpmyadmin Ensuite nous allons configurer le fichier conf.inc.php afin que notre administrateur root des bases de données puisse utiliser phpmyadmin. On va aussi utiliser la configuration cookie. Commencer par copier le fichier config.default.php vers config.inc.php puis éditez le comme suit : //$cfg[’Servers’][$i][’controluser’] = ’pma’; // MySQL control user settings // (this user must have read-only //$cfg[’Servers’][$i][’controlpass’] = ’1593922121604117530’; // access to the "mysql/user" $cfg[’Servers’][$i][’controluser’] = ’root’; // MySQL control user settings // (this user must have read-only $cfg[’Servers’][$i][’controlpass’] = ’mot_de_passe’; // access to the "mysql/user" // and "mysql/db" tables). // and "mysql/db" tables). // The controluser is also // used for all relational // features (pmadb) $cfg[’Servers’][$i][’auth_type’] = ’cookie’; // Authentication method (config, http or cookie based)? et voilà en allant à l’adresse suivante http://localhost/phpmyadmin vous devriez avoir la page suivante. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 8 Il ne vous reste plus qu’à entrer le login root et le mot de passe choisis et vous pouvez utiliser phpmyadmin. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 2.4 9 Installation ssmtp Nous allons configurer notre SMTP afin qu’il utilise le serveur mail de notre FAI ou celui de notre université (le plus simple). Pas besoin de transformer votre machine en serveur de courrier. Installez, ssmtp par la commande : # emerge ssmtp puis nous allons configurer SMTP pour qu’il fasse du ”relaying” sur le serveur mail de notre FAI ou université/société. # vim /etc/ssmtp/ssmtp.conf # # /etc/ssmtp.conf -- a config file for sSMTP sendmail. # # The person who gets all mail for userids < 1000 # Make this empty to disable rewriting. root=postmaster # The place where the mail goes. The actual machine name is required # no MX records are consulted. Commonly mailhosts are named mail.domain.com # The example will fit if you are in domain.com and your mailhub is so named. #mailhub=mail # Example for SMTP port number 2525 # mailhub=mail.your.domain:2525 # Example for SMTP port number 25 (Standard/RFC) # serveur smtp du FAI/Université pour le "relaying" mailhub=smtp.wanadoo.fr # Example for SSL encrypted connection # mailhub=mail.your.domain:465 # Where will the mail seem to come from? rewriteDomain=athome.org # cette option doit ^ etre remplie sinon sendmail refuse d’envoyer le mail # The full hostname # Gentoo bug #47562 # Commenting the following line will force ssmtp to figure # out the hostname itself. #hostname=biboo # Set this to never rewrite the "From:" line (unless not given) and to # use that address in the "from line" of the envelope. FromLineOverride=YES Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 10 # Use SSL/TLS to send secure messages to server. #UseTLS=YES # Use SSL/TLS certificate to authenticate against smtp host. #UseTLSCert=YES # Use this RSA certificate. #TLSCert=/etc/ssl/certs/ssmtp.pem Ensuite on peux essayer d’envoyer un mail par la commande : sendmail votre_adresse_mail@votre_domaine test test CTRL-D Normalement vous devez recevoir le mail (si vous avez indiqué votre adresse ;-)). 2.5 Préparation de la base de données Avant d’installer phpMyConferences, il est nécessaire de créer une base de données sur Mysql et de donner les droits nécessaires à l’utilisateur qui va gérer la conférence (utilisateur différent du DBA : database administrator, pour des questions de sécurité). Il est possible que vous n’ayez pas les droits nécessaires pour réaliser ces opérations si vous n’êtes pas l’administrateur de la machine sur laquelle se trouvera le site de votre conférence. Dans ce cas, il faut demander à votre adminitrateur système de vous créer tout cela. Si vous êtes administrateur de la machine, voici la marche à suivre en image à l’aide de phpmyadmin. 1. Création de la base de données de la conférence par le DBA ; 2. Création de l’utilisateur de la base de donnée de la conférence par l’administrateur ; 3. Modification des droits d’accès sur la base de la conférence pour la gestion par l’utilisateur de la base de données de la conférence. 2.5.1 Création d’un nouvelle base Dans un premier temps connectez vous à l’adresse suivante afin d’utiliser phpmyadmin http: //localhost/phpmyadmin vous devriez avoir la page suivante. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 11 Il ne vous reste plus qu’à entrer le login root (DBA) et le mot de passe choisi et vous pouvez utiliser phpmyadmin. Vous arrivez alors sur la page suivante. Vous devez saisir le nom de la base de données qui Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 12 contiendra les données de la conférence dans le champs prévu à cette effet Créer une base de données, puis appuyez sur le bouton Créer. Vous obtenez la page suivante : Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 13 Il est bien sur possible de tout faire en mode console si vous avez un accès Terminal, ou que phpmyadmin n’est pas installé sur votre serveur. yann@biboo ~ $ mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 to server version: 4.1.14-log Type ’help;’ or ’\h’ for help. Type ’\c’ to clear the buffer. mysql> show databases; +------------+ | Database | +------------+ | mysql | | test | +------------+ 3 rows in set (0.15 sec) mysql>CREATE DATABASE ‘conference‘ ; mysql> show databases; +------------+ | Database | +------------+ | conference | | mysql | | test | +------------+ 3 rows in set (0.15 sec) mysql> Nous allons ensuite ajouter un utilisateur. Pour l’instant séléctionnez la base que vous venez de créer dans le menu déroulant en haut à gauche comme montré dans la figure suivante. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 2.5.2 14 Ajout d’un utilisateur de base de données (autre que root) Dans un premier temps cliquez sur la petite maison en haut à gauche (Accueil), qui vous permet de revenir sur les fonctionnalités principales de phpmyadmin. Cliquez sur le lien Privilèges. Vous obtenez la figure suivante : Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 15 Entrez les informations concernant votre nouvel utilisateur. Pour l’instant ne rentrez aucuns privilèges globaux. Finalement cliquez sur exécuter. La même chose en version console : mysql> \u mysql mysql> GRANT USAGE ON * . * TO ’conference’@’localhost’ IDENTIFIED BY ’****’ WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 ; 2.5.3 Configuration des droits du nouvel utilisateur sur la base créée Nous allons donnez des privilèges supplémentaires au nouvel utilisateur sur la base de la conférence. Pour cela sélectionnez la base de votre conférence dans la partie Privilèges spécifiques à une base de données. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 16 Vous obtenez la page suivante : Cochez alors les privilèges désirés. Dans notre cas, comme il s’agit de l’administrateur de la conférence, nous allons sélectionner tous les droits sur les données et la structure de la base. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 17 En mode console cela donne la chose suivante : mysql> GRANT SELECT , INSERT , UPDATE , DELETE , CREATE , DROP , INDEX , ALTER , CREATE TEMPORARY TABLES ON ‘conference‘ . * TO ’toto’@’localhost’; Normalement vous avez un nouvel utilisateur qui se possède les droits pour être administrateur de votre conférence. Pour terminer la préparation à l’installation de phpMyConferences, nous allons essayer de nous connecter à phpMyadmin avec le nouvel utilisateur. 2.5.4 Essai connexion nouvel utilisateur Dans un premier temps déconnectez vous de phpMyadmin, puis retentez une connexion avec le login et mot de passe de l’administrateur de la conférence. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 18 Voila on y est presque. Vous êtes maintenant connecté en tant qu’administrateur de la base de données de la conférence. C’est donc ce compte qu’il faudra utiliser lors de l’installation de phpMyConferences. Voici ce que cela donne en mode console : Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 19 yann@biboo ~ $ mysql -u conference -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 53 to server version: 4.1.14-log Type ’help;’ or ’\h’ for help. Type ’\c’ to clear the buffer. mysql> show databases; +------------+ | Database | +------------+ | conference | | test | +------------+ 2 rows in set (0.00 sec) mysql> On remarque que l’on a accès qu’à la base publique (test) et la base conference. La base mysql est cachée, seulement utilisable par l’administrateur de mysql. Nous pouvons donc passer à l’installation de phpMyConferences. 2.6 Installation phpMyConferences Dans un premier temps, vérifier que : B Si vous êtes administrateur de votre système : 1. vous possédez un login et mot de passe pour l’utilisation de mysql 2. le nom de la base de données qui sera utilisée pour la conférence B Si vous n’êtes pas administrateur de la machine d’hébergement 1. que vous y possédez un compte pour déposer vos fichiers et les scripts de phpMyConferences 2. que l’administrateur vous y a créé un compte mysql et une base pour le bon fonctionnement de phpMyConferences. Voilà, c’est parti ; on va commencer par télécharger l’archive de phpMyConferences sur le site http://sedre.loria.fr/phpMyConferences/ à la page download http://sedre.loria.fr/ phpMyConferences/download.html. Si vous êtes administrateur de la machine d’hébergement vous devez créer un répertoire qui contiendra tous les fichiers du site de la conférence. Ensuite il suffit de décompresser l’archive et de déplacer ou copier son contenu à l’endroit choisi. biboo yann # cd /var/www/localhost/ cgi-bin/ error/ htdocs/ icons/ .keep biboo yann # cd /var/www/localhost/htdocs/ biboo htdocs # ls apache_pb2.gif apache_pb.gif index.html phpmyadmin testing.php biboo htdocs # mkdir conference biboo htdocs # biboo htdocs # cp /home/yann/sources/phpMyConferences_8.0.2.tgz . biboo htdocs # tar xzf phpMyConferences_8.0.2.tgz Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 20 biboo htdocs # ls apache_pb2.gif conference phpmyadmin phpMyConferences_8.0.2.tgz apache_pb.gif index.html phpMyConferences_8.0.2 testing.php biboo htdocs # biboo htdocs # mv phpMyConferences_8.0.2/* conference/ biboo htdocs # ls apache_pb2.gif conference phpmyadmin testing.php apache_pb.gif index.html phpMyConferences_8.0.2.tgz biboo htdocs # Ensuite changer les droits du répertoire de la conférence pour que l’utilisateur ”Serveur Web” soit propriétaire de l’arborescence. Vous pouvez connaitre l’utilisateur sous lequel est labncé le serveur web par les commandes suivantes : biboo htdocs # more /etc/apache2/httpd.conf | grep "User " # Processor - Specify a User and Group for a specific child process. # . On SCO (ODT 3) use "User nouser" and "Group nogroup". User apache biboo htdocs # more /etc/apache2/httpd.conf | grep "Group " # Processor - Specify a User and Group for a specific child process. # . On SCO (ODT 3) use "User nouser" and "Group nogroup". # when the value of (unsigned)Group is above 60000; # don’t use Group #-1 on these systems! Group apache biboo htdocs # On attribue ensuite ce répertoire à l’utilisateur ”apache”. Pourquoi ? Parce que ... lorsque les scripts php seront exécutés, ils le seront par le serveur web qui n’est autre qu’”apache”. Si vous n’êtes pas l’administrateur de votre machine, téléchargez tout le contenu de l’archive décompressée sur votre compte de la machine d’hébergement. Ensuite il est nécessaire de fixer des droits d’accès à certains répertoires et fichiers pour le bon fonctionnement des scripts. Si vous êtes administrateur de la machine d’hébergement lancer simplement le script d’installation install.sh qui suit : #!/bin/sh echo echo echo echo echo echo echo "************************************"; "* *"; "* phpMyConferences *"; "* *"; "* Linux/Unix Install *"; "* *"; "************************************"; # Backup conf.php if it is present if test -f conf.php; then cp conf.php conf.php.bak fi Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 21 # Set conf.php to an empty file cp conf.php.default conf.php # Set conf.php to be writable chmod 777 conf.php # Some directories need to be writable chmod -R 777 archive chmod -R 777 temp chmod -R 777 user chmod -R 777 variable chmod -R 777 common/visiteurs/include/caches echo echo echo echo echo echo echo ""; "Chmod done, you can launch the installation."; ""; "Open the file <www.your-host.com>/<your-install-dir>/ in your browser."; ""; ""; "************************************"; Je pense que le mode ”777” est un peu excessif. Je le changerai en ”664” pour les fichiers et ”775” pour les répertoires ce qui donne : biboo biboo chmod chmod chmod chmod chmod chmod conference # touch conf.php conference # chmod 664 conf.php -R 775 archive -R 775 temp -R 775 user -R 775 variable -R 775 common/visiteurs/include/caches -R 775 /html/admin/participants/pdf L’option -R permet de le faire pour tous les sous répertoires. J’ai rajouté aussi le répertoire /html/admin/participants/pdf pour le téléchargement du logo lors de la création des étiquettes (mais j’y reviendrai plus tard). Voilà tout est prêt. Lancer maintenant votre navigateur préféré (firefox, dillo, lynx ;-)). Puis allez à l’adresse http://localhost/conference/ si vous êtes directement sur la machine d’hébergement, ou l’adresse que vous a fournit votre administrateur système. Vous obtenez la fenêtre suivante, qui vous rappelle les prérequis ainsi que les modifications de droits nécessaires. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 22 Si tout est ok, vous pouvez cliquer sur le lien next, qui va nous amener à la fenêtre de configuration de phpMyConferences en terme de base de données. C’est la fenêtre suivante : Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 23 Lisez attentivement ce qui est écrit. En effet il faut tout d’abord remplir le formulaire avec les données de l’administrateur de la conférence : B Prénom B Nom B email qui servira aussi de login pour l’accès à l’interface de gestion de la conférence B le mot de passe à stocker (en clair ! ! ! pour l’instant dans la base) B une confirmation de mot de passe Ensuite viennent les données importantes concernant la base de données où seront stockées toutes les informations. Comme il est rappellé dans cette page, si le serveur de base de données n’est pas installé sur la même machine que le serveur Apache, il sera nécessaire de réaliser une installation manuelle. C’est d’ailleurs le cas pour les FAI comme Free. C’est à dire que vous devrez utiliser le fichier database.sql qui sera générer par le script d’installation et placé dans le répertoire archive/backup/ à partir de la racine du répertoire de votre conférence. Ce fichier ressemble à ceci : # # Structure de la table ‘visiteurs‘ # # Création: Jeudi 24 Juillet 2003 à 16:49 # Dernière modification: Lundi 11 Ao^ ut 2003 à 15:10 # CREATE TABLE ‘visiteurs‘ ( ‘AGENT‘ char(100) default NULL, ‘REFERER‘ char(200) default NULL, ‘ADDR‘ char(50) NOT NULL default ’’, ‘DATE‘ char(20) default NULL, ‘HOST‘ char(100) default NULL, ‘CODE‘ int(11) NOT NULL auto_increment, ‘REF_HOST‘ char(100) default NULL, PRIMARY KEY (‘CODE‘), KEY ‘ADDR‘ (‘ADDR‘) ) TYPE=MyISAM AUTO_INCREMENT=2427 ;#%% # # Structure de la table ‘workshop‘ # # Création: Jeudi 24 Juillet 2003 à 16:49 # Dernière modification: Mercredi 06 Ao^ ut 2003 à 15:41 # CREATE TABLE ‘workshop‘ ( ‘id_workshop‘ int(11) NOT NULL auto_increment, ‘name‘ varchar(100) NOT NULL default ’’, ‘reference‘ varchar(50) NOT NULL default ’’, ‘description‘ text NOT NULL, ‘date‘ date NOT NULL default ’0000-00-00’, ‘time‘ varchar(20) NOT NULL default ’’, ‘responsable_name‘ varchar(30) NOT NULL default ’’, ‘responsable_mail‘ varchar(50) NOT NULL default ’’, Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 24 ‘URL‘ varchar(90) NOT NULL default ’’, ‘salle‘ varchar(40) default NULL, PRIMARY KEY (‘id_workshop‘) ) TYPE=MyISAM AUTO_INCREMENT=17 ;#%% etc..... Il vous faudra alors installer la base manuellement à l’aide de ce fichier par l’intermédaire de phpmyadmin et de la commande importer qui vous permet de choisir le fichier contenant les commandes mysql à exécuter pour la création de la base. Il ne vous reste qu’à choisir le fichier archive/backup/database.sql et exécuter. En mode console la commande ressemble à ceci : $ mysql -u conference -p conference < database.sql Dans le cas où la machine est identique pour le serveur Apache et le serveur Mysql, l’installation se fait automatiquement. Il faut alors remplir le champ avec le nom de la base de données, puis le nom de la machine qui contient serveur Apache et Mysql (dans ce cas localhost la plupart du temps). N’oubliez pas de remplir votre mot de passe mysql. Remplissez ensuite Internet Path avec l’adresse du site de votre conférence. Ceci est important dans la cas de gestion par virtual host. Si vous êtes sur une machine de test et que tout se fait en local, localhost/conference/ suffit. Normalement la variable Server Path est remplie automatiquement. Voila il ne vous reste plus qu’à cliquer sur Valider dans la cas d’une installation automatique et Création du script dans le cas d’une installation manuelle. Si tout se passe bien dans la cas de la configuration automatique, vous obtenez la page de connexion à phpMyConferences, sinon, la page d’installation réapparait avec des messages d’erreurs en fin de page. Vous devrez alors analyser ces messages afin de voir ce qui ne va pas, corriger et valider à nouveau. Les données sont inscrites dans le fichier conf.php. En voici un exemple : <?php /**************************************** * phpMyConferences * * * Configuration file * * *****************************************/ define("SQL_SERVEUR","localhost"); define("SQL_USER","conference"); define("SQL_PASSWD","mot_de_passe"); define("SQL_BDD","conference"); //Never change the value of KEY define("KEY",’OS3’); define("ROOT_URL","http://localhost/conference"); define("VERSION","beta 8.0.2"); define("TAILLE","50"); define("ROOT_DIR_PATH","/var/www/localhost/htdocs/conference/"); ?> Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 25 Si vous voyez qu’une variable n’est pas correcte, modifiez là et réessayer l’adresse de votre conférence. Voilà, maintenant phpMyConferences est installé, nous allons voir comment l’utiliser au mieux. 3 Configuration et utilisation phpMyConferences Connectez vous à l’adresse du site de votre conférence, par exemple http://localhost/conference/. Vous devez voir apparaı̂tre une fenêtre de connexion comme suit : Entrez l’adresse email de l’administrateur de la conférence (en fait le super_administrateur lorsque vous avez réalisé l’installation), puis le mot de passe. Cliquez sur la ”checkmark” verte ou appuyez sur entrée, vous devez obtenir la page suivante : Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 3.1 26 Configuration des informations générales Voilà, nous sommes maintenant l’administrateur du site de la conférence. Nous nous occuperons ici uniquement de la configuration de la partie gestion de la conférence. La partie publique, composée de pages web statiques présentant votre conférence, n’est pas abordée ici. Mais vous avez juste à créer quelques pages HTML, qui contiendront des liens vers les fonctionnalités de phpMyConferences : B la soumissions d’articles : Proposer un article B les inscriptions à la conférence : Registration B les différents ateliers proposés lors de la conférence : Ateliers proposés B l’accès aux relecteurs : Accès relecteurs B l’accès administrateur : Accès administrateur Sur la page courante, vous renseignerez les champs concernant la conférence avec les dates principales : Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 3.2 27 Configuration des options d’envoi d’email Avant de commencer à inscrire les personnes des comités et relecteurs, il est nécessaire de configurer les options des emails. En effet, lors de l’inscription des personnes, des emails sont envoyés automatiquement. Si vous ne configurez pas les options de ces emails, ce sont les valeurs par défaut qui seront prises en comptes. Pour cela allez sur l’onglet e-mail puis lien options. Vous avez alors accès à différents champs pré-remplis qu’il vous faudra modifier pour votre utilisation. Attention : Ne pas oublier de sauver le champ juste après sa modification sous peine la perdre. Toutes ces informations sont stockées dans le répertoire variable/file de phpMyConferences et non dans la base de données (j’en ai d’ailleurs fais les frais lors d’une migration de version 7 vers une cersion 8). Voici quelques exemples de configuration en images. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 Y. Morère 28 L.A.S.C. Documentation phpMyConferences Version 0.1 Y. Morère 29 L.A.S.C. Documentation phpMyConferences Version 0.1 30 La partie envoi de ce même onglet permet l’envoi au coup par coup d’email par l’intermédaire de l’interface de phpMyConferences. Cette partie possède la particularité de pouvoir envoyer un email à une série de personne. Par exemple ”tous les relecteurs, tous les auteurs de papiers etc...”. Pour l’instant cette liste est prédéfinie et non configurable. 3.3 Configuration du contrôle d’accès Nous passons maintenant à la partie contrôle d’accès, qui va permettre de donner différents droits aux personnes qui gèrent la conférence. Nous avons 3 types de droits d’accès : B les Super-Utilisateurs qui possèdent tous les droits de gestion de la conférence ; B Le personnes du comités de programmes qui ont accès à la gestion de la conférence. Seuls les onglets contr^ ole d’accès, Site Web et Administration ne leurs sont pas accessibles. Pour le reste ils possèdent les mêmes droits que les administrateurs. Leurs tâches principales sera d’administrer les relectures des communications. B Les relecteurs qui ont un accès privilégié pour la relecture et notation des communications qui leur ont été affectées par les personnes du comité de programme et les super-utilisateurs Dans un premier temps il s’agit d’inscrire chaque personne dans la bonne classe. Chaque fois qu’une personne est inscrite elle reçoit un email. S’il s’agit d’utilisateur avec un certain pouvoir (l’une des 3 classes précédentes), ils seront convier à se connecter sur le site pour renseigner des informations personnelles ainsi qu’un mot de passe de connexion. Voici quelques exemples de création d’utilisateurs : Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 Y. Morère 31 L.A.S.C. Documentation phpMyConferences Version 0.1 3.4 32 Configuration des options de soumission des communications Nous allons maintenant voir les onglets dans l’ordre, en commançant par l’onglet papier. Nous allons voir la configuration des options de soumission des communications. Dans l’onglet options, nous renseignerons les formats de fichiers acceptés en relecture pour la conférence, dans les champs extentions et type. La date de soumission est automatiquement récupérée du premier onglet de configuration de la conférence. ensuite il est possible de choisir le type d’accès à la liste des communications soumises. Je vous conseille de laisser l’option choisie par défaut Les relecteurs ont accès seulement aux papiers qui leur ont été assignés. Ensuite libre à vous d’afficher ou non les auteurs des communications aux relecteurs. Ceci n’est utile que si vous avez demandé une soumission d’article dans un format sans auteur (sinon les auteurs sont dans le titre de la publication). Vous avez ensuite accès à la liste des communications soumises grâce au lien liste des papiers. Cette page permet de tout connaı̂tre sur une communication et d’avoir accès aux notations et commentaires des relecteurs. Il est aussi possible de télécharger la communication ainsi que l’effacer de la liste. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 33 Ensuite si vous avez des communications, il vous est possible à vous (super utilisateur) et aux personnes du comité de programme d’affecter des relecteurs aux communications. Pour ajouter un relecteur à un papier il suffit de le choisir dans la liste déroulante. Pour avoir les informations concernant le relecteur, il suffit de cliquer que la première petite icône à gauche du nom. Pour l’enlever, il suffit de cliquer sur la deuxième petite icône à gauche du nom. Lorsqu’un relecteur n’a pas encore évalué le papier qui lui a été soumis il apparaı̂t en vert, sinon il apparaı̂t en gris. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 34 Le dernier lien accepter-rejeter, permet aux personnes autorisées, à la vue des évaluations d’accepter ou rejeter un papier. On accède aux évaluations par l’intermédaire de l’icône information. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 35 Il est possible de notifier à l’auteur la décision du comité de programme concernant la communication. Il est bien sur possible de choisir l’acceptation/rejet des communications et de notifier en bloc aux contacts. 3.5 Configuration des options d’évaluation des soumissions Le premier onglet option doit être rempli automatiquement avec la date choisie dans l’onglet home. Si la date ne vous convient, il est toujours possible de la modifier ici. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 36 Voici maintenant le lien critères. phpMyConferences permet de centraliser la relecture de papier. Dans ce cadre, il est possible de fournir des critères d’évualuation que les relecteurs noteront entre les bornes que vous aurez choisies. De plus il est possible de réaliser une pondération sur chaque critère. Ensuite vous pouvez saisir une description du critère choisi. Tous les critères ajoutés apparaı̂tront lors de l’évaluation d’une communication par un relecteur. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 Y. Morère 37 L.A.S.C. Documentation phpMyConferences Version 0.1 38 Le dernier lien permet de voir sous la forme d’un tableau, l’état des évaluations des communications soumises par critère. 3.6 Configuration des informations des éventuels ateliers Si lors de votre conférence, vous désirez faire des ateliers (workshop), il est possible de les lister dans la base de données afin qu’ils apparaissent sur votre site. Pour cela il suffit de passer par le lien éfiter/insérer et de renseigner les champs avec les informations sur l’atelier. Pour avoir la liste des ateliers, il suffira d’ajouter le lien http://human07.univ-metz.fr/user/workshop_ list.php dans une de vos pages web du site. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 3.7 39 Configuration des informations pour les inscriptions Voici la plus grosse partie, de la gestion de conférence par phpMyConferences. Il s’agit de la gestion des inscriptions à la conférence. Cette gestion est assez complète car elle permet de gérer les catégories de participant, les modes de paiements, les documents requis, les hébergements et les extras (par exemple les accompagnants, repas de gala etc...). Des factures peuvent aussi être éditées par l’intermédaire de l’interface. Le premier lien options permet de définir la date limite d’inscription ainsi que l’adresse de retour des documents nécessaires. C’est ici aussi que l’on fixe la monnaie locale. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 40 Le second lien permet de définir différentes catégories de personnes pour l’inscription. En effet le plupart du temps le tarif est différent suivant que la personne est étudiante, ou un industriel etc... On peut ainsi définir différentes catégories qui apparaı̂tront dans la formulaire d’inscription à la conférence. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 41 Le troisième lien permet de définir les différents moyens de paiement de la conférence. Il s’agit de remplir le nom du moyen de paiement et sa description. Ainsi ces différents moyens de paiement apparaı̂tront sur le formulaire d’enregistrement. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 42 Il est aussi possible de demander des documents en fonction des catégories de personnes. Par exemple, on demandera aux étudiants inscrits de fournir la photocopie de leur carte d’étudiant. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 43 Le lien suivant hébergement va nous permettre de proposer des lieux d’hébergement aux congressistes. De plus il sera possible de gérer les places disponibles de ces hotels lors de l’inscription, et par la suite d’intégrer dans la facture les prix de l’hébergement. Il est aussi possible de faire apparaı̂tre ou non, sur le formulaire d’inscription, le choix de l’hébergement en fonction de la catégorie. La partie extra permet de traiter les choses non prévues directement dans la gestion de la conférence, comme par exemple, la participation ou non au repas de gala, la présence d’un accompagnant etc... De même ceci apparaı̂tra sur le formulaire d’inscription. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 44 Le lien résumé permet d’afficher un résumé des inscriptions réalisées. On y retrouve les nombres d’inscrit classés par catégorie. Puis dans une seconde partie un résumé concernant les hébergements et les extras.. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 45 Le dernier lien concerne la partie paiement de la conférence. On y retrouve la liste des inscrits Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 46 avec la somme due pour la conférence. On peut par cette interface supprimer un inscrit, modifier/editer sa facture et notifier qu’il a bien payé en cliquant sur la somme due. Il est aussi possible de trier les listes simplement en cliquant sur la petite flèche inversée dans les entêtes de colonnes. Voici un exemple de facture imprimable : Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 3.8 47 Configuration et édition des listes, badges et étiquettes Afin de réaliser des états sur la base de donnée, l’onglet Listes permet de réaliser des requêtes sur la base de données afin de générer des listes. Par défaut très peu de listes sont éditables, et il faut certaines bases en langage SQL afin de générer de nouvelles listes. Le premier lien de l’onglet édition des listes permet d’éditer des listes sous différents formats (pdf, html et texte). Bien sur il faut avoir auparavant créer ces listes par l’intermédiaire du second lien Création des listes. Cette partie permet d’enregistrer des requêtes SQL qui fournissent un résultat attendu comme une liste qu’il sera possible d’utiliser dans la partie édition des listes. Voici en image la partie édition des liste. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 48 Puis la partie Création des listes, Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 49 avec un exemple de requête qui permet d’obtenir la liste des papiers de la conférence. La partie suivante, Création des badges, permet d’éditer les badges des personnes participant à la conférence. On peut choisir différentes options puis on obtient un fichier PDF à télécharger contenant des pages A4 avec les badges. Attention : Ne pas oublier d’effacer un précédent logo avant d’en recharger un nouveau. Ensuite recharger la page Web, car le précédent logo est encore dans le cache (le fichier image possède toujours le même nom logo.jpg). On peut faire la même chose pour des étiquettes à poser sur les bureaux. Il s’agit de la partie Création d’étiquettes. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 3.9 50 Gestion du site web Comme je l’ai dit précédemment, la partie publique du site Web est complètement indépendante de la partie gestion. Il suffit d’insérer les liens vers les fonctionnalités de phpMyConferences dans les pages web de votre site. Ces pages web seront déposées dans le répertoire variable/site web de l’arborescence de phpMyConferences. L’onglet Site WEB résume les fonctionnalités de phpMyConferences ainsi que les liens à insérer dans vos pages web. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 51 Voici un exemple de formulaire de soumission de communication. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 52 Voici un exemple de formulaire d’inscription à la conférence. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 53 Voici un exemple de site web minimaliste (il se résume à une page) regroupant tous les liens vers les fonctionnalités de phpMyConferences. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 54 Voici un exemple de page listant les ateliers de la conférence. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 55 Voici la page de login des Relecteurs, Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 56 Puis une fois le login et mot de passe saisis, le relecteur est dirigé vers la page qui regroupe les communications qu’il doit relire. Il peut alors télécharger la communication, la lire et l’évaluer, puis en cliquant sur l’icône avec le stylo, réaliser son evaluation en ligne. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 57 Il rentre les différentes notes correspondantes aux critères prédéfinis, et remplis les champs de commentaires. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 58 Un fois validée, son évaluation est enregistrée dans la base de données. Il peut aussi à tout moment revoir son évaluation et modifier la notation. 3.10 Surveillance, sauvegarde et statistiques La dernière partie concerne, la maintenance du site de la conférence. Par l’intermédiaire de cet onglet, il est possible de logger, sauvegarder/restaurer et consulter les statistiques du site Web. Le premier lien log permet de visualiser les principales activités sur le site de phpMyConferences. Les inscriptions,les mises à jour etc... tout ceci classé par mois. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 59 Le second lien serveur donne les informations sur les numéros de version des différents serveurs et librairies utilisés par phpMyConferences. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 60 Le troisième lien base de données, permet de sauvegarder la base de données de phpMyConferences. Pout l’instant la restauration n’est pas fonctionnelle par l’intermédiaire du site Web, mais elle peut être faite en mode console ou via phpMyadmin. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 61 Le dernier lien permet de visualiser les statistiques complètes du site web. Elles regroupent, les informations de connexion des visiteurs : date, heure, systèmes d’exploitation, navigateur. De plus ces informations sont résumées de manières graphiques. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 Y. Morère 62 L.A.S.C. Documentation phpMyConferences Version 0.1 3.11 63 Messagerie interne au site Lors de votre connexion au site d’administration de la conférence, à tout moment vous pouvez contacter les différents membres enregistrés de la conférence (Super utilisateur, comité de programme et relecteurs) par l’intermédiaire d’une messagerie interne. Son fonctionnement est très simple et est décrit dans les deux captures qui suivent. Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 4 64 Correction de Bugs en Vrac pour la version 8.0.2 Lors de la mise en place de phpMyConferences, j’ai réalisé un certain nombre de corrections. Les voici en vrac : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% encore une petite erreur lors de la consultation "administration -> base de données" Warning: mysql_connect(): Access denied for user ’root’@’localhost’ (using password: NO) in /var/www/human07/admin/administration/backup.php on line 26 par contre la restauration n’a pas l’air de fonctionner Enfin attention, j’ai des fichiers au formats MS Windows (des ^M en fin de ligne) et d’autres au formats Unix Yann fichier backup.php je pense que cette ligne n’y est pas étrangère... depuis quand on se connecte en root sans mot de passe ;) $conn = mysql_connect("localhost","root","") or die(mysql_error()); il est s^ urement possible de passer les paramètres... je pense que l’ancienne était mieux <? @session_start(); require_once("../conf.php"); // number of backups to keep $backups = 5; $conn = mysql_connect($dbhost,$dbuser,$dbpass) or die(mysql_error()); et tout de suite cela marche beaucoup mieux ;) // hours between backups $interval = 24; Yann %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // 1 only with ZLib support, else change value to 0 $compression = 0; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Donc voici les corrections concernant la partie "database" de la partie admin en fichiers attachés // full path to phpMyBackup $path=ROOT_DIR_PATH."archive/backup"; Au fait elle existe la fonction javascript ’restore’... je ne l’ai pas trouvée en fait, des petits bugs qui bloquaient la sauvegarde. notamment l’oubli de global $dbname dans les fonctions get_content et get_def, j’en ai profité pour les passer en paramètres ensuite les liens qui ne marchait pas, cela venait de la mauvaise syntaxe dans la création des liens href. Attention aux \" et ’ " imbriqués en fait j’ai comparé avec le fichier de la version 7 qui marchait Y. Morère // mySQL - variables $dbhost=SQL_SERVEUR; $dbuser=SQL_USER; $dbpass=SQL_PASSWD; $dbname=SQL_BDD; // DO NOT CHANGE THE LINES BELOW $version = "0.4 beta"; // flush(); //$conn = mysql_connect("localhost","root","") or die(mysql_error()); //$conn = mysql_connect(SQL_SERVER,SQL_USER,SQL_PASSWD) or die(mysql_error()); $conn = mysql_connect($dbhost,$dbuser,$dbpass) or die(mysql_error()); L.A.S.C. Documentation phpMyConferences Version 0.1 $path = $path . "/"; 65 <? /******* Security *************/ include_once("./../conf.php"); $requiredUserLevel = array(1); require(ROOT_DIR_PATH."/common/phpSecurePages/secure.php"); function get_def($table,$conn,$dbname) { // global $conn; // global $dbname; $def = ""; /******************************/ $def .= "DROP TABLE IF EXISTS $table;#%%\n"; if(isset($_SESSION[’language’])) $def .= "CREATE TABLE $table (\n"; require_once(ROOT_DIR_PATH."/common/lang/".$_SESSION[’language’]); // $result = mysql_db_query(SQL_BDD, "SHOW FIELDS FROM $table",$conn); $result = mysql_db_query($dbname, "SHOW FIELDS FROM $table",$conn); include "backup.php"; while($row = mysql_fetch_array($result)) { ?> $def .= " $row[Field] $row[Type]"; <table cellspacing="1" cellpadding="2" border="0" bgcolor="#354463" width="798"> if ($row["Default"] != "") $def .= " DEFAULT ’$row[Default]’"; <tr> if ($row["Null"] != "YES") $def .= " NOT NULL"; <td bgcolor="#BFC4CB" class="medium_black"> if ($row[Extra] != "") $def .= " $row[Extra]"; <table cellpadding="2" cellspacing="5" border="0"> $def .= ",\n"; <tr> } <td align="center" valign="top"> $def = ereg_replace(",\n$","", $def); <table cellspacing="0" cellpadding="0" border="0" bgcolor="#BFC4CB" valign="top"> $result = mysql_db_query($dbname, "SHOW KEYS FROM $table",$conn); <tr> //$result = mysql_db_query(SQL_BDD, "SHOW KEYS FROM $table",$conn); <td class="medium_black"> while($row = mysql_fetch_array($result)) { <table cellspacing="0" cellpadding="4" border="0" bgcolor="#9CA4B1" width="550" valign="top"> $kname=$row[Key_name]; <tr> if(($kname != "PRIMARY") && ($row[Non_unique] == 0)) $kname="UNIQUE|$kname"; <td bgcolor="#9CA4B1" width="5" align="center">:.</td> if(!isset($index[$kname])) $index[$kname] = array(); <td bgcolor="#BFC4CB"><b><font color="#333333">phpMyBackup v.<? echo $version;?></font></b></ $index[$kname][] = $row[Column_name]; </tr> } </table> while(list($x, $columns) = @each($index)) { </td> $def .= ",\n"; </tr> if($x == "PRIMARY") $def .= " PRIMARY KEY (" . implode($columns, ", <tr> ") . ")"; else if (substr($x,0,6) == "UNIQUE") $def .= " UNIQUE ".substr($x,7)."<td (" bgcolor="#BFC4CB" . implode($columns, width="798" ", ") . ")"; valign="top" height="250"> else $def .= " KEY $x (" . implode($columns, ", ") . ")"; <p> } <font color="#333333"> $def .= "\n);#%%"; return (stripslashes($def)); A database backup is automatically made every day. <br> <a href=index.php?page=AdminDatabase&save=TRUE" class="main">dump</a> <? function get_content($table,$conn,$dbname) { if ($file!="") { // global $conn; $filename = $file; // global $dbname; set_time_limit(180); $content=""; if ($compression ==1) $file=gzread(gzopen($path.$file, "r"), 10485760); // $result = mysql_db_query(SQL_BDD, "SELECT * FROM $table",$conn); else $file=fread(fopen($path.$file, "r"), 10485760); $result = mysql_db_query($dbname, "SELECT * FROM $table",$conn); $query=explode(";#%%\n",$file); while($row = mysql_fetch_row($result)) { for ($i=0;$i < count($query)-1;$i++) { $insert = "INSERT INTO $table VALUES ("; mysql_db_query(SQL_BDD,$query[$i],$conn) or die(mysql_error()); for($j=0; $j<mysql_num_fields($result);$j++) { } if(!isset($row[$j])) $insert .= "NULL,"; echo "<b>$filename successfully restored!</b>"; else if($row[$j] != "") $insert .= "’".addslashes($row[$j])."’,"; } else $insert .= "’’,"; ?> } <table border="0" cellpadding="4"> $insert = ereg_replace(",$","",$insert); <tr align="center"> $insert .= ");#%%\n"; <td class="medium_black"><u><i>File</i></u></td> $content .= $insert; <td class="medium_black"><u><i>Date</i></u></td> } </tr> return $content; <? } //echo "$path"; $dir=opendir($path); if ($compression==1) $filetype = "sql.gz"; while ($file = readdir ($dir)) { else $filetype = "sql"; if ($file != "." && $file != ".." && eregi("\.sql",$file)) { echo "<tr><td class=’medium_black’>$file </td> if ((@filemtime($path . "0.$filetype") < time() - $interval * 3600)||$_GET[’save’]==TRUE) <td {class=’medium_black’> " . date("Y-m-d H:i",filemtime($path.$file)) . "</td> for ($i = $backups-1; $i > 0; $i--) { <td class=’medium_black’> <a href=\"javascript:restore(’$file’)\" class=’main’> $oldname = $i-1 . ".$filetype"; <td class=’medium_black’> <a href=\"../archive/backup/$file\" class=’main’>View $newname = $i . ".$filetype"; } @rename($path.$oldname,$path.$newname); } } closedir($dir); ?> $cur_time=date("Y-m-d H:i"); </table> $newfile="# Dump created with ’phpMyBackup v.$version’ on $cur_time\r\n"; </td> // $newfile .= "$dbuser $dbhost $path $dbname".’SQL_BDD SQL_USER \n\n’; </tr> // $tables = mysql_list_tables(SQL_BDD,$conn); $tables = mysql_list_tables($dbname,$conn); </table> $num_tables = @mysql_num_rows($tables); // $newfile .= "$tables $num_tables\n"; </td> $i = 0; </tr> while($i < $num_tables) { $table = mysql_tablename($tables, $i); </table> } $newfile $newfile $newfile $newfile $newfile $newfile $newfile $i++; .= .= .= .= .= .= .= "\n# ----------------------------------------------------------\n#\n"; <? "# structure for table ’$table’\n#\n"; if($mailSend>0) get_def($table,$conn,$dbname); echo" "\n\n"; <script language=’javascript’> "#\n# data for table ’$table’\n#\n"; alert(’$mailSend email(s) send’); get_content($table,$conn,$dbname); </script>"; "\n\n"; ?> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if ($compression==1) { $fp = gzopen($path."0.$filetype","w9"); gzwrite ($fp,$newfile); gzclose ($fp); } else { $fp = fopen ($path."0.$filetype","w+"); fwrite ($fp,$newfile); fclose ($fp); } } ?> fichier database.inc.php Y. Morère Bonjour, Lors de l’ajout d’un nouvel utilisateur le mot de passe generé if(!isset($pass)) $pass=str_replace(".","",crypt($nom."$CLE".$prenom,$CLE)); (common/mail/send_mail.inc.php) n’etait pas stocké dans la table personne. J’ai du ajouter Service::updateMessage("personne","passe_personne",$pass,"id_personne",$reviewer[id_personne] afin de le stocker sinon la personne recevant le mail ne pouvait pas remplir ses informations L.A.S.C. Documentation phpMyConferences Version 0.1 Si cette info peut aider qqu, Nicolas VOLLMER %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 66 if($_POST[’validate’]=="add") { $insert_comment = Service::insert_cinq_quatre("comment","id_comment","date","id_article","id_sender","comment", INTO ‘comment‘ ( ‘id_comment‘ , ‘date‘ , ‘id_article‘ , ‘id_sender‘ , ‘comment‘ ) VALUES (’’, now(), ’".$_GET[’id_article’]."’, ’$ID’, ’".$_POST[’comment’]."’)",$db_link); } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% J’ai remarqué un truc chez moi, l’envoi de mail par l’intermédiaire de email->envoi ne fonctionne pas. hope this help Yann Comme cela est placé sur un serveur Debian stable, la version de php est trop ancienne et il ne connait pas la fonction de file_get_contents %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% j’ai donc remplacé par %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% <? $lines= file(ROOT_DIR_PATH."variable/file/copy.txt"); foreach ($lines as $line) { $file_copy .= $line; } $lines = file(ROOT_DIR_PATH."variable/file/from.txt"); foreach ($lines as $line) { $file_from .= $line; } // $file_copy =file_get_contents(ROOT_DIR_PATH."variable/file/copy.txt"); // $file_from =file_get_contents(ROOT_DIR_PATH."variable/file/from.txt"); ?> je pense qu’il faudra aussi changer dans et la j’ai le bien l’interface, par contre les mails ne partent pas malgrè la boite de dialogue qui dit que tout est ok on peut aussi remplacer now() par "now()" c’est plus simple admin/participants/payment.php: $update_payment = Service::update_Deux("registration","payment",now(),"id_registration",$_GET[’id_registration’ admin/participants/payment.php: $update_document = Service::update_un_deux("registration_document","validate",now(),"id_registration",$_GET[’id_ puis dans common/service/service.php: yann Une idée ... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Je ne trouve pas la fonction now() dans le manuel php corection de bugs dans user/article.php d’ou vient cette fonction? J’ai trouvé c’est du mysql /********* record data **********/ mais visiblement elle ne marche pas dans tous les contextes... peut e ^tre des caractères à déspécialiser !!! //On remplace les espaces par des _ //$file_name=ereg_replace ("_", " ", $name); $file_name=ereg_replace (" ", "_", $name); inversion, on commence par rechercher puis ensuite on remplace ereg_replace -- Remplacement par expression rationnelle Description string ereg_replace ( string pattern, string replacement, string string ) et puis pourquoi mélanger la fonction date php et la fonction now() mysql ... puis plus loin ya encore une inversion entre répertoire et nom de fichier Bonsoir à tous ceci emp^ eche l’upload de fichier yann %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Afin de faire marcher convenablement les statistiques (je n’avais pas les graphs en images), j’ai modifié le fichier /html/common/visiteurs/include/conf.inc.php car les variables de connexion à la base n’étaient pas renseignéee, j’ai donc inclus le fichier de conf général // echo "post file !".$_FILES[’file’][’tmp_name’]."/".$_FILES[’file’][’dir’]; echo "post file !".$_FILES[’file’][’dir’]."/".$_FILES[’file’][’tmp_name’]; include(’../../conf.php’); //if(!copy($_FILES[’file’][’tmp_name’]."/".$_FILES[’file’][’dir’],ROOT_DIR_PATH."/variable/submission/$file_name")) //on peut aussi directement les fixer : moins if(!copy($_FILES[’file’][’dir’]."/".$_FILES[’file’][’tmp_name’],ROOT_DIR_PATH."/variable/submission/$file_name")) //define("SQL_SERVEUR","localhost"); //define("SQL_USER","user"); //define("SQL_PASSWD","mot de passe"); Autre petite chose ya pas de sujet dans l’email de confirmation d’envoi //define("SQL_BDD","bdd"); d’une soumission de papier !!! Yann pratique %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% par ailleurs la fonction connexion_error($lvm_connexion_error); dans le fichier /html/common/visiteurs/image-vis.php ne semble pas exister sur mon serveur ni dans les scripts présents %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Hope this help > Autre petite chose ya pas de sujet dans l’email de confirmation > d’envoi d’une soumission de papier !!! yann %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% dans user/article.php %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% $file="validate_upload"; //ça sert à quoi //à Rajouter $subject="HuMaN07 Paper Submission"; //par exemple mais c’est pas générique peut ^ etre peut on ajouter un champs "paper submission" dans email->option et avoir le fichier txt pour gérer ce sujet Yann Petit correctif, si on met include(’../../conf.php’); cela occasionne une erreur lors de la visualisation de la racine du site optez pour define("SQL_SERVEUR","localhost"); define("SQL_USER","user"); define("SQL_PASSWD","mot de passe"); define("SQL_BDD","bdd"); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% moins pratique, mais cela fonctionne. Ya surement une meilleure manière de faire... je vais chercher Bonjour, Yann Ajout d’un commentaire sur le papier lors de l’évaluation dans paper_comment.php %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Fatal error: Call to undefined function: now() in /drbd/drbd1/www/human07/html/common/paper/paper_comment.php on line 82 Pour avoir le nom de votre site dans les stats : modifier fichier /html/common/visiteurs/incl // your parameters (for graphs and titles) $lvc_site_name = "human07.univ-metz.fr"; // like ’phpInfo.net’ or ’My Web’ remplacer now() par date("y-m-d") Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 67 destination était vide. De plus le nom des champs récupérés n’étaient pas les bons. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Hope this help Bonsoir Yann Chez moi l’envoi de mail par l’interface d’administration ne marchait. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% J’ai modifié le code du fichier admin/mail/formmail_send.php comme suit avant Bonjour, la modif d’hier soir n’était pas complète, en effet l’envoi par les listes ne fonctionnait pas if(isset($query)) { // Database link voici les nouvelles modifications $mailSend=0; $mail_selection=Service::passageRequete($query); while($mail=mysql_fetch_row($mail_selection)) { $m= new Mail; // create the mail if($_POST[’from’]!=""){ $m->From(trim($_POST[’from’]));} if($_POST[’to’]!=""){ $m->From(trim($_POST[’to’]));} $m->Subject($subject); $m->Body( $message); // set the body if ($_POST[’copy’] != ""){ $m->Cc(trim($_POST[’copy’]));} $m->Priority($_POST[’priority’]) ; $m->Send(); $mailSend++; } } else { $m= new Mail; // create the mail if($_POST[’from’]!=""){ $m->From(trim($_POST[’from’]));} if($_POST[’to’]!=""){ $m->From(trim($_POST[’to’]));} $m->Subject($subject); $m->Body($message); // set the body if ($_POST[’copy’] != ""){ $m->Cc(trim($_POST[’copy’]));} $m->Priority($_POST[’priority’]); $m->Send(); $mailSend=1; } après if(isset($query)) { // Database link $mail_selection=Service::passageRequete($query); while($mail=mysql_fetch_row($mail_selection)) { $mailSend++; } } else { $m= new Mail; // create the mail //$venantde=trim($_POST[’from’]); if($_POST[’from’]!=""){ $m->From(trim($_POST[’from’]));} //$allanta=trim($_POST[’email’]); if($_POST[’email’]!=""){ $m->To(trim($_POST[’email’]));} $m->Subject($subject); $m->Body("$message","iso-8859-1"); if ($_POST[’copy’] != ""){ $m->Cc(trim($_POST[’copy’]));} //$m->Priority($_POST[’priority’]); $m->Send(); $mailSend=1; } // // set the body en fait il s’agissait d’erreur de copier-coller et du coup l’adresse de Y. Morère > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > avant if(isset($query)) { // Database link $mailSend=0; $mail_selection=Service::passageRequete($query); while($mail=mysql_fetch_row($mail_selection)) { $m= new Mail; // create the mail if($_POST[’from’]!=""){ $m->From(trim($_POST[’from’]));} if($_POST[’to’]!=""){ $m->From(trim($_POST[’to’]));} $m->Subject($subject); $m->Body( $message); // set the body if ($_POST[’copy’] != ""){ $m->Cc(trim($_POST[’copy’]));} $m->Priority($_POST[’priority’]) ; $m->Send(); $mailSend++; } } else { $m= new Mail; // create the mail if($_POST[’from’]!=""){ $m->From(trim($_POST[’from’]));} if($_POST[’to’]!=""){ $m->From(trim($_POST[’to’]));} $m->Subject($subject); $m->Body($message); // set the body if ($_POST[’copy’] != ""){ $m->Cc(trim($_POST[’copy’]));} $m->Priority($_POST[’priority’]); $m->Send(); $mailSend=1; } if(isset($query)) { // Database link $mailSend=0; $m= new Mail; // create the mail if($_POST[’from’]!=""){ $m->From(trim($_POST[’from’]));} if($_POST[’to’]!=""){ $m->To($mail);} $m->Subject($subject); $m->Body( "$message", "iso-8859-1"); set the body if ($_POST[’copy’] != ""){ $m->Cc(trim($_POST[’copy’]));} //$m->Priority($_POST[’priority’]) ; $m->Send(); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% $mailSend=0; $mail_selection=Service::passageRequete($query); while($mail=mysql_fetch_row($mail_selection)) { //echo "<DEFANGED_script language=\"javascript\">alert(\" to $mail[0] \");</script>"; $m= new Mail; // create the mail if($_POST[’from’]!=""){ $venantde=trim($_POST[’from’]); //echo "<DEFANGED_script language=\"javascript\">alert(\" from $venantde\");</script>"; $m->From(trim($_POST[’from’]));} if($mail[0]!=""){ //echo "<DEFANGED_script language=\"javascript\">alert(\" POST to $mail[0] \");</script>"; $m->To($mail[0]);} $m->Subject($subject); //echo "<DEFANGED_script language=\"javascript\">alert(\"sujet $subject\");</script>"; $m->Body( "$message", "iso-8859-1"); // set the body if ($_POST[’copy’] != ""){ $m->Cc(trim($_POST[’copy’]));} $m->Priority($_POST[’priority’]) ; $m->Send(); //$num_contact++; $mailSend++; } } else { $m= new Mail; // create the mail //$venantde=trim($_POST[’from’]); if($_POST[’from’]!=""){ $m->From(trim($_POST[’from’]));} //$allanta=trim($_POST[’email’]); if($_POST[’email’]!=""){ $m->To(trim($_POST[’email’]));} $m->Subject($subject); $m->Body("$message","iso-8859-1"); // set the body L.A.S.C. Documentation phpMyConferences Version 0.1 if ($_POST[’copy’] != ""){ $m->Cc(trim($_POST[’copy’]));} //$m->Priority($_POST[’priority’]); $m->Send(); $mailSend=1; } 68 Places disponibles: 9999 ( vide = aucune restriction ) et la tout va bien Yann %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //echo "<DEFANGED_script %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% language=\"javascript\">alert(\"$subject\");</script>"; //echo "<DEFANGED_script language=\"javascript\">alert(\"msg $msg\");</script>"; //echo "<DEFANGED_script language=\"javascript\">alert(\"from $venantde\");</script>"; //echo Bonjour, "<DEFANGED_script language=\"javascript\">alert(\"to $allanta\");</script>"; // echo "<DEFANGED_script Si vous avez plusieurs h^ otels, lors de l’inscription le calcul du co^ ut language=\"javascript\">alert(\"$_POST\[\’to\’\]\");</script>"; echo est faux. Il prend toujours le prix du dernier h^ otel. "<DEFANGED_SCRIPT language=\"JavaScript\">alert(\" mail send.\\nThank you\")</SCRIPT>"; echo " <DEFANGED_script language=’javascript’> <!--// Cela vient s^ urement de la variable ’night_price’ dont le nom est identique d’un h^ otel à l’autre (en fait le while($housing_categories) Hope this help n’est pas gérer correctement.) Yann En fait il faut faire la m^ eme chose que pour les "extra" qui sont eux ben gérer. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Yann MORERE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Bonjour %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Dans le fichier /html/admin/participants/summary.inc.php j’ai fait les modifs suivantes afin de gérer le fait que le nb de place dans les hotels n’est pas défini. Sinon lors de l’affichage, des warning de "divide by zero", et oui comme il n’a rien -> 0 est stocké dans la base. //Calcul des % si nb place définie sinon c’est 0 qui est stocké dans la base if($max_place!=0) { $presence_unvalidate_p=($presence_unvalidate/$max_place)*100; $presence_validate_p=($presence_validate/$max_place)*100; $free_p=100-$presence_unvalidate_p-$presence_validate_p; Bonjour, J’ai modifié assez profondément les fichiers registration.php new_order.php et edit_order.php pour mon application Quelques petits trucs boguent encore (selection d’une nuit dans chaque h^ otel par exemple) Maintenant, ils prennent en compte plusieurs hébergement. La méthode facturation a été corrigée. $free=$max_place-$presence_unvalidate-$presence_validate; echo" <td colspan=2 align=center valign=center class=’medium_black’> <DEFANGED_IMG src=’graph/red.jpg’ width=$presence_validate_p height=6 alt=’validate : $presence_validate place(s) (".number_format($presence_validate_p,2)." %)’><DEFANGED_IMG src=’graph/orange.jpg’ width=$presence_unvalidate_p height=6 alt=’unvalidate : $presence_unvalidate place(s) (".number_format($presence_unvalidate_p,2)." %)’><DEFANGED_IMG src=’graph/black.jpg’ width=$free_p height=6 alt=\"free : $free place(s) (".number_format($free_p,2)." %)\"> </td> voici les fichiers joints </tr>"; Yann } else { $presence_unvalidate_p=" NA "; $presence_validate_p=" NA "; $free_p=" NA "; Voici la dernière modification du fichier echo" <td colspan=2 align=center valign=center class=’medium_black’> <DEFANGED_IMG src=’graph/red.jpg’ width=$presence_validate_p height=6 alt=’validate : $presence_validate place(s) (".$presence_validate_p." %)’><DEFANGED_IMG src=’graph/orange.jpg’ width=$presence_unvalidate_p height=6 alt=’unvalidate : $presence_unvalidate place(s) (".$presence_unvalidate_p." %)’><DEFANGED_IMG src=’graph/black.jpg’ width=$free_p height=6 alt=\"free : $free place(s) (".$free_p." %)\"> </td> Le génération des bagdes et des étiquettes ne fonctionne pas du tout SInon, voici quelques idées : - Création de comptes de soumission de papier avec login mot de passe, comme cela, il serait possible de mettre à jour le papier téléchargé et les données des auteurs - Vérification à l’inscription si la personne n’est pas déjà inscrite -> j’ai pu m’inscrire plusieurs fois avec les m^ emes données... Cordialement edit_order.php On peut maintenant choisir une a plusieurs nuits par hotel. j’ai un autre soucis. J’obtient un fichier PDF vide !!!! enfin presque ya une ligne noir sur la partie supérieur de la page. Yann fichier edit_order.php <? </tr>"; /*** Edit Order ** } v 1.0 ensuite modification du traitement de la date pour que cela soit joli ************/ $date_housing_temp=str_replace(" ","/",$housing[date]); $date_housing=explode("|",$date_housing_temp); session_start(); require_once("../../conf.php"); puis plus loin //on enlève les / de trop $date_modifiee=rtrim(ltrim($date_housing[$j],"/"),"/"); echo" <tr class=’line$i’> <td class=’medium_black’> Le $date_modifiee : </td> "; //********Language**************/ if(isset($_SESSION[’language’])) require_once(ROOT_DIR_PATH."/common/lang/".$_SESSION[’language’]); require(ROOT_DIR_PATH."/common/phpSecurePages/functions.inc.php"); $requiredUserLevel = array(1, 2); require(ROOT_DIR_PATH."/common/phpSecurePages/secure.php"); A+ Yann %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //******Service********// require_once(ROOT_DIR_PATH."common/service/service.php"); // Connexion à la base //$db_link = mysql_connect(SQL_SERVEUR,SQL_USER,SQL_PASSWD); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Comme zéro est socké dans la base cela pose des pbs pour le formulaire d’inscription. En effet comme il y a un test sur les places restantes dans l’hotel... ces hotels s’affiche complet. /******** Amount Calculate ********/ $select_evenement = Service::SelectAll("evenement"); $evenement=mysql_fetch_array($select_evenement); Un moyen simple de contourner cela est de mettre un grand nombre dans Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 69 $select_registration = Service::select_where("registration","id_registration",$_GET[’id_registration’]); } $registration=mysql_fetch_array($select_registration); <!-if (isset($_POST[’mod_fee’]) and $_POST[’mod_fee’]) { // Le statut a ete modifie *{ dans le formulaire // On cherche un nouveau tarif font-size: x-small; //$select_categories=mysql_db_query(SQL_BDD,"select prices from categories } where id_categories = ’".$_POST[’id_categories’]."’",$db_link); $select_categories = Service::select_champ_where("prices","categories","id_categories",$_POST[’id_categories’]); $categories=mysql_fetch_array($select_categories); input, textarea, select { $amount=$categories[prices]; background-color: #CCCCCC; // Suppression les informations dependantes du statut font-family: verdana, arial, sans-serif; //$del_db = mysql_db_query(SQL_BDD,"delete from extra_registration font-size: where id_registration=’".$_GET[’id_registration’]."’",$db_link); 10px; $del_db = Service::delete("extra_registration","id_registration",$_GET[’id_registration’]); color: #333333; //$del_db = mysql_db_query(SQL_BDD,"delete from registration_document padding: where 0px; id_registration=’".$_GET[’id_registration’]."’",$db_link); $del_db = Service::delete("registration_document","id_registration",$_GET[’id_registration’]); } unset($_POST[’mod_fee’]); } input.red, textarea.red, select.red { background-color: #D89A8F; if (! (isset($_POST[’validate’]) or isset($_POST[’id_categories’]))) { font-family: verdana, arial, sans-serif; $_POST[’id_categories’] = $registration[id_categories]; font-size: 10px; $_POST[’mr’] = $registration[mr]; color: WHITE; $_POST[’first_name’] = $registration[first_name]; padding: 0px; $_POST[’last_name’] = $registration[last_name]; } $_POST[’title’] = $registration[title]; $_POST[’compagny’] = $registration[compagny]; info { $_POST[’adress’] = $registration[adress]; text-align: left; $_POST[’city’] = $registration[city]; font: 10px sans-serif, tahoma, verdana, geneva, helvetica, arial; $state = $registration[state]; color: #666666; $_POST[’zip_code’] = $registration[zip_code]; } $_POST[’country’] = $registration[country]; --> $_POST[’phone’] = $registration[phone]; </style> $_POST[’fax’] = $registration[fax]; <SCRIPT> $_POST[’email’] = $registration[email]; <!-$roomate = $registration[compagnon]; // $night_presence=explode("|",$registration[housing_presence]); function Lien() { $night_presence2 = $registration[housing_presence]; i = document.registration.list_categories.selectedIndex; // echo "$night_presence2<br>"; if (i == 0) return; $night_presence1=explode("|",$registration[housing_presence]); statut = document.registration.list_categories.options[i].value; // alert(statut); for ($i=0;$i<count($night_presence1);$i++) document.forms.registration.id_categories.value = statut; { document.forms.registration.mod_fee.value = statut; $indic=$i+1; document.forms.registration.submit() $night_presence[$indic]=explode(":",$night_presence1[$i]); } } // --> // var_dump($night_presence1); </SCRIPT> // var_dump($night_presence); </head> $_POST[’online_information’] = $registration[online_information]; $day_presence = $registration[day_presence]; $_POST[’tab_presence’]=explode(" | ",$day_presence); $document_req = $registration[document]; $payment = $registration[payment]; $_POST[’amount’] = $registration[amount]; $_POST[’comments’] = $registration[comments]; $date = $registration[date]; <BODY> <h1><center><font color="#0000FF">- Edition d’un enregistrement</font> / Editing registratio <form name="registration" method="post" action="edit_order.php" > <? if(isset($_GET[’id_registration’])){ echo "<input type=’hidden’ name=’id_registration’ value=".$_GET[’id_registration’].">"; }elseif(isset($_POST[’id_registration’])){ echo "<input type=’hidden’ name=’id_registration’ value=".$_POST[’id_registration’].">";} ?> <input type="hidden" name="id_categories" value="<? echo $_POST[’id_categories’];?>"> <input type="hidden" name="mod_fee" value="<? echo $_POST[’mod_fee’];?>"> $select_extra_registration = Service::select_where("extra_registration","id_registration",$_GET[’id_registration’]); <h5> $extra_tab = array(); while ($row = mysql_fetch_array($select_extra_registration)) { <table width="95%" border="0"> $extra_tab[$row[’id_extra’]] = $row[’number’]; } <tr> <td width="3%" height="20"> </td> foreach($extra_tab as $id_extra => $number) <td colspan=2 height="20" bgcolor="#CCCCCC"><b><font color="#0000FF">Informations pers { $select_extra = Service::select_champ_where("price","extra","id_extra",$id_extra); </tr> //$select_extra=mysql_db_query(SQL_BDD,"select price from extra where id_extra=$id_extra",$db_link); <tr><td><? echo"id_registration en get ".$_GET[id_registration];?></td><td><? echo"id_registr $extra=mysql_fetch_array($select_extra); $amount=$amount-($extra[price]*$number); } <? } if($categories_id[document]!="") echo" <tr> $select_categories = Service::select_where("categories","id_categories",$registration[id_categories]); <td width=’3%’ height=’40’> </td> //$select_categories=mysql_db_query(SQL_BDD,"select * from categories where id_categories=’".$registration[id_categories]."’",$db_link); <td width=’47%’ height=’40’ valign=top>Documents requis :</td> $categories=mysql_fetch_array($select_categories); <td width=’50%’ height=’40’> <font color=’#D89A8F’ >$categories_id[document]</font> // include("../conf.php"); </td> </tr>"; /******* FUNCTION *************/ $error=0; require_once(ROOT_DIR_PATH."controle.php"); function ecriture_log($value) { // A compléter ou à charger } /*****************************/ ?> <HTML> <head> <title>Registration of participation</title> <style type="text/css"> BODY{ font-family: verdana, arial, sans-serif; font-size: x-small; Y. Morère if($categories_id[online_information]!="") { echo" <tr> <td width=’3%’ height=’40’> </td> <td width=’47%’ height=’40’ valign=top>$categories_id[online_information] :</td> <td width=’50%’ height=’40’> <input type=’textarea’ name=’online_information’ size=50 value="; modifie($_POST[’online_information’]); echo" ></input> </td> </tr>"; } if($categories_id[description]!="") echo" <tr> L.A.S.C. Documentation phpMyConferences Version 0.1 <td width=’3%’ height=’40’> </td> <td width=’47%’ height=’40’ valign=top>Remarques :</td> <td width=’50%’ height=’40’> $categories_id[description] </td> </tr>"; ?> 70 <input type="textarea" name="fax" size=20 value="<? echo $_POST[’fax’]; ?>"></input> </td> </tr> <tr> <td width="3%" height="40"> </td> <td width="47%" height="40">Email :</td> <td width="3%" height="40"> </td> <td width="50%" height="40"> <td width="47%" height="40"> </td> <input type="textarea" name="email" size=50 <? <td width="50%" height="40"> modifie($_POST[’email’]); <input type=radio name=mr value="mrs" <?php echo ($_POST[’mr’] == "mrs") ? ’checked’: ?>></input>’’; ?>> Mme/Mrs. <input type=radio name=mr value="mr" <?php echo ($_POST[’mr’] == "mr") ? ’checked’: </td>’’; ?>> Mr. </td> </tr> </tr> <tr> <tr> <td width="3%" height="40"> </td> <td width="3%" height="40"> </td> <td width="47%" height="40">Commentaires :</td> <td width="47%" height="40"><font color="#0000FF">Prenom</font><br>Firstname</td> <td width="50%" height="40"> <td width="50%" height="40"> <textarea name="comments" cols=’50’ rows=’5’><?php echo $_POST[’comments’]; ?></texta <input type="textarea" name="first_name" size=50 <? </td> modifie($_POST[’first_name’]) </tr> ?>></input> </td> <tr> </tr> <td width="3%" height="20"> </td> <td colspan=2 height="20" bgcolor="#CCCCCC"><b><font color="#0000FF">Informations sur <tr> </tr> <td width="3%" height="40"> </td> <tr> <td width="47%" height="40"><font color="#0000FF">Nom</font><br>Lastname</td> <td width="3%" height="40"> </td> <td width="50%" height="40"> <td width="47%" height="40"><font color="#0000FF">Date de l’inscription</font></td> <input type="textarea" name="last_name" size=50 <? <td width="50%" height="40"> modifie($_POST[’last_name’]) <? ?>></input> echo $date; </td> ?></input> </tr> </td> </tr> <tr> <td width="3%" height="40"> </td> <tr> <td width="47%" height="40"><font color="#0000FF">Date de paiement</font></td> <td width="3%" height="40"> </td> <td width="50%" height="40"> <td width="47%" height="40"><font color="#0000FF">Organisme</font><br>Affiliation</td> <? <td width="50%" height="40"> echo $payment; <input type="textarea" name="compagny" size=50 <? ?></input> modifie($_POST[’compagny’]) </td> ?>></input> </tr> </td> </tr> <tr> <td width="3%" height="40"> </td> <tr> <td width="47%" height="40">Choisissez votre statut : </td> <td width="3%" height="40"> </td> <td width="50%" height="40"> <td width="47%" height="40"><font color="#0000FF">Adresse postale</font><br>Regular mail</td> <? <td width="50%" height="40"> $select_categories = Service::SelectAll("categories"); <input type="textarea" name="adress" size=50 <? //$select_categories=mysql_db_query(SQL_BDD,"select * from categories",$db_link); modifie($_POST[’adress’]) ?>></input> echo" </td> <select name=’list_categories’ onChange=’Lien()’ class=’red’> </tr> <option value=’’></option>"; <tr> <tr> <td width="3%" height="40"> </td> while($categories=mysql_fetch_array($select_categories)) <td width="47%" height="40"><font color="#0000FF">Ville</font><br>City</td> { <td width="50%" height="40"> if($categories[’id_categories’]==$_POST[’id_categories’]){ <input type="textarea" name="city" size=50 <? echo "<option value= ".$categories[’id_categories’]." selected>$categories[name]</option>"; modifie($_POST[’city’]) }else{ ?>></input> echo "<option value=".$categories[’id_categories’].">$categories[name]</option>"; </td> } </tr> } <tr> <td width="3%" height="40"> </td> echo" <td width="47%" height="40"><font color="#0000FF">Code postal</font><br>Zip </select> code</td> <td width="50%" height="40"> "; <input type="textarea" name="zip_code" size=20 <? modifie($_POST[’zip_code’]); if(isset($_POST[’id_categories’])) ?>></input> { </td> $select_categories_id = Service::select_where("categories","id_categories",$_POST[’id_categor </tr> //$select_categories_id=mysql_db_query(SQL_BDD,"select * from categories where id_categories= $categories_id=mysql_fetch_array($select_categories_id); <tr> } <td width="3%" height="40"> </td> <td width="47%" height="40"><font color="#0000FF">Pays</font><br>Country</td> ?> <td width="50%" height="40"> </td> <input type="textarea" name="country" size=20 value="<? </tr> echo $_POST[’country’]; ?>"></input> <tr> </td> <td width="3%" height="40"> </td> </tr> <td width="47%" height="40"><font color="#0000FF">Prix de l’inscription</font><br>Regis <td width="50%" height="40"> <tr> <? <td width="3%" height="40"> </td> $prices_cat = Service::select_champ_where("prices","categories","id_categories",$_POST[’id_c <td width="47%" height="40"><font color="#0000FF">Téléphone</font><br>Phone</td> $price_cat[] = mysql_fetch_array($prices_cat); <td width="50%" height="40"> ?> <input type="textarea" name="phone" size=20 value="<? <input type="textarea" name="amount" size=20 value="<? echo $_POST[’phone’]; echo $price_cat[0][0]; ?>"></input> ?>"></input> </td> </td> </tr> </tr> <tr> <td width="3%" height="40"> </td> <td width="47%" height="40">Fax :</td> <td width="50%" height="40"> Y. Morère <? if(isset($_POST[’id_categories’])) { L.A.S.C. Documentation phpMyConferences Version 0.1 71 $select_housing_categories = Service::select_where("housing_categories","id_categories",$_POST[’id_categories’]); if ($trouve==0) $j=0; { while($housing_categories=@mysql_fetch_array($select_housing_categories)) echo " <input type=’checkbox’ name=’presence[$indice][]’ value=’$tab_date[$i]’ class=’noborde { } echo " else <tr> { <td width=’3%’ height=’20’> </td> echo " <input type=’checkbox’ name=’presence[$indice][]’ value=’$tab_date[$i]’ class=’noborde <td colspan=2 height=’20’ bgcolor=’#CCCCCC’><b>Logement</b></td> } </tr> "; } $select_used_places = Service::select_2where_2not("registration","id_categories",$_POST[’id_categories’],"housing_presence",""); $used_places=mysql_num_rows($select_used_places); $j++; $select_housing = Service::select_where("housing","id_housing",$housing_categories[id_housing]); //hotel suivant $housing=@mysql_fetch_array($select_housing); /**********************/ if($used_places<$housing[max_place]) { echo " echo " </td> <tr> </tr> <td width=’3%’ height=’40’> </td> "; <td width=’47%’ height=’40’>Lieux :</td> <td width=’50%’ height=’40’> } $housing[name] else </td> { </tr> echo" <tr> <tr> <td width=’3%’ height=’40’> </td> <td width=’3%’ height=’40’> </td> <td colspan=2> Plus de place disponible.</td> <td width=’47%’ height=’40’>Prix par nuit :</td> </tr>"; <td width=’50%’ height=’40’>"; } if($housing[price_registration]!="") } echo $housing[price_registration]." ".$evenement[currency]; } echo" <input type=’hidden’ name=’housing_tab[$housing[id_housing]]’ value=".$housing[price_registration]."> ?> </td> <tr> </tr>"; <td width="3%" height="20"> </td> <td colspan=2 height="20" bgcolor="#CCCCCC"><b><font color="#0000FF">Informations comp if($housing[description]!="") </tr> { echo" <? <tr> /************ EXTRA ******************/ <td width=’3%’ height=’40’> </td> if(isset($_POST[’id_categories’])) <td width=’47%’ height=’40’>Remarques :</td> { <td width=’50%’ height=’40’> $select_extra_categories = Service::select_where("extra_categories","id_categories",$_POST[’i $housing[description] while($extra_categories=mysql_fetch_array($select_extra_categories)) </td> { </tr>"; $select_extra = Service::select_2where_2not("extra","id_extra",$extra_categories[id_extra],"a } if($housing[document]!="") echo" <tr> <td width=’3%’ height=’40’> </td> <td width=’47%’ height=’40’ valign=top>Documents requis :</td> <td width=’50%’ height=’40’> <font color=’#D89A8F’ >$housing[document]</font> </td> </tr>"; if($housing[remarque]!="") echo" <tr> <td width=’3%’ height=’40’> </td> <td width=’47%’ height=’40’ valign=top>Remarque :</td> <td width=’50%’ height=’40’> $housing[remarque] </td> </tr>"; $extra=mysql_fetch_array($select_extra); $extra_price[$extra[id_extra]]=$extra[price]; echo" <tr> <td width=’3%’ height=’40’> </td> <td width=’47%’ height=’40’>$extra[name] ($extra[price] $evenement[currency]) :</td> <td width=’50%’ height=’40’> <select name=’extra_tab[$extra[id_extra]]’>"; foreach (array(0,1,2,3,4,5,6,7,8,9) as $num) { echo "<option value=’$num’"; if ($num == $extra_tab[$extra[id_extra]]) echo "sele echo ">$num</option>"; }; echo " </select> </td> </tr>"; } /** DAY OF PRESENCE **/ echo" <tr> <td width=’3%’ height=’40’> </td> <td width=’47%’ height=’40’ valign=’top’>Jours de présence :</td> <td width=’50%’ height=’40’>"; $tab_date=explode("|",$housing[date]); echo $housing[date]."<br>"; $indice=$j+1; $tab_pres=implode(":",$night_presence[$indice]); echo $tab_pres."<br>"; //$select_extra=mysql_db_query(SQL_BDD,"select * from extra where all_categories=’all’ ",$db_ $select_extra = Service::select_where("extra","all_categories","all"); while($extra=mysql_fetch_array($select_extra)) { $extra_price[$extra[id_extra]]=$extra[price]; echo" <tr> <td width=’3% height=’40’> </td> <td width=’47%’ height=’40’>$extra[name] ($extra[price] $evenement[currency]) :</td> <td width=’50%’ height=’40’> <select name=’extra_tab[$extra[id_extra]]’>"; foreach (array(0,1,2,3,4,5,6,7,8,9) as $num) { echo "<option value=’$num’"; //for($k=0;$k<count($night_presence[$indice]);$k++) if ($num == $extra_tab[$extra[id_extra]]) echo "sele for($i=0;$i<=sizeof($tab_date)&&$tab_date[$i]!="";$i++) echo ">$num</option>"; { }; $trouve=0;$k=0; while(($trouve==0)&&($k<count($night_presence[$indice]))) echo " </select> { </td> //echo "date".$night_presence[$indice][$k]." ind i ".$i." ind j ".$indice." ind </tr>"; k ".$k."tab_date".$tab_date[$i]."<br>;"; if (strstr(trim($night_presence[$indice][$k]),trim($tab_date[$i]))) { //echo " trouve <br>"; if($extra[description]!="") $trouve=1; echo" <tr class=’info’> }else { <td width=’3%’ valign=’top’><img src=’information.gif’></td> //echo " pas trouve <br>"; <td width=’47%’ colspan=’2’>$extra[description] </td> $trouve=0; </tr>"; } } $k++; } } ?> Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 72 <tr> /***calcul du prix total***/ <td width="3%" height="40"> </td> //calcul du prix des extras <td width="47%" height="40" valign="top"><font color="#0000FF"> <br>Présence // if(isset($extra_temp)){ aux repas de midi (inclus dans l’inscription)</font></td> <td width="50%" height="40"> <br> <br> <br> // foreach($extra_temp as $id_extra => $number) <? // { /** DAY OF PRESENCE **/ // $amount=$amount+($extra_price[$id_extra]*$number); // } $first_day = $evenement[date_debut]; // } list($year, $month, $day) = split(’[-:\ ]’, $first_day); //ajout du prix de l’inscription while("$year-$month-$day"<=$evenement[date_fin]) { // $amount = $amount+$_POST[’amount’]; // echo "prix avant hotel : ".$amount."<br>"; if (($_POST[’tab_presence’]) and in_array("$day-$month-$year",$_POST[’tab_presence’])) //ajout du{ prix des chambres d’hotels echo " <input type=’checkbox’ name=’tab_presence[]’ value=’$day-$month-$year’ class=’red’ checked/> $day $month $year<br />"; } else { // if(isset($_POST[’presence’])){ echo " <input type=’checkbox’ name=’tab_presence[]’ value=’$day-$month-$year’ // class=’red’ $amount=$amount+($housing[price_registration]*sizeof($presence));} /> $day $month $year<br/ >"; } $day++; if(strlen($day)<2){ $day="0$day";} if($day>=28){ if(!checkdate($month, $day, $year)) { $day="01"; $month++; } } /*** amount ***/ $extra_temp=$_POST[’extra_tab’]; // var_dump($extra_temp); // var_dump($extra_price); $housing_temp=$_POST[’housing_tab’]; // var_dump($housing_temp); if(isset($extra_temp)){ foreach($extra_temp as $id_extra => $number) { //echo "prix : ".$extra_price[$id_extra]."*".$number."<br>"; $amount=$amount+($extra_price[$id_extra]*$number); } } if(strlen($month)<2){ $month="0$month";} $nb_hotel=count($housing_temp); // echo "Nombre hotel : ".$nb_hotel."<br>"; $prix_hotel=0; for ($i = 1; $i <= $nb_hotel; $i++) { $nb_nuit=count($nuit_presence[$i]); //nb nuit pour chaque hotel if ($nb_nuit!=0) { if(strlen($year)<2){ $tab_night_presence[$i]=implode(":",$nuit_presence[$i]); //pour la partie facturation (new_or $year="0$year";} } } else $tab_night_presence[$i]=""; /**********************/ $prix_hotel+=$nb_nuit*$housing_temp[$i]; ?> } </td> $night_presence=implode(" | ",$tab_night_presence); //convertit tableau en chaine pour (new_o </tr> echo "night_presence : ".$night_presence."<br>"; // echo "post_night : ".$_POST[’night_price’]."<br>"; <tr> // echo "prix avant hotel : ".$amount."<br>"; <td width="3%" height="40"> </td> // echo "jours depresence : ".sizeof($_POST[’presence’])."<br>"; <td width="50%"> // echo "prix de l’hotel : ".$_POST[’night_price’]."<br>"; <input type="submit" name="validate" value="validate"> // if(isset($_POST[’presence’])) // $amount=$amount+($_POST[’night_price’]*sizeof($_POST[’presence’])); <input type="submit" name="retour" value="retour sans modification"> $amount=$amount+$prix_hotel; </td> // echo "prix apres hotel : ".$amount."<br>"; </tr> /**************/ </table> </h5> if($amount==0) </form> $payment="OK"; if($month>12) { $month=1; $year++; } <? echo "Mise à jour des données<br> identifiant : ".$_POST[id_registration]."<br>"; /****** UPDATE *******/ if (isset($_POST[’retour’])){ $insert_registration = Service::replace_registration($_POST[’id_registration’],$_POST[’id_cat echo "<script language=’javascript’> window.location.replace(’../index.php?page=ParticipantPayment’) </script>";} //,addslashes($_POST[’comments’]) if($error==0&&isset($_POST[’validate’])) { /**** ERROR CONTROL ****/ if(isset($_POST[’id_registration’])) $id_registration=$insert_registration; if(isset($_POST[’extra_tab’])){ if($_POST[’id_categories’]=="") foreach($_POST[’extra_tab’] as $id_extra => $number) { { echo "<script language=’JavaScript’>alert(’You must choose a status.’)</script>"; // echo "<br>Passe par le foreach d’extra"; exit; if($number>=0) } { // echo "<br>Passe par le replace d’extra"; /***********************/ //$insert_registration=mysql_db_query(SQL_BDD,"replace into extra_registration (id_extra, id_ $insert_registration = Service::replace_trois_trois("extra_registration","id_extra","id_regis /** Database update **/ } if(isset($_POST[’presence’])){ } echo "post_presence : ".$_POST[’presence’]."var_dump(presence) : ".";<br>";var_dump($_POST[’presence’]);echo "<br>"; } $nuit_presence=$_POST[’presence’]; //il faut stocker les dates pour chaque hotel /******************************************************** //$night_presence=implode(" | ",$_POST[’presence’]); //contient nb_hotel tableau$night_presence2 = $night_presence; echo "$night_presence2<br>"; // $night_presence1=implode(" | ",$nuit_presence[1]); $night_presence1=explode("|",$registration[housing_presence]); // $night_presence2=implode(" | ",$nuit_presence[2]); for ($i=0;$i<count($night_presence1);$i++) // echo "les nuits d’hebergement réservées sont : ".$night_presence."<br>"; { // echo "les nuits d’hebergement réservées sont : ".$night_presence1." ça fait".count($nuit_presence[1])."<br>"; $indic=$i+1; // echo "les nuits d’hebergement réservées sont : ".$night_presence2." ça fait".count($nuit_presence[2])."<br>"; $night_presence[$indic]=explode(":",$night_presence1[$i]); } //$night_presence=implode(" | ",$_POST[’presence’]); } ***************************************************************/ if(isset($_POST[’tab_presence’])) $day_presence=implode(" | ",$_POST[’tab_presence’]); // Log file ecriture_log("Register : ".$first_name." ".$last_name); if($categories_id[document]==""&&$housing[document]=="") $document_req="OK"; //echo "prix avant extra : ".$amount."<br>"; echo "<script language=’javascript’> window.location.replace(’../index.php?page=ParticipantPayment’) //window.location.replace(’n Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 </script> "; /*********************/ } /*********************/ ?> </BODY> </HTML> fichier new_order.php <? /*** Order ** v 1.3 ************/ /**Configuration de connexion**/ session_start(); 73 --> </style> </head> <body bgcolor="#FFFFFF" text="#000000" class="main"> <table width="80%"> <tr> <td><H2>FACTURE</h2></td> <td> <form action="new_order.php?id_registration=<? echo $_GET[’id_registration’];?>" method="post <? echo"<input type=’submit’ value=’print’ name=’print’> "; ?> </form> </td> <td align="right"> <form action="../index.php?page=ParticipantPayment" method="post"> <? echo"<input type=’submit’ value=’back to payment list’ name=’back to payment list’> "; ?> </form> </td> </tr> </table> require_once("../../conf.php"); //********Language**************/ if(isset($_SESSION[’language’])) require_once(ROOT_DIR_PATH."/common/lang/".$_SESSION[’language’]); $requiredUserLevel = array(1, 2); require(ROOT_DIR_PATH."/common/phpSecurePages/secure.php"); require_once(ROOT_DIR_PATH."common/service/service.php"); <hr width="90%" style="background-color: #000000" noshade> <table> <tr valign=top> <td width="50%"><b>Ref :</b></td> <td><? echo" # $registration[id_registration] "; ?> </td> </tr> // Connexion à la base //$db_link = mysql_connect(SQL_SERVEUR,SQL_USER,SQL_PASSWD); <tr valign=top> <td><b>Customer :</b></td> <td><? echo" /******** Amount Calculate ********/ $registration[mr] $registration[first_name] $registration[last_name]<br> $registration[adress]<br> //$select_evenement=mysql_db_query(SQL_BDD,"select * from evenement",$db_link); $registration[zip_code] $registration[city]<br> $select_evenement = Service::SelectAll("evenement"); $registration[city] <br>  $evenement=mysql_fetch_array($select_evenement); "; ?> //$select_registration=mysql_db_query(SQL_BDD,"select * from registration where id_registration=’".$_GET[’id_registration’]."’",$db_link); </td> $select_registration = Service::select_where("registration","id_registration",$_GET[’id_registration’]); </tr> $registration=mysql_fetch_array($select_registration); <tr> //$select_categories=mysql_db_query(SQL_BDD,"select * from categories where id_categories=’".$registration[id_categories]."’",$db_link); <td><b>Telephone :</b></td> $select_categories = Service::select_where("categories","id_categories",$registration[id_categories]); <td><? $categories=mysql_fetch_array($select_categories); echo" $registration[phone] /**********************************/ "; ?> ?> </td> <html> </tr> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <tr> <title>Invoice</title> <td><b>E-Mail Address :</b></td> <link rel="stylesheet" href="<? echo $ROOT_URL ?>admin/css.css" type="text/css"> <td><? <style type="text/css"> echo" $registration[email] <!-"; body { ?> margin: 10px 40px 0px 40px; </td> text-align: left; </tr> font: 12px sans-serif, tahoma, verdana, geneva, helvetica, arial; </table> color: #666666; <br> } <br> Les pauses café et les repas de midi sont inclus dans le prix indiqué. .line1{ <br> font-size : 12px; <br> font-family : Verdana, arial, helvetica, sans-serif; background-color : #CCCCCC; <br><br> } <table border="0" width="90%" cellspacing="0" cellpadding="2" border=0> <tr class="line1"> .line2{ <td width="10%">Qty.</td> font-size : 10px; <td width="50%">Label</td> font-family : Verdana, arial, helvetica, sans-serif; <td width="20%">Price</td> background-color : #DDDDDD; <td width="20%">Total</td> } </tr> .line3{ font-size : 10px; font-family : Verdana, arial, helvetica, sans-serif; background-color : white; } .line4 { font-size : 12px; font-family : Verdana, arial, helvetica, sans-serif; color : #333333; background-color : #c6c3bd; } Y. Morère <? // Registration echo "prix de registration: ".$registration[amount]; $amount = $registration[amount]; //$select_extra_registration=mysql_db_query(SQL_BDD,"select * from extra_registration where $select_extra_registration =Service::select_where("extra_registration","id_registration",$_ echo "id_registration :".$_GET[’id_registration’]; while ($row = mysql_fetch_array($select_extra_registration)) { $extra_tab[$row[’id_extra’]] = $row[’number’]; } L.A.S.C. Documentation phpMyConferences Version 0.1 // echo "foreach extra_tab :".var_dump($extra_tab)."<br>"; if ($extra_tab!=NULL) //si pas d’extra à l’enregistrement { foreach($extra_tab as $id_extra => $number) { 74 while($extra_registration=mysql_fetch_array($select_extra_registration)) { if($line==2) $line=3; else $line=2; // echo "passe..."; // echo "number = ".$number." id extra = ".$id_extra; //$select_extra=mysql_db_query(SQL_BDD,"select * from extra where id_extra=$extra_registratio //$select_extra=mysql_db_query(SQL_BDD,"select price from extra where id_extra=$id_extra",$db_link); $select_extra = Service::select_champ_where("price","extra","id_extra",$id_extra); $select_extra = Service::select_where("extra","id_extra",$extra_registration[id_extra]); $extra=mysql_fetch_array($select_extra); $extra=mysql_fetch_array($select_extra); $amount=$amount-($extra[price]*$number); } $amount_temp=$extra[price]*$extra_registration[number]; } if ($amount_temp!=0) { $amount=$categories[prices]; echo" echo" <tr class=’line$line’> <tr class=’line2’> <td width=’10%’>$extra_registration[number]</td> <td width=’10%’>1</td> <td width=’50%’>$extra[name]</td> <td width=’50%’>$categories[name]</td> <td width=’20%’>$extra[price]</td> <td width=’20%’>$amount</td> <td width=’20%’>$amount_temp</td> <td width=’20%’>$amount</td> </tr> </tr> "; "; $amount+=$amount_temp; } } $amount=$categories[prices]; ?> // echo "le prix est :".$amount=$categories[prices]."<br>"; <tr class="line3" align="right"> //CSS <td colspan=4> </td> $line=2; </tr> ?> <tr class="line1" align="right"> <td colspan=4><b>Total :</b> <? echo "$amount $evenement[currency]";?> </td> <? </tr> // Housing </table> <BR> if($registration[housing_presence]!="") <table border="0" width="90%" cellspacing="0" cellpadding="2" border=0> { <tr class="line4"> $select_housing_registration = Service::select_where("housing_categories","id_categories",$categories[id_categories]); <td colspan="2">Required documents</td> //pb avec ce qui est retourné dans $select_housing_registration </tr> //$select_housing_registration=mysql_db_query(SQL_BDD,"select * from housing_categories <? where id_categories=$categories[id_categories]",$db_link); $housing_registration=mysql_fetch_array($select_housing_registration); /***Required document***/ $select_required_document = Service::select_where("document_categories","id_categories",$regi $select_housing = Service::select_where("housing","id_housing",$housing_registration[id_housing]); //$select_required_document=mysql_db_query(SQL_BDD,"select * from document_categories where i //$select_housing=mysql_db_query(SQL_BDD,"select * from housing where id_housing=$housing_registration[id_housing]",$db_link); $housing=mysql_fetch_array($select_housing); if(mysql_num_rows($select_required_document)==0 && ($registration[housing_presence]=="" || $h { $night=explode("|",$registration[housing_presence]); echo " // echo "registration[housing_presence] : $registration[housing_presence]<br>"; <tr colspan=’2’ class=’line2’> // echo "night0 : $night[0]<br>"; <td align=’center’><i>Any documents</i></td> // echo "night1 : $night[1]<br>"; </tr> // echo "night : ".count($night)."<br>"; "; for($i=0;$i<sizeof($night);$i++) } { else if($line==2) { $line=3; while($categories_document=mysql_fetch_array($select_required_document)) else { $line=2; $select_document = Service::select_where("document","id_document",$categories_document[id_doc // echo "nb_nuit : $night[$i]<br>"; //$select_document=mysql_db_query(SQL_BDD,"select * from document where id_document=$categori if (trim($night[$i])!="") { $document=mysql_fetch_array($select_document); $nb_nuit=count(explode(":",$night[$i])); if($line==2) } else $line=3; { else $line=2; $nb_nuit=0; } echo " // echo "nb_nuit : $nb_nuit<br>"; <tr class=’line$line’> // $nb_nuit=trim($night[$i]); <td>  <b>$document[name]</b> :</td> $prix_nuits=$housing[price_registration]*$nb_nuit; <td>".nl2br($document[description])."</td> if($nb_nuit!=0) //n’affiche que les hotels fréquentés </tr> { echo" "; } <tr class=’line$line’> <td width=’10%’>1</td> if($registration[housing_presence]!=""&&$housing[document]!="") <td width=’50%’>$housing[name] (".$nb_nuit.")</td> echo " <td width=’20%’>$housing[price_registration]</td> <tr class=’line2’> <td width=’20%’>$prix_nuits</td> <td colspan=’2’>  $housing[document]</td> </tr> </tr> "; "; } } $amount+=$housing[price_registration]*$nb_nuit; $housing_registration=mysql_fetch_array($select_housing_registration); ?> if ($housing_registration!=NULL) { </table> $select_housing = Service::select_where("housing","id_housing",$housing_registration[id_housing]); <BR> $housing=mysql_fetch_array($select_housing); <table border="0" width="90%" cellspacing="0" cellpadding="2" border=0> // echo "housing : ".var_dump($housing)."<br>"; <tr class="line4"> // $test2=implode(" | ",$housing); <td colspan=2>Please mail documents to :</td> //echo "$test2<br>"; </tr> } <tr class="line2"> } <td width="2%"></td> } <td> <? ?> echo nl2br($evenement[mail_document]); ?> <? </td> // Extra </tr> </table> $select_extra_registration = Service::select_where("extra_registration","id_registration",$_GET[’id_registration’]); <br> //$select_extra_registration=mysql_db_query(SQL_BDD,"select * from extra_registration where id_registration=’".$_GET[’id_registration’]."’",$db_link); Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 <table border="0" width="90%" cellspacing="0" cellpadding="2" border=0> <tr class="line4"> <td colspan=3>Payment methods :</td> </tr> <? $select_payment = Service::SelectAll("payment"); //$select_payment=mysql_db_query(SQL_BDD,"select * from payment",$db_link); $line=2; while($payment=mysql_fetch_array($select_payment)) { if($line==2) $line=3; else $line=2; echo" <tr class=’line$line’> <td width=’2%’></td> <td valign=’top’ width=’20%’>"; echo "<b>".nl2br($payment[name])." :</b>"; echo" </td> <td width=’70%’>"; echo nl2br($payment[description]); echo" </td> </tr>"; } ?> </table> <br> <? if(isset($_POST[’print’])) { echo" <script language=’javascript’> window.print(); </script>"; } ?> </body> </html> 75 padding: 0px; } input.red, textarea.red, select.red { background-color: #D89A8F; font-family: verdana, arial, sans-serif; font-size: 10px; color: WHITE; padding: 0px; } info { text-align: left; font: 10px sans-serif, tahoma, verdana, geneva, helvetica, arial; color: #666666; } --> </style> <SCRIPT> <!-function Lien() { i = document.registration.list_categories.selectedIndex; if (i == 0) return; url = document.registration.list_categories.options[i].value; window.location.href= url; } // --> </SCRIPT> </head> <BODY> <div id="Header" align="center"></div> <h1><center><font color="#0000FF">Inscription à la conférence</font> - Conference registrati <? /**** SUBMISSION OVER****/ $today = date("Y-m-d"); if($today>$evenement[’registration_deadline’]) { echo "<center><h1>REGISTRATION PHASE IS OVER</h1></center>"; exit; } /************************/ ?> <p><font color="#0000FF">Apres avoir valider votre inscription, vous serez redirigé automatiq <p><font color="#0000FF">Vous receverez dans quelques secondes un mail de confirmation.</font <br><br> <p><font color="#0000FF">Tous les champs marqués en <font color="#D89A8F">rouge</font> sont o All the following fields marked in <font color="#D89A8F">red</font> are mandatory.</p> fichier registration.php <? /****** Registratrion form ***** <form name="registration" method="post" action="registration.php" > <input type="hidden" name="id_categories" value="<? echo $_GET[’id_categories’];?>"> <h5> <table width="95%" border="0"> V 2.2 *******************************/ require_once("../conf.php"); <tr> <td width="3%" height="20"> </td> <td colspan=2 height="20" bgcolor="#CCCCCC"><b><font color="#0000FF">Informations pers </tr> //*********Service*************/ require_once(ROOT_DIR_PATH."common/service/service.php"); <tr> session_start(); // Link to database $db_link = mysql_connect(SQL_SERVEUR,SQL_USER,SQL_PASSWD); $select_evenement = Service::SelectAll("evenement"); $evenement=mysql_fetch_array($select_evenement); include (ROOT_DIR_PATH."/archive/log/log.inc.php"); <td width="3%" height="40"> </td> <td width="47%" height="40"><font color="#0000FF">Choisissez votre statut</font> - Your <td width="50%" height="40"> <? //$select_categories=mysql_db_query(SQL_BDD,"select * from categories",$db_link); $select_categories = Service::SelectAll("categories"); echo" <select name=’list_categories’ onChange=’Lien()’ class=’red’> <option value=\"\"></option>"; /******* FUNCTION *************/ $error=0; require_once(ROOT_DIR_PATH."controle.php"); /*****************************/ ?> <HTML> <head> <title>Registration of participation</title> <style type="text/css"> BODY{ font-family: verdana, arial, sans-serif; font-size: x-small; background-color: #f3e7b7; } <!-*{ font-size: x-small; } input, textarea, select { background-color: #CCCCCC; font-family: verdana, arial, sans-serif; font-size: 10px; color: #333333; Y. Morère while($categories=mysql_fetch_array($select_categories)) { if($categories[’id_categories’]==$_GET[’id_categories’]){ echo "<option value=’registration.php?id_categories=".$categories[’id_categories’]."’ selecte }else{ echo "<option value=’registration.php?id_categories=".$categories[’id_categories’]."’>".$cate } } echo" </select> "; if(isset($_GET[’id_categories’])) { $select_categories_id = Service::select_where("categories","id_categories",$_GET[’id_categori //$select_categories_id=mysql_db_query(SQL_BDD,"select * from categories where id_categories= $categories_id=mysql_fetch_array($select_categories_id); } ?> </td> </tr> <tr> L.A.S.C. Documentation phpMyConferences Version 0.1 76 <td width="3%" height="40"> </td> modifie($_POST[’city’]) <td width="47%" height="40"><font color="#0000FF">Prix de l’inscription</font> ?>></input> - Registration fee</td> <td width="50%" height="40"> </td> <? </tr> if($categories_id[’prices’]!="") <tr> echo $categories_id[’prices’]." ".$evenement[’currency’]; <td width="3%" height="40"> </td> <td width="47%" height="40"><font color="#0000FF">Code postal</font> - Zip code</td> $amount=$categories_id[’prices’]; <td width="50%" height="40"> echo "<input type=’hidden’ name=’amount’ value=’".$amount."’>"; <input type="textarea" name="zip_code" size=20 <? ?> modifie($_POST[’zip_code’]); </td> ?>></input> </tr> </td> <? </tr> if($categories_id[’document’]!="") echo" <tr> <tr> <td width="3%" height="40"> </td> <td width=’3%’ height=’40’> </td> <td width="47%" height="40"><font color="#0000FF">Pays</font> - Country</td> <td width=’47%’ height=’40’ valign=top>Documents requis :</td> <td width="50%" height="40"> <td width=’50%’ height=’40’> <input type="textarea" name="country" size=20 value="<? <font color=’#D89A8F’ >".$categories_id[’document’]."</font> echo $_POST[’country’]; </td> ?>"></input> </tr>"; </td> </tr> if($categories_id[’online_information’]!="") { echo" <tr> <td width=’3%’ height=’40’> </td> <td width=’47%’ height=’40’ valign=top>Documents requis <td width=’50%’ height=’40’> $categories_id[online_information] </td> </tr>"; } <tr> : </td> if($categories_id[’description’]!="") echo" <tr> <td width=’3%’ height=’40’> </td> <td width=’47%’ height=’40’ valign=top>Remarques :</td> <td width=’50%’ height=’40’>". $categories_id[’description’]." </td> </tr>"; ?> <tr> <td width="3%" height="40"> </td> <td width="47%" height="40"> </td> <td width="50%" height="40"> <input type=radio name=mr value="mrs."> Mrs. <input type=radio name=mr value="mr"> Mr. </td> </tr> <td width="3%" height="40"> </td> <td width="47%" height="40"><font color="#0000FF">Téléphone</font> - Phone</td> <td width="50%" height="40"> <input type="textarea" name="phone" size=20 value="<? echo $_POST[’phone’]; ?>"></input> </td> </tr> <tr> <td width="3%" height="40"> </td> <td width="47%" height="40">Fax</td> <td width="50%" height="40"> <input type="textarea" name="fax" size=20 value="<? echo $_POST[’fax’]; ?>"></input> </td> </tr> <tr> <td width="3%" height="40"> </td> <td width="47%" height="40">Email</td> <td width="50%" height="40"> <input type="textarea" name="email" size=50 <? modifie($_POST[’email’]); ?>></input> </td> </tr> <tr> <td width="3%" height="40"> </td> <? <td width="47%" height="40"><font color="#0000FF">Prenom</font> - Firstname</td> if(isset($_GET[’id_categories’])) <td width="50%" height="40"> { <input type="textarea" name="first_name" size=50 <? //selectionne les hebergements correspondant ~ A la catégorie et effectue les operations suiva modifie($_POST[’first_name’]) $select_housing_categories = Service::select_where("housing_categories","id_categories",$_GET ?>></input> </td> while($housing_categories=@mysql_fetch_array($select_housing_categories)) </tr> { echo " <tr> <tr> <td width="3%" height="40"> </td> <td width=’3%’ height=’20’> </td> <td width="47%" height="40"><font color="#0000FF">Nom</font> - Lastname</td> <td colspan=2 height=’20’ bgcolor=’#CCCCCC’><b>Logement</b></td> <td width="50%" height="40"> </tr> <input type="textarea" name="last_name" size=50 <? "; modifie($_POST[’last_name’]) ?>></input> //selectionne les hotels où les jours de reservation ne sont pas nuls $select_used_places = Service::select_2where_2not("registration","id_categories",$_POST[’id_c </td> </tr> $used_places=mysql_num_rows($select_used_places); $select_housing = Service::select_where("housing","id_housing",$housing_categories[id_housing <tr> $housing=@mysql_fetch_array($select_housing); <td width="3%" height="40"> </td> $housing_price[$housing[id_housing]]=$housing[price_registration]; <td width="47%" height="40"><font color="#0000FF">Organisme</font> - Affiliation</td> if($used_places<$housing[max_place]) <td width="50%" height="40"> { <input type="textarea" name="compagny" size=50 <? echo " modifie($_POST[’compagny’]) <tr> ?>></input> <td width=’3%’ height=’40’> </td> </td> <td width=’47%’ height=’40’>Lieux :</td> </tr> <td width=’50%’ height=’40’> $housing[name] <tr> </td> <td width="3%" height="40"> </td> </tr> <td width="47%" height="40"><font color="#0000FF">Adresse postale</font> - Regular mail</td> <td width="50%" height="40"> <tr> <input type="textarea" name="adress" size=50 <? <td width=’3%’ height=’40’> </td> modifie($_POST[’adress’]) <td width=’47%’ height=’40’>Prix par nuit :</td> ?>></input> <td width=’50%’ height=’40’>"; </td> </tr> if($housing[price_registration]!="") echo $housing[price_registration]." ".$evenement[currency]; <tr> <td width="3%" height="40"> </td> // <input type=’hidden’ name=’night_price’ value=".$housing[price_registration]."> <td width="47%" height="40"><font color="#0000FF">Ville</font> - City</td> <td width="50%" height="40"> echo" <input type="textarea" name="city" size=50 <? Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 77 <input type=’hidden’ name=’housing_tab[$housing[id_housing]]’ value=".$housing[price_registration]."> if(!checkdate($month, $day, $year)) </td> { </tr>"; $day="01"; $month++; if($housing[description]!="") } { } echo" <tr> <td width=’3%’ height=’40’> </td> if(strlen($month)<2) <td width=’47%’ height=’40’>Remarques :</td> $month="0$month"; <td width=’50%’ height=’40’> $housing[description] if($month>12) </td> { </tr>"; $month=1; } $year++; } if($housing[document]!="") echo" if(strlen($year)<2) <tr> $year="0$year"; <td width=\"3%\" height=\"40\"> </td> } <td width=\"47%\" height=\"40\" valign=top>Documents requis :</td> /**********************/ <td width=\"50%\" height=\"40\"> ?> <font color=\"#D89A8F\" >$housing[document]</font> </td> </td> </tr>"; </tr> if($housing[remarque]!="") echo" <tr> <td width=’3%’ height=’40’> </td> <td width=’47%’ height=’40’ valign=top>Remarque :</td> <td width=’50%’ height=’40’> $housing[remarque] </td> </tr>"; /** DAY OF PRESENCE **/ echo" <tr> <td width=\"3%\" height=\"40\"> </td> <td width=\"47%\" height=\"40\" valign=\"top\">Places disponibles</td> <td width=\"50%\" height=\"40\">"; $tab_date=explode(" | ",$housing[date]); <? /************ EXTRA ******************/ if(isset($categories_id[’id_categories’])) { $select_extra_categories = Service::select_where("extra_categories","id_categories",$_GET[’id while($extra_categories=@mysql_fetch_array($select_extra_categories)) { $select_extra = Service::select_2where_2not("extra","id_extra",$extra_categories[id_extra],"a $extra=mysql_fetch_array($select_extra); $extra_price[$extra[id_extra]]=$extra[price]; echo" <tr> <td width=’3%’ height=’40’> </td> <td width=’47%’ height=’40’><B>$extra[name] ($extra[price] $evenement[currency]) :</B></td> <td width=’50%’ height=’40’> <select name=’extra_tab[$extra[id_extra]]’> <option value=’0’>0</option> <option value=’1’>1</option> for($i=0;$i<=sizeof($tab_date)&&$tab_date[$i]!="";$i++) { echo " <input type=’checkbox’ name=’presence[$housing[id_housing]][]’ value=’$tab_date[$i]’ class=’noborder’> $tab_date[$i]<BR>"; </select> } </td> /**********************/ </tr>"; echo " </td> </tr> "; } else { echo" <tr> <td width=\"3%\" height=\"40\"> </td> <td colspan=2> Plus de place disponible.</td> </tr>"; if($extra[’description’]!="") echo" <tr class=\"info\"> <td width=’3%’ valign=’top’><img src=’information.gif’></td> <td width=’47’ colspan=\"2\">".$extra[’description’]."</td> </tr>"; } $select_extra = Service::select_where("extra","all_categories","all"); //$select_extra=mysql_db_query(SQL_BDD,"select * from extra where all_categories=’all’ ",$db_ while($extra=mysql_fetch_array($select_extra)) { $extra_price[$extra[id_extra]]=$extra[price]; } echo" } <tr> } <td width=’3%’ height=’40’> </td> <td width=’47%’ height=’40’><font color=’#0000FF’><B>$extra[name] ($extra[price] $evenement ?> <td width=’50%’ height=’40’> <select name=’extra_tab[$extra[id_extra]]’> <tr> <option value=’0’>0</option> <td width="3%" height="20"> </td> <option value=’1’>1</option> <td colspan=2 height="20" bgcolor="#CCCCCC"><b><font color="#0000FF">Informations complémentaires</font></b></td> <option value=’2’>2</option> </tr> <option value=’3’>3</option> <tr> <option value=’4’>4</option> <td width="3%" height="40"> </td> </select> <td width="47%" height="40" valign="top"><font color="#0000FF">Présence aux repas de midi (inclus)</font></td> </td> <td width="50%" height="40"> </tr>"; <? /** DAY OF PRESENCE **/ if($extra[description]!="") $first_day = $evenement[date_debut]; echo" list($year, $month, $day) = split(’[-:\ ]’, $first_day); <tr class=\"info\"> while("$year-$month-$day"<=$evenement[date_fin]) <td width=\"3%\" valign=\"top\"> { </td> <td width=\"47%\" colspan=\"2\"><font color=\"#0000FF\">$extra[description] </font></td> </tr>"; if (($tab_presence) and in_array("$day-$month-$year", $tab_presence)) { } echo " <input type=’checkbox’ name=’tab_presence[]’ value=’$day-$month-$year’} class=’red’ checked/> $day $month $year<br />"; } else { ?> echo " <input type=’checkbox’ name=’tab_presence[]’ value=’$day-$month-$year’ class=’red’ /> $day $month $year<br/ >"; <tr> } <td width="3%" height="40"> </td> <td width="50%"> $day++; <input type="submit" name="validate" value="Validation "> </td> if(strlen($day)<2) </tr> $day="0$day"; </table> if($day>=28) </h5> { </form> Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 78 <? /****** UPDATE *******/ ecriture_log("ERROR on the database : ".mysql_errno()); } else {*/ echo $error; if($error==0&&isset($_POST[’validate’])) { /**** ERROR CONTROL ****/ if(!isset($_POST[’id_registration’])) $id_registration=$insert_registration; if(isset($_POST[’extra_tab’])) if($_POST[’id_categories’]=="") foreach($_POST[’extra_tab’] as $id_extra => $number) { { echo "<script language=’javascript’>alert(\"you must choose a status.\")</script>"; exit; if($number>0) } { $insert_registration = Service::insert_trois_trois("extra_registration","id_extra","id_regist /***********************/ } /** Database update **/ } // Log file if(isset($_POST[’presence’])){ ecriture_log("Register : ".$_POST[’first_name’]." ".$_POST[’last_name’]); echo "post_presence : ".$_POST[’presence’]."var_dump(presence) : ".";<br>";var_dump($_POST[’presence’]);echo "<br>"; $nuit_presence=$_POST[’presence’]; //Send a confirmation mail //il faut stocker les dates pour chaque hotel $mail=$_POST[’email’]; //$night_presence=implode(" | ",$_POST[’presence’]); //contient nb_hotel tableau $file="registration"; $name=$_POST[’last_name’]; // $night_presence1=implode(" | ",$nuit_presence[1]); include(ROOT_DIR_PATH."/common/mail/send_mail.inc.php"); // $night_presence2=implode(" | ",$nuit_presence[2]); // echo "les nuits d’hebergement réservées sont : ".$night_presence."<br>"; echo "<script language=\"javascript\"> // echo "les nuits d’hebergement réservées sont : ".$night_presence1." ça fait".count($nuit_presence[1])."<br>"; window.open(’order.php?id_registration=’".$_POST[’id_registration’]."’,’registration’) // echo "les nuits d’hebergement réservées sont : ".$night_presence2." ça fait".count($nuit_presence[2])."<br>"; </script> } "; if(isset($_POST[’tab_presence’])) $day_presence=implode(" | ",$_POST[’tab_presence’]); //} if($categories_id[document]==""&&$housing[’document’]=="") $document_req="OK"; /*********************/ echo " <script language=’javascript’> <!--// window.location.replace(’".ROOT_URL."’); //--> </script>"; /*** amount ***/ $extra_temp=$_POST[’extra_tab’]; $tableau_extra=implode(" | ",$_POST[’extra_tab’]); echo "tableau extra : ".$tableau_extra."<br>"; $housing_temp=$_POST[’housing_tab’]; $tableau_housing=implode(" | ",$_POST[’housing_tab’]); echo "tableau housing : ".$tableau_housing."<br>"; $amount = $_POST[’amount’]; echo "prix : ".$amount."<br>"; } /*********************/ ?> </BODY> </HTML> if(isset($extra_temp)) foreach($extra_temp as $id_extra => $number) { %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% $cal_extra = Service::select_where("extra","id_extra",$id_extra); $calcul_extra = mysql_fetch_array($cal_extra); J’avance ... cela ne me parait pas trop normal... il doit manquer un argument.... et comment fait on pour mettre un jour quelques chose qui n’existe pas encore %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% $amount=$amount+($calcul_extra[3]*$number); } update badge set width=’60’, height=’40’, font_size=’12’, compagny=’true’ , country=’true’, description=’Ma conf’, title=’Human’ WHERE ‘id_badge‘ =’1’ $nb_hotel=count($housing_temp); Warning: Missing argument 18 for update_huit() echo "Nombre hotel : ".$nb_hotel."<br>"; in /drbd/drbd1/www/human07/html/common/service/service.php on line 566 $prix_hotel=0; Warning: Missing argument 19 for update_huit() for ($i = 1; $i <= $nb_hotel; $i++) in /drbd/drbd1/www/human07/html/common/service/service.php on line 566 { $nb_nuit=count($nuit_presence[$i]); //nb nuit pour chaque hotel Warning: Missing argument 20 for update_huit() $tab_night_presence[$i]=implode(" : ",$nuit_presence[$i]); //pour la partie facturation (new_order.php) in /drbd/drbd1/www/human07/html/common/service/service.php on line 566 $prix_hotel+=$nb_nuit*$housing_temp[$i]; ~ ~ c c c c } Echec dans la rA°cup A°ration des donn~ A°es Veuillez v~ A°rifier votre requete. $night_presence=implode(" | ",$tab_night_presence); //convertit tableau en chaine pour (new_order.php) echo "tableau des nuits : ".$night_presence."<br>"; echo "Prix hotel : ".$prix_hotel."<br>"; M^ eme en créant à la main le premier enregistrement, ben ça marche ... // echo "post_night : ".$_POST[’night_price’]."<br>"; // echo "prix avant hotel : ".$amount."<br>"; // echo "jours depresence : ".sizeof($_POST[’presence’])."<br>"; // echo "prix de l’hotel : ".$_POST[’night_price’]."<br>"; // if(isset($_POST[’presence’])) // $amount=$amount+($_POST[’night_price’]*sizeof($_POST[’presence’])); $amount=$amount+$prix_hotel; echo "prix apres hotel : ".$amount."<br>"; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /**************/ if($amount==0) $payment="OK"; Pas cool du coup, voila la modification %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% > M^ eme en créant à la main le premier enregistrement, ben ça marche ... > enfin presque... il manque comme qui dirait le champ Nom_prenom dans la table badge... si bien que les noms n’apparaissent pas sur les bagdes... # $insert_registration = Service::insert_registration($_POST[’id_categories’],$_POST[’mr’],addslashes($_POST[’first_name’]),addslashes($_POST[’last_name’]),addslashes($_POS # Structure de la table ‘badge‘ # /*if(mysql_affected_rows()<0) CREATE TABLE badge ( { id_badge int(11) NOT NULL auto_increment, echo "<BR>Un probleme est survenu dans la mise à jour de la base.<BR><BR>"; title varchar(50) NOT NULL default ’’, echo "insert into registration (id_registration, id_categories, mr, first_name, width last_name, title, compagny, adress, int(11) NOT NULL default ’0’, city, state, zip_code, country, phone, fax, email, com echo mysql_errno().": ".mysql_error()."<br>"; height int(11) NOT NULL default ’0’, font_size int(11) NOT NULL default ’0’, // On importe les informations de la session pour le log nom_prenom varchar(5) NOT NULL default ’’, Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 compagny varchar(5) NOT NULL default ’’, country varchar(5) NOT NULL default ’’, description varchar(250) NOT NULL default ’’, PRIMARY KEY (id_badge) ) TYPE=MyISAM; 79 remplacer les chmod 777 dans le fichier install.sh par des chmod 770 pour les répertoires, et pour les fichiers (comme php.conf qui contient le mot de passe d’accès à la base de données). et les données INSERT INTO badge (id_badge, title, width, height, font_size, nom_prenom, compagny, country, description) VALUES (1, ’Human’, 60, 40, 12, ’’, ’TRUE’, ’TRUE’, ’Ma conf’), (2, ’Etiquette Human’, 0, 0, 0, ’’, ’’, ’’, ’’); pour avoir aussi pour les étiquettes et la modif de la requ^ ete dans badge_generator.inc.php (strtoupper pour mettre en majuscule dans la table, mieux pour la gestion du PDF) pour éviter un warning lors de la consultation des log j’ai ajouté le petit test suivant dans le fichier /html/admin/administration/log.inc.php remplacer $fcontents = file( $_GET[’nom_fichier’] ); par if ($_GET[’nom_fichier’]!="") { $fcontents = file( $_GET[’nom_fichier’] ); } Yann $update_badge=mysql_db_query(SQL_BDD,"update badge set width=’".$_POST[’width’]."’, height=’".$_POST[’height’]."’, font_size=’".$_POST[’font_size’]."’, nom_prenom=’".strtoupper($_POST[’name’])."’, compagny=’".strtoupper($_POST[’compagny’])."’ , country=’".strtoupper($_POST[’country’])."’, description=’".$_POST[’description’]."’, title=’".$_POST[’title’]."’ WHERE ‘id_badge‘ =’1’ ",$db_link); puis il faut modifier pour prendre en compte l’apparition ou non du nom-prénom sur le badge %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% dans le fichier /html/admin/participants/payment.inc.php, il faut remplacer <td bgcolor="#BFC4CB"><b><font color="#333333"><? echo $strSummary ?></font></b></td> par <td bgcolor="#BFC4CB"><b><font color="#333333"><? echo $strPayment ?></font></b></td> la checked box dans badge_generator.inc.php <DEFANGED_input type="checkbox" name="name" class="orange" value="true" checked > <? echo "$strFirstName & $strLastName"?><br> pour avoir le bon intitulé dans la page; puis la gestion dans badge_generator.inc.php %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% $pdf->SetFont(’Arial’,’B’,$badge[font_size]); if ($badge[nom_prenom]=="TRUE"){ $pdf->Cell($badge[width],$height,$registration[first_name]." ".$registration[last_name],’LR’,1,’C’);} else{ //il faut passer une ligne vide $pdf->Cell($badge[width],$height,"",’LR’,1,’C’); } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ya encore un pbn avec le logo de la conf, il est pile poil sur le titre de la conf.... Yann Comme je viens d’^ etre confronté au pb, (j’ai résolu en utilisant la bonne volonté des utilisateurs et le champs theme de la table article) ce serait bien de pouvoir indiquer dans une partie du site de l’administration les différents thèmes et sous-thèmes de la conférence et de faire appara^ ıtre cela dans le formulaire de soumission d’article Pour l’instant j’utilise le champs theme-keywords pour y mettre ces informations ben il suffit de de commenter une ligne et d’en décommenter une autre ;) voila if(file_exists("logo.jpg")) { list($im_width, $im_height, $im_type, $im_attr) = getimagesize("logo.jpg"); // echo "Image size : $im_width X $im_height"; // $pdf->Image("logo.jpg",($logoX+1)+($badge[width]$im_width*($height-2)/$im_height)/2, ($logoY+1), ’’, ($height-2)); $pdf->Image("logo.jpg",($logoX+1), ($logoY+1), ’’, ($height-2)); }; ce serait biende pouvoir choisir ou mettre l’image de logo ;) une liste déroulante en plus .... Yann PS : je pense que je vais devoir faire la m^ eme chose avec d’étiquettes ;) la création %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Petit bug corrigé dans user/article.php il était possible d’envoyer un article sans avoir rempli le champs résumé il faut modifier textarea_control("abstract",$abstract); par textarea_control("abstract",$_POST[’abstract’]); dans la partie concernée <td width="47%" height="40"><font color="#0000FF">Résumé (200 mots max)</font><br>Abstract (Maximum 200 words)</td> <td width="50%" height="40"> <? textarea_control("abstract",$_POST[’abstract’]); ?> </td> la voici : Yann $update_badge=mysql_db_query(SQL_BDD,"update badge set width=’".$_POST[’width’]."’, height=’".$_POST[’height’]."’, font_size=’".$_POST[’font_size’]."’, nom_prenom=’".strtoupper($_POST[’name’])."’, compagny=’".strtoupper($_POST[’compagny’])."’ , country=’".strtoupper($_POST[’country’])."’, description=’".$_POST[’description’]."’, title=’".$_POST[’title’]."’ WHERE ‘id_badge‘ =’2’ ",$db_link); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Bonsoir, %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Lorsque les utilisateurs ont modifiés une fois leurs données à l’aide de l’adresse fournie dans l’email, par exemple http://human07.univ-metz.fr/user/info_user.php?pass=zhSEHnOHGtyu6&id=35 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% comment font ils pour se reconnecter plus simplement que par J’ai d’ailleurs une question concernant le champ "comments" dans la table "registration"... il a été enlevé ou ai je une vieille version de la bdd http://human07.univ-metz.fr/user/info_user.php?pass=mon_nouveau_mot_de_passe&id=35 Je l’ai enlevé des requ^ etes concernant la mise à jour des données Pourquoi ne pas passer par un php-secure page ? Yann eest-ce difficile? %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% YAnn %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Bonjour, %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Afin de pouvoir ajouter un logo dans le rep /html/admin/participants/pdf il faut qu’il soit utilisable en écriture ben non pas trop difficile finalement pour re modifier données perso et mot de passe D’ou un chmod 770 /html/admin/participants/pdf voila le code source à modifier du fichier info_user.php, bon encore un p’tit soucis, il faut modifier son mot de pass à chaque modification D’ailleurs en parlant des droits sur la fichiers, je suis d’avis de /******* DATA *******/ Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 $premiere_connexion=1; //modif par yann pour avoir phpsecurepage if (isset($_GET[’id’])){ $id = $_GET[’id’]; } elseif(isset($_POST[’id’])) { $id = $_POST[’id’]; } else { //echo "Error : you have tried to access a protected page."; //exit; $premiere_connexion=0; } if (isset($_GET[’pass’])){ $pass = $_GET[’pass’]; } elseif(isset($_POST[’pass’])) { $pass = $_POST[’pass’]; } else { //echo "Error : you have tried to access a protected page."; //exit; $premiere_connexion=0; } if ($premiere_connexion==0) { /**** PROTECT MODE ****/ $select_access = Service::SelectAll("evenement"); //$select_access=mysql_db_query(SQL_BDD,"select * from evenement",$db_link); $access=mysql_fetch_array($select_access); if($access[access]!="everybody") { //require(ROOT_DIR_PATH."/common/phpSecurePages/functions.inc.php"); require(ROOT_DIR_PATH."/common/phpSecurePages/secure.php"); $requiredUserLevel = array(1,2,3); } //var_dump($access); //var_dump($ID); /*********************/ //modif par yann //$select_personne = Service::select_where("personne","id_personne",$id); $select_personne = Service::select_where("personne","id_personne",$ID); } else { $select_personne = Service::select_where("personne","id_personne",$id); } //var_dump($select_personne); $personne = mysql_fetch_array($select_personne); //var_dump($personne); if ($premiere_connexion==1) { if ($pass != $personne[’passe_personne’]) { echo "Error : you have tried to access a protected page."; exit; } } $fields = array(’mail’,’nom’,’prenom’,’ville’,’adresse’,’pays’,’tel’,’fax’); foreach ($fields as $field) { if(!isset($_POST[$field])) $_POST[$field] = $personne[$field]; }; 80 include (ROOT_DIR_PATH."/archive/log/log.inc.php"); // Link to database /**** FUNCTION ****/ $error=0; require_once(ROOT_DIR_PATH."controle.php"); /********Service********/ require_once(ROOT_DIR_PATH."common/service/service.php"); /******* DATA *******/ $premiere_connexion=1; //modif par yann pour avoir phpsecurepage /* if (isset($_GET[’id’])){ $id = $_GET[’id’]; } elseif(isset($_POST[’id’])) { $id = $_POST[’id’]; } else { //echo "Error : you have tried to access a protected page."; //exit; $premiere_connexion=0; } if (isset($_GET[’pass’])){ $pass = $_GET[’pass’]; } elseif(isset($_POST[’pass’])) { $pass = $_POST[’pass’]; } else { //echo "Error : you have tried to access a protected page."; //exit; $premiere_connexion=0; } */ if (!empty($_GET[’id’])){ $id = $_GET[’id’]; } elseif(!empty($_POST[’id’])) { $id = $_POST[’id’]; } else { //echo "Error : you have tried to access a protected page."; //exit; $premiere_connexion=0; } if (!empty($_GET[’pass’])){ $pass = $_GET[’pass’]; } elseif(!empty($_POST[’pass’])) { $pass = $_POST[’pass’]; } else { //echo "Error : you have tried to access a protected page."; //exit; $premiere_connexion=0; } if ($premiere_connexion==0) { /**** PROTECT MODE ****/ $select_access = Service::SelectAll("evenement"); //$select_access=mysql_db_query(SQL_BDD,"select * from evenement",$db_link); $access=mysql_fetch_array($select_access); if($access[access]!="everybody") { //require(ROOT_DIR_PATH."/common/phpSecurePages/functions.inc.php"); require(ROOT_DIR_PATH."/common/phpSecurePages/secure.php"); $requiredUserLevel = array(1,2,3); ensuite pour avoir les images de l’interface phpsecure page, il faut } copier le répertoire ommon/phpSecurePages/images dans user/ //var_dump($access); //var_dump($ID); voila on dirait que ça marche, /*********************/ //modif par yann Peut ^ etre serait il plus simple de mettre ces infos dans l’interface d’administration... //$select_personne vu que ce = Service::select_where("personne","id_personne",$id); sont des personnes connues (relecteurs, admin, CP) //$select_personne = Service::select_where("personne","id_personne",$ID); voili //var_dump($ID); $_POST[’ident’]=$ID; a+ //var_dump($_POST[’ident’]); $select_personne = Service::select_where("personne","id_personne",$ID); Yann } else %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% { $_POST[’ident’]=$id; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //var_dump($_POST[’ident’]); $select_personne = Service::select_where("personne","id_personne",$id); bof non pas si simple, les mise à jour ne se font pas dans le cas de } phpsecure page //var_dump($select_personne); $personne = mysql_fetch_array($select_personne); je cherche //var_dump($personne); /********************/ voici finalement un truc qui marche... c’est pas trop joli, mais ça marche Yann fichier info_user.php if ($premiere_connexion==1) { if ($pass != $personne[’passe_personne’]) { echo "Error : you have tried to access a protected page."; exit; } } <? session_start(); require_once("../conf.php"); Y. Morère $fields = array(’mail’,’nom’,’prenom’,’ville’,’adresse’,’pays’,’tel’,’fax’); foreach ($fields as $field) { if(!isset($_POST[$field])) L.A.S.C. Documentation phpMyConferences Version 0.1 $_POST[$field] = $personne[$field]; 81 </tr> }; <tr> /********************/ ?> <HTML> <head> <title>Inscription</title> <style type="text/css"> BODY{ font-family: verdana, arial, sans-serif; font-size: x-small; } <!-*{ font-size: x-small; } input, textarea, select { background-color: #CCCCCC; border-style: solid; border-width: 1px; font-family: verdana, arial, sans-serif; font-size: 10px; color: #333333; padding: 0px; } input.red, textarea.red, select.red { background-color: #D89A8F; border-style: dashed; border-width: 1px; font-family: verdana, arial, sans-serif; font-size: 10px; color: WHITE; padding: 0px; } --> </style> </head> <BODY> <H2>Inscription</H2> <td width="3%" height="40"> </td> <td width="47%" height="40">fax :</td> <td width="50%" height="40"> <input type="text" name="fax" size="15" value="<? echo $_POST[’fax’]; ?>"> </td> </tr> <tr> <td width="3%" height="40"> </td> <td width="47%" height="40">e-mail :</td> <td width="50%" height="40"> <input type="text" name="mail" size="50" value=<? modifie_mail($_POST[’mail’]) ?>> </td> </tr> <tr> <td width="3%" height="40"> </td> <td width="47%" height="40">password :</td> <td width="50%" height="40"> <input type="password" name="new_pass" size="20" class=red> </td> </tr> <tr> <td width="3%" height="40"> </td> <td width="47%" height="40">confirme :</td> <td width="50%" height="40"> <input type="password" name="confirme_pass" size="20" class=red> </td> </tr> <tr> <td width="3%" height="40"> </td> <td width="47%">validate >></td> <td width="50%"> <input type="submit" name="validate" value="validate"> </td> </tr> </table> </p> </form> <p> <? <form method="post" action="info_user.php"> /****** UPDATE *******/ if($error==0&&isset($_POST[’validate’])) <input type="hidden" name="id" size="20" value="<? echo $_GET[’id’];?>"> { <input type="hidden" name="pass" size="20" value="<? echo $_GET[’pass’];?>">/*** VALIDE PASS ***/ <input type="hidden" name="ident" size="20" value="<? echo $_POST[’ident’];?>"> <table width="90%" border="0"> if($_POST[’confirme_pass’]!=$_POST[’new_pass’]) <tr> { <td width="3%" height="40"> </td> echo "<script language=’Javascript’>alert(’your password entries do not match. please retype <td width="47%" height="40">first name :</td> exit; <td width="50%" height="40"> } <input type="text" name="nom" size="20" <?modifie($_POST[’nom’]);?>> </td> if(strlen($_POST[’new_pass’])<5) </tr> { echo "<script language=\"JavaScript\">alert(\"Your password must be at least 5 characters .\" <tr> exit; <td width="3%" height="40"> </td> } <td width="47%" height="40">last name :</td> <td width="50%" height="40"> /** Database update **/ <input type="text" name="prenom" size="20" <?modifie($_POST[’prenom’]);?>> </td> //var_dump($_POST[’ident’]); </tr> $mail=strtolower($_POST[’mail’]); $nom=strtolower($_POST[’nom’]); <tr> $prenom=strtolower($_POST[’prenom’]); <td width="3%" height="40"> </td> $maj_personne = Service::update_douze("personne","titre",addslashes($_POST[’titre’]),"n <td width="47%" height="40">adress :</td> <td width="50%" height="40"> if(mysql_affected_rows($maj_personne)<0) <input type="text" name="adresse" size="50" value="<? { echo $_POST[’adresse’]; // On importe les informations de la session pour le log ?>"> ecriture_log("ERROR on the database : ".mysql_errno()); </td> } </tr> else { <tr> // On importe les informations de la session pour le log <td width="3%" height="40"> </td> ecriture_log("Update : ".$prenom." ".$nom); <td width="47%" height="40">city :</td> echo "<SCRIPT language=\"JavaScript\">alert(\"Information updated.\\nThank you\")</SCRIPT>"; <td width="50%" height="40"> <input type="text" name="ville" size="20" value="<? echo $_POST[’ville’]; ?>"> echo " zipcode : <input type="text" name="cp" size="5" value="<? echo $_POST[’cp’]; ?>"> <script language=’javascript’> </td> <!--// </tr> window.location.replace(’".ROOT_URL."’); //--> <tr> </script>"; <td width="3%" height="40"> </td> <td width="47%" height="40">country :</td> } <td width="50%" height="40"> /*********************/ <input type="text" name="pays" size="50" value="<? echo $_POST[’pays’]; ?>"> } </td> </tr> ?> </BODY> <tr> </HTML> <td width="3%" height="40"> </td> <td width="47%" height="40">phone :</td> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% <td width="50%" height="40"> <input type="text" name="tel" size="15" maxlenght="15" value="<? echo $_POST[’tel’]; ?>"> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% </td> <p>All fields marked in <font color="#D89A8F">red</font> are mandatory.</p> Y. Morère L.A.S.C. Documentation phpMyConferences Version 0.1 82 Dans le formulaire de soumission de papier, il est possible d’envoyé un papier sans remplir le champs obligatoire "abstract" ou keywords.. Bonjour, Si comme moi votre site de conference est hébergé par un serveur apache qui autorise l’affichage du contenu des répertoires, utilisez le fichier index.html suivant afin d’éviter le listage. voici les modifications <tr> <td width="3%" height="40"> </td> yann@yoda:~/temp$ more index.html <td width="47%" height="40"><font color="#0000FF">Résumé (200 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" mots max)</font><br>Abstract (Maximum 200 words)</td> <td width="50%" "http://www.w3.org/TR/html4/loose.dtd"> <html> height="40"> <? textarea_control("abstract",$_POST[’abstract’]); ?> <head> </td> <DEFANGED_meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> </tr> <title>Conférence human07</title> <!-</head> <? textarea_control("abstract",$abstract); ?> <body> <input type"textarea" name="abstract" rows="5" cols="50" <? Accès non Autorisé. modifie($_POST[’abstract’]); </body> ?>></input> </html> yann@yoda:~/temp$ --> <tr> Copiez le dans chaque répertoire de l’arborescence du site de la conf, qui ne contient ni fichier "index.php" ni fichier "index.html". en <td width="3%" height="40"> </td> effet par défaut apache cherche et affiche les fichiers index.*, et <td width="47%" height="40"> s’il ne les trouve pas affiche le contenu du répertoire si cela est <table border="0" width="100%"> autorisé. <tr> <td width="50%" height="40" valign="top"> Cela évitera à des personnes mal intentionnées de télécharger <font color="#0000FF"> facilement les fichiers php de les étudier et d’y trouver une faille Mots-clés (séparés par |)<br> afin de prendre le contr^ ole de votre conférence Les mots clés doivent ^ etre constitués d’une catégorie et d’une ou plusieurs sous catégories parmi les suivantes Je rappelle pour info que les mots de passe sont en clair dans la (vous pouvez eventuellement rajouter des sous-catégories) séparés par base!!! des |. <b>Attention : Veuillez remplir ce champs avec les termes anglais.</b> </font> </td> <td width="50%" height="40" valign="top"> Il est toujours possible de faire un wget sur le site de la conf et de Keywords (separeted by | ) :<br> Keyword list is made of one category récupérer les fichiers, mais cela fait un premier rempart (enfin une word and one or more sub-category words from the following lists (you petite barrière). can add sub-category) separated by |. <b>Warning : Please, fill this field with english words</b> </td> </tr></table> <td width="50%" Yann height="40"> <? textarea_control("theme",$_POST[’theme’]); ?> </td> <!--commentaire PS : j’ai remarqué que certain fichier étaient encodé en UTF-8 et <td width="50%" height="40"> d’autres en ISO-8859-1. <? textarea_control("theme",$theme); ?> Pourrait on harmoniser ? <input type="textarea" name="theme" rows="5" cols="50" <? modifie($_POST[’theme’]); L’aide d’iconv sera la bienvenue... iconv -f utf-8 -t iso-8859-1 par exemple ?>></type> <textarea name="theme" rows="5" cols="50"><? echo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% $_POST[’theme’]; ?></textarea> </td> --> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Yann Bonjour %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5 conclusion C’en est fini de cet article, toutes remarques et corrections sont les bienvenues à l’adresse [email protected] Y. Morère L.A.S.C.