Aller au contenu

jcaron

Membre+
  • Compteur de contenus

    998
  • Inscrit(e) le

  • Dernière visite

Tout ce qui a été posté par jcaron

  1. Tu envoies le mail à partir d'une machine hébergée par qui? Oleane? Si ce n'est pas le cas, il est normal que le serveur smtp d'Oleane ne veuille pas accepter de mail de sa part... La meilleure solution est probablement d'avoir un serveur smtp sur ta propre machine... Jacques.
  2. Un truc qui n'a rien à voir: <Limit GET POST> ne fait propablement pas du tout ce que tu crois. Lis la doc, tu risques d'avoir un choc (version courte: enlève-le). Pour revenir à ton problème, une partie de la réponse vient probablement du fait que tes pages d'admin contient des images (ou fichiers css, scripts...) qui sont dans "le reste" du site, non? Bizarre cependant qu'il te les demande 4 fois. Regarde les logs, utilise un sniffer (tcpdump, wireshark...) ou utilise curl -v en ligne de commande pour comprendre ce qui se passe. Une solution plus simple et élégante consiste probablement à avoir un fichier (htpasswd) unique avec tous les identifiants (un par personne), et à utiliser la notion de "groupe" (via AuthGroupFile) pour définir qui a le droit d'accéder à la partie admin ou pas (i.e. require group xxx au lieu de require valid-user). Jacques.
  3. update table set chapitre=chapitre+1 where chapitre>=chapitre_insere Non? Jacques.
  4. Le plus propre est probablement de renuméroter les suivants. Ca peut se faire en une seule ligne de SQL, donc ce n'est pas spécialement difficile. Sinon tu peux utiliser une stratégie relativement simple, mais qui a ses limites: au départ tu numérotes par multiples de 10000 (par exemple). Si jamais tu dois insérer quelque chose, alors tu utilises des multiples de 1000, et ainsi de suite. Ou alors par dichotomie, tu prends la moyenne des valeurs avant et après - ce qui est généralement plus simple, et atteindra a priori ses limites plus tard. Mais quoi qu'il arrive à un moment donné tu sera coincé. Une autre option (mais probablement plus difficile à implémenter au niveau SQL pour faire les opérations habituelles genre tri, pagination, ceci dit je n'ai jamais essayé), est de ne pas stocker un ordre absolu, mais uniquement un ordre relatif, i.e. tel chapitre est "après" un autre et "avant" un troisième. Jacques.
  5. Tradedoubler a ajouté il y a quelques mois déjà une procédure de vérification des sites soumis. Tu vas dans Vos Infos -> Votre Site -> nom du site -> Verify et tu suis la procédure (il y a un bout de HTML à rajouter dans tes pages). De mémoire, il y a un bug, il faut d'abord répondre aux questions en bas et sauvegarder avant de pouvoir vérifier le site... Jacques.
  6. Au minimum, tu peux toujours lui fournir un fichier à télécharger, en lui expliquant où il faut qu'il l'enregistre. Pour le cas plus particulier du certificat, pourquoi spécifiquement sur une clef USB? Si elle est enregistrée dans la liste des certificats du navigateur il me semble qu'il y a un système qui permet d'automatiser ça (voir par exemple le site des impôts qui a une procédure en ce sens, mais il semblerait qu'au moins dans certains cas ils recourent à un contrôle ActiveX). Si tu nous en disais un peu plus sur ce que tu veux faire avec ce certificat on peut peut-être te trouver une solution adaptée... Jacques.
  7. La deuxième requête que j'ai donnée fait justement ça, partir d'une date arbitraire plutôt que d'aujourd'hui (remplacer 14320 par la date voulue...). La requête est un peu complexe, mais c'est pas si difficile que ça à expliquer: ce que tu veux, c'est faire la somme des visites pour les lignes qui ont une enchère qui correspond à la dernière enchère (à la date voulue), mais pour lesquelles il n'y a pas de lignes postérieures avec une enchère différente. Trivial, quoi :-) Ceci dit avant mon premier message j'ai failli dire que ce n'était pas possible en SQL ;-> Jacques.
  8. Si c'est juste la page de soumission du formulaire qui te pose un problème, elle n'oblige pas du tout à utiliser un iframe... Il suffit de mettre un action= (dans le <form>) avec une URL absolue... Sinon si tu restes avec un iframe au niveau du formulaire, tu peux toujours mettre un target="_top" pour que le résultat prenne toute la page et que tu n'aies pas de problème de scroll. Evidemment tu perds la mise en page "autour" du formulaire/résultat. Jacques.
  9. Si tu mets la bonne date (ou si tu utilises la première version que j'ai donnée), tu obtiendras le bon résultat. D'ailleurs avec les données que tu as données dans ton message de 13h30 et la requête que j'ai donné ensuite, on obtient effectivement les résultats que tu veux (et as indiqués dans le même message). Et dans ton dernier message tu ne donnes qu'une seule série (nombre de visites ou enchères?), donc je ne sais pas très bien comment on pourrait arriver à quoi que ce soit avec ça... Jacques.
  10. Ma requête te donne la somme (jusqu'à aujourd'hui) pour la dernière enchère pour chaque mot-clef, qui est ce que tu avais initialement demandé il me semble. Et maintenant tu dis que tu veux ceux pour l'enchère "initiale", puis avec une histoire de date de début. Ca devient touffu :-) select motcle,enchere,sum(visites) from t t1 where enchere = (select enchere from t t2 where t2.motcle=t1.motcle and date <= 14320 order by date desc LIMIT 1 ) and not exists (select * from t t3 where t3.motcle=t1.motcle and t3.date>t1.date and t3.enchere<>t1.enchere and t3.date<= 14320) and date <= 14320 group by motcle,enchere Le "not exists" permet ici de ne pas prendre en compte les lignes de t1 pour lesquels il existe une enchere différente à une date postérieure (à la ligne de t1). Ca permet de tenir compte des variations genre 0.1 0.1 0.1 0.2 0.2 0.1 0.1 0.1 (tu veux ignorer les trois premiers 0.1: il existe pour chacune une ligne avec une date supérieure et une enchère différente, donc elles sont éliminées). Jacques.
  11. Je te propose: SELECT motcle, enchere, sum(visites) FROM table t1 WHERE enchere = ( SELECT enchere FROM table t2 WHERE t2.motcle=t1.motcle ORDER by date desc LIMIT 1 ) AND NOT EXIST ( SELECT * FROM table t3 WHERE t3.motcle=t1.motcle and t3.date>t1.date AND t3.enchere<>t1.enchere) GROUP BY motcle,enchere Mais ça risque d'être un peu dur avec ta base SQL si la table grossit un peu... Jacques.
  12. Remplacer "chemin_de_ton_fichier_php" par "php chemin_de_ton_fichier_php". Dans certains cas ce sera php5 plutôt que php. Jacques.
  13. Un script php n'est pas directement exécutable (à moins qu'il ne commence par un #!/chemin_vers_php, mais c'est assez peu courant je pense). Il te faut donc exécuter php en lui donnant ton script. Note aussi que cron devrait t'envoyer un mail avec les messages d'erreurs (en tous cas envoyer un mail au compte qui exécute ce cron...). Jacques.
  14. Je ne suis pas sûr de comprendre le lien avec cron, mais si tu veux exécuter un script shell à partir de php tu peux utiliser system(). Mais fais très très très très très attention à bien filtrer tout ce que tu lui passes, il est excessivement facile de faire une injection de code avec de genre de choses. Voir la doc de PHP sur le sujet, en particulier safe_mode, escapeshellarg() et escapeshellcmd(). Ceci dit, si ton script crée des utilisateurs Unix: - fais très attention aux droits que tu leur donnes et à la sécurité de ta machine - tu risques d'avoir un problème parce que ton script doit être exécuté par root alors que php tourne comme un utilisateur non privilégié. Et si jamais tu veux faire un peu de setuid, encore une fois, fais très très très attention. Je ne sais pas ce que tu cherches à faire au bout du compte, mais il y a probablement des méthodes nettement plus simples pour y parvenir, non? Jacques.
  15. Si tu as fait un copié-collé exact de ton code, alors tu te mélanges les pinceaux entre les " et les ' dans ton connect... Jacques.
  16. Le problème c'est qu'il s'agit de deux mécanismes différents: deny/allow sur les adresses IP, et require pour l'authentification. Il n'existe pas à ma connaissance de mécanisme qui permette de lier les deux. D'où ma méthode :-) Ceci dit, vu comme il est facilement possible de sauvegarder l'auth dans les browsers, et comme l'auth vit aussi longtemps que la session, ça ne me paraît pas indispensable tout ça :-) Jacques.
  17. J'ai failli dire que ce n'était pas possible avec les directives Apache standard, mais j'ai trouvé une solution... Encadre tes directives d'authentification (ou au minimum le require valid-user) dans tes .htaccess par <IfDefine pas_dauth> et </IfDefine>. Ensuite lance ton serveur local en ajoutant un -Dpas_dauth (suivant comment tu le lances la méthode ne sera pas la même). Tu peux utiliser n'importe quelle autre mot à la place de "pas_dauth" évidemment. http://httpd.apache.org/docs/1.3/mod/core.html#ifdefine Note cependant que si ton code utilise ensuite le nom de l'utilisateur connecté ($_SERVER['REMOTE_USER']) ça ne marchera évidemment pas... Jacques.
  18. http://java.sun.com/j2se/1.5.0/docs/api/ja...checkValidity() peut-être? Jacques.
  19. Ca risque surtout de dépendre de ton répertoire courant, non? Que dit echo getcwd() dans les deux cas? Jacques.
  20. jcaron

    emploi de &

    Oui, & ou & sont non seulement autorisés dans les attributs, mais carrément obligatoires: un attribut HTML peut contenir des entités (&quelquechose;), ne serait-ce que pour pouvoir mettre un " (") à l'intérieur. Donc le "&" est le début d'une entité, donc il doit lui-même être échappé, et écrit & ou &. Sinon le browser va essayer de décoder ce qui suit le & comme étant le nom d'une entité. En général il ne va pas y arriver et interpréter ça comme un "&" quand même, mais si par hasard il y a vraiment le nom d'une entité derrière ça peut mal finir... La procédure est simple: - tu construis ton URL: les caractères non autorisés dans une URL seront URL-encodés (espaces remplacés par + ou %20, autres caractères non autorisés remplacés par %xx), en particulier les "composants" de l'URL (valeurs des paramètres) qui ne peuvent pas contenir de &, =, +, %, de caractères non-ASCII, etc. - on obtient donc une URL, par exemple http://www.exemple.tld/truc?toto=machin+ch...tre+encod%c3%a9 - si tu veux la mettre dans un attribut d'une balise HTML (un HREF, un SRC, etc.), il faut ensuite encoder les caractères non autorisés et les remplacer par des entités. En particulier ", &, < et >: http://www.exemple.tld/truc?toto=machin+ch...tre+encod%c3%a9 En sens inverse, le browser va décoder les entités dans l'attribut pour reconstruire l'URL, puis le serveur web décodera les paramètres URL-encodés. En clair: le & qui sépare les paramètres d'un URL n'est pas encodé *dans l'URL*, mais dans la représentation de l'URL dans un attribut HTML. D'ailleurs une validation W3C ne réussira pas si les & ne sont pas correctement encodés. Non: le & va être décodé par le browser, qui va donc obtenir l'URL http://www.example.com/index.php?alpha=you...eβ=1234. Et le serveur web va donc obtenir trois paramètres, alpha (= you), me (sans valeur), et beta (= 1234). Jacques.
  21. C'est clair que php5 monscript.php c'est quand même probablement plus efficace que wget... Attention cependant aux différents de réglages (php.ini différent, environnement, utilisateur, droits...). Sinon pour revenir à la question initiale, cron ne refait pas d'essais tout seul. Donc ça veut probablement dire que tu as configuré ton cron pour faire plusieurs essais jusqu'à ce que ça marche, auquel cas il faut soit que tu arrêtes de le faire, soit que tu changes ta logique (ne pas refaire une tentative si le cron a réussi OU si la même requête est déjà en cours). Jacques.
  22. Pour les deux questions, sendmail n'a rien à voir là-dedans, il ne fait que transmettre le mail. Pour le premier problème, le minimum est de mettre une adresse de retour (From:, MAIL FROM de l'enveloppe, Reply-To:, Errors-To, Return-Path...) qui arrive sur une adresse où les bounces seront traités. Pas forcément trivial parce qu'il y a des tas de formats de bounce différents, et que ce n'est pas parce que tu reçois un mail en retour qu'il y a forcément une erreur définitive (ça peut être un auto-responder genre vacances, un message d'erreur temporaire...). Et inversement, ce n'est pas parce que tu ne reçois rien en retour que le mail arrive quelque part d'intelligent. Pour l'ouverture des mails, il convient de mettre dans ta page des "bugs" qui vont faire des requêtes HTTP quand le mail sera ouvert. Là encore, ce n'est pas forcément trivial, les classiques bugs 1x1 étant filtrés par certains outils, d'autres clients mail ne chargent pas les images par défaut ou pas dans certains cas, etc. Très difficile d'obtenir une indication réellement fiable. Pour les clics là c'est beaucoup plus facile, il suffit de faire en sorte que chaque lien soit tracké, soit directement à la destination, soit à travers un petit redirect qui va logguer tout ça (attention aux anti-spam/virus qui peuvent ne pas aimer qu'un lien affiché soit différent d'un lien de destination). Jacques.
  23. Quelques trucs à essayer: - virer le \r\n à la fin des headers (du dernier header) qui est superflu, me semble-t-il - il me semble que le \r\n à la fin du fichier est de trop aussi, pas sûr, flemme d'aller vérifier la spec. Ceci dit, il serait probablement plus simple d'utiliser un module qui fait ça tout seul, non? La doc php conseille PEAR::Mail_Mime http://pear.php.net/package/Mail_Mime Jacques.
  24. Euh, non, c'est pas ça, c'est à la ligne suivante il y a un \r\n\n et il faut un \r\n. Jacques.
  25. Au minimum tu as déjà un "\r\n\n" à la fin de ton Content-Type text/plain qui est évidemment incorrect. Ca devrait au moins résoudre le premier problème, probablement le deuxième aussi. Jacques.
×
×
  • Créer...