Aller au contenu

AntoineViau

Webmaster Régulier
  • Compteur de contenus

    86
  • Inscrit(e) le

  • Dernière visite

Tout ce qui a été posté par AntoineViau

  1. Je serai bientôt dans la même situation que toi : site d'annonces gratuites (spécialisé) tout nouveau tout beau donc avec très peu de "matière". Déjà, je pense qu'il faut virer le nombre de mises en ventes à côté de chaque catégorie. Quand le visiteur arrive, la première chose qu'il voit c'est que tu as très peu de produits, ce qui est assez démotivant. Antoine
  2. J'ai mis en place une méthode dynamique pour détecter les robots. Ca te permettra d'avoir une liste à jour en temps-réel. Inconvénient : les robots doivent impérativement lire le fichier robots.txt. J'explique tout sur mon blog. Dans le même ordre d'idée, fait une recherche sur RobotStat qui fait la même chose que moi mais de façon plus évoluée. EDIT : Suite à un transfert d'hébergement mal fini, le système était en rade quelques temps. C'est pour cela que les derniers passages n'ont pas été pris en compte. Et pour faire quelques tests j'ai aussi appelé moi-même le fichier robots.txt, ce qui fait que mes visites ont été considérés comme celles d'un robot. Antoine
  3. Je suis loin d'être spécialiste en la matière mais j'ai toujours entendu dire qu'un agent commercial prenait aux alentours des 15% Antoine
  4. +1 pour phpMyVisites avec un léger bémol : comme c'est un script qui fonctionne au "chargement de page" il n'y a pas de traitement automatique. Autrement dit, si tu as beaucoup de visites, et que tu ne consultes pas tes stats tous les jours, tu peux te retrouver avec un plantage parce que les calculs sont trop lourds sur une période un peu longue. Néanmoins, je parle de la version 1.3. La 2.0 est sortie en beta récemment et est annoncée plus rapide. A suivre donc... Antoine
  5. Effectivement, c'est un peu dommage de ré-inventer la roue étant donner qu'il y a moultes services de stats. Perso, j'utilise l'excellent phpMyVisites qui est gratuit (car open-source). Pas trop compliqué à installer et donne toutes les infos intéressantes. On pourra, au pire, lui reprocher son interface qui est moins "sexy" que les services payants (comme estats) mais qui reste très pragmatique. Toutefois, il peut y avoir des cas où ce genre de système "clef-en-main" pose une limite : l'intégration avec des fonctions spécifiques au site. Dans mon cas, j'ai créé et je maintiens un site d'e-commerce (www.histoireetcollections.com) et je ne sais pas d'où vient le visiteur qui a acheté. J'avais écrit un ptit système de stats maison qui traçait les visiteurs mais il s'est vite révélé trop lourd parce que je n'avais pas écrit le code qui "compile" toutes les données accumulées afin d'alléger les calculs et requêtes. Tout dépend de l'importance que tu donnes à ce genre d'information. Rien n'empêche d'utiliser un double système ("clef en main" et "fait maison"). C'est probablement ce que je vais faire d'ailleurs. Antoine
  6. T'as mal placé un point petit scarabé : $Plat="SELECT * WHERE cuisine like '"addslashes.("$cuisine2%")." AND valide='1%'" $Plat="SELECT * WHERE cuisine like '".addslashes("$cuisine2%")." AND valide='1%'"
  7. Il s'agit d'une confusion entre deux interprétations. D'une part celle de PHP, d'autre part celle de SQL. D'un point de vue général, je te conseille : - toujours écrire ses chaînes PHP avec des guillemets. Donc mettre plutôt $cuisine2 = "patate à l'eau"; Ca te permet de distinguer clairement ce qui est une chaîne et une "chaîne dans une chaîne" (dans ce cas tu mets un antislash). - addslashes est ton ami quand tu travailles en SQL à partir de PHP. Autrement dit : $cuisine2 = "patate à l'eau"; mysql_query("INSERT INTO matables VALUES(".addslashes($cuisine2).")"); Et tu seras assuré que ce qui est dans la BDD est bien ce que tu voulais. Et dans l'autre sens, même principe : $var = "patate à l'eau"; $r=mysql_query("SELECT * FROM matable WHERE monchamp='".addslashes($var)."'"); Si tu ne mets pas le addslahes, voici ce qui est envoyé à MySQL : SELECT * FROM matable WHERE monchamp='patate à l'eau' (problème !) avec le addslahes : SELECT * FROM matable WHERE monchamp='patate à l\'eau' (bien !) Antoine
  8. Oula mais moi aussi j'ai fait mon discours explicatif... Et puis bien... j'ai tout expliqué en détail en prenant bien mon temps, avec moultes précisions, etc, etc. Le client était prêt à me payer pour que j'arrête de parler Mais surtout il a commencé à comprendre que c'était un "vrai" travail. Antoine
  9. - "Vous prenez notre affiche vous mettez des boutons là et là par dessus, je vois vraiment pas en quoi c'est compliqué !" Allez expliquer le concept même de HTML à quelqu'un qui n'y connait rien. Me suis retrouvé à faire un site méthode 1998 à grands coups de slices. Snif. - "Mais on ne voit pas la page en entier !!" (800x600, boutons grand format dans la toolbar d'IE + yahoo bar + google bar + bar d'adresse) - "J'ai déjà vu un [truc à la con] sur un autre site" Généralement le [truc à la con] n'est pas sur "l'autre site". - "Les images je te les donne en combien de DPI ? Tu les veux en PSD hein ?" Un graphiste qui disait savoir faire du Web. - "Monsieur, vous avez plagié mon site !" Site blanc sur fond noir, carré, 10 photos, texte d'avertissement pour contenu adulte. - "Ah bon, c'est gênant le texte dans les images pour les traductions ?" Le graphiste qui disait savoir faire du Web. - "Mais c'est quoi ton vrai métier ?" Ma grand-mère. - "Quand on fait plus de xxx euros de CA/jour la direction générale peut se féliciter elle-même. Sinon le webmaster est un incompétent." Mon patron (mais il rigolait) (heureusement) - "Mais c'est moche !" Réaction d'un collègue vis à vis du boulot du graphiste qui disait savoir faire du Web. Je dois en avoir encore plein d'autres Antoine
  10. C'est assez classique. Généralement, c'est un 1/3 avant de commencer (une fois le cahier des charges et le devis validés), 1/3 durant l'avancement (à fixer dans le contrat) et le 1/3 final à la livraison. L'important c'est de bien définir tous les termes du contrat à l'avance. Pour revenir sur ta notion de prix, il est vrai qu'il est relativement difficile de facturer un tel travail. Dis toi que tu ne ferais pas payer le même prix si tu faisais un site pour Dior plutôt que pour la boucherie Sanzot. Les divers paramètres cités par les précédents contributeurs sont justes : - sous quelle forme juridique te présentes tu ? (micro société, indépendant, EURL, SARL, dilettante ?) - estimation de ton temps de travail. Et sur ce point, mets ton égo de côté. Si tu penses mettre 2 jours pour faire telle chose, pense plutôt que tu vas en mettre trois. Ne serait-ce parce que le client peut demander des modifs en cours de route (ce qui peut être un moyen de toucher plus, mais à blinder par contrat) - quelles sont tes références ? La "garantie" de "bon" travail" se facture aussi. A toi de déterminer, non pas un prix maximum, mais ton meilleur rapport qualité/prix. - vas tu faire un suivi du site ? Fournis tu les élements pour la gestion du contenu ? - etc, etc. Bon courage ! Antoine
  11. Pas compris : il s'agit d'embauche ou d'un contrat freelance ? Paske s'il y a embauche, le nombre de pages en PHP ne compte plus vraiment. Sinon je serais très très riche aujourd'hui Antoine
  12. Bon alors, je explique en détail :-) En PHP4, il y a des fonctions qui permettent de parcourir un fichier XML et de récupérer les informations. En fait, ça n'est pas réellement un fichier XML mais un "flux" XML. En gros, ça signifie des données brutes qui peuvent venir de sources diverses comme : mémoire, fichier, réseau, etc. En l'occurence dans mon exemple je fonctionne avec un fichier. Le petit truc qui a dû te perturber c'est le fait que j'utilise une variable paramètre nommée $adresse. C'est parce que je veux pouvoir lire un fichier XML aussi bien sur ma machine que sur une machine distante. Donc $adresse peut être "/mondir/fichiers/lefichier.xml" ou &quot;http://www.monsite.com/lefichier.xml". Ensuite, comment fonctionne précisément les fonctions PHP4 pour le XML ? C'est très simple. - tu crées un parser. C'est une sorte d'objet interne à PHP4 qui va s'occuper de lire le XML que tu lui donnes. Tu crées le parser avec xml_parser_create sans aucun paramètre. Il te retourne un identifiant dont tu te serviras plus tard pour dire "je travailler avec tel parser". parser=xml_parser_create(); - tu indiques ensuite à ton parser quelles sont les fonctions qu'il devra appeler selon les données qu'il rencontre dans le flux XML. xml_set_element_handler quand il s'agit des élements (ListeArtiste, Artiste) et xml_set_character_data_handler pour les données qui sont encapsulées dans les éléments (Abba, Ace Of Base, etc.Particularité pour les éléments : tu indiques deux fonctions. Celle qui sera appelée lorsque le parser rencontre un élément qui s'ouvre (<Artiste>) et celle lorsqu'il rencontre un élément qui se ferme (</Artiste>). xml_set_element_handler($parser,"xml_open","xml_close"); xml_set_character_data_handler($parser,"xml_data"); - Viens enfin le grand moment où tu vas "nourrir" le parser en lui fournissant un flux XML. C'est simplement une ouverture de fichier (local ou distant), puis on lit le fichier morceau par morceau (en l'occurence des morceaux de 4096 octets) et on donne chaque morceau au parser. @$fp = _AT_fopen($adresse,"r"); if ($fp) { while ($data = fread($fp, 4096)) { if ( !@xml_parse($parser, $data, feof($fp)) ) { $err=1; break; } } } - A chaque fois que le parser rencontrera un élément qui s'ouvre il appelera la fonction qu'on lui a indiqué, en l'occurence xml_open, et lorsqu'il se ferme ça sera xml_close. Ces deux fonctions ont l'identifiant du parser, le nom de l'élément et les attributs en paramètres. - A chaque fois que le parser rencontre des données il appelle notre fonction xml_data. Les paramètres reçus sont l'identifiant du parser et les données elle-même. - Dernier point : le parser lit le XML comme il vient. Autrement dit, il va appeler les fonctions au fur et à mesure de ce qu'il trouve. Ca signifie que tu es certain qu'il ne pas commencer par te retourner des infos en plein milieu du flux XML. Ca se fait séquentiellement, ce qui est un avantage. Vala en espérant que ce soit plus clair. N'hésite pas à consulter la doc de PHP sur www.php.net Antoine
  13. salut ! Si tu es en version 5 de PHP, tu as simpleXML qui est intégré. A toi les joies de la doc :-) Si tu es en PHP4, j'ai un bout de code pour toi. J'utilise l'ancien parser XML de PHP qui est un peu lourdinque à utiliser mais très simple d'emploi. J'en ai fait un petit RSS Reader tout pourri Le principe général : - on crée un parser XML - on lui attribue des callbacks qui seront appelés en fonction de ce qu'il rencontre pendant le parsing - on lui donne des data à parser - et voilà function xml_open($parser,$elmt,$attr) { global $lastelmt,$nb_rssnews; $lastelmt=$elmt; if ($elmt=="ITEM") { $nb_rssnews++; } } function xml_data($parser,$data) { global $lastelmt,$nb_rssnews,$rssnews,$rssencodage; if ($rssencodage) { $data=utf8_decode($data); } if ( $nb_rssnews != -1 ) { if ( $lastelmt == "TITLE" ) { $rssnews[$nb_rssnews]["titre"].=$data; } if ( $lastelmt == "LINK" ) { $rssnews[$nb_rssnews]["link"].=$data; } if ( $lastelmt == "PUBDATE") { $rssnews[$nb_rssnews]["pubdate"].=$data; } if ( $lastelmt == "DESCRIPTION" ) { $rssnews[$nb_rssnews]["desc"].=$data; } } } function xml_close($parser,$elmt) { } function compare($a, $b) { if ( $a["ts"] < $b["ts"] ) { return(1); } if ( $a["ts"] > $b["ts"] ) { return(-1); } if ( $a["ts"] == $b["ts"] ) { return(0); } } function ReadRSS($adresse,$encodage,&$resrssnews) { global $last_elmt; global $nb_rssnews; global $rssnews; global $rssencodage; $rssnews=array(); $rssencodage=$encodage; $lastelmt=""; $nb_rssnews=-1; $parser=xml_parser_create(); xml_set_element_handler($parser,"xml_open","xml_close"); xml_set_character_data_handler($parser,"xml_data"); $err=0; @$fp = _AT_fopen($adresse,"r"); if ($fp) { while ($data = fread($fp, 4096)) { if ( !@xml_parse($parser, $data, feof($fp)) ) { $err=1; break; } } fclose($fp); } else { $err=1; } xml_parser_free($parser); $nb_rssnews++; if ( !$err ) { for($i=0; $i<$nb_rssnews; $i++) { if ( strlen( $rssnews[$i]["desc"] ) < 10 ) { $rssnews[$i]["desc"]=""; } sscanf($rssnews[$i]["pubdate"],"%s %02d %s %04d %02d:%02d:%02d GMT", $rssnews[$i]["jour_str"], $rssnews[$i]["jour"], $rssnews[$i]["mois_str"], $rssnews[$i]["annee"], $rssnews[$i]["heure"], $rssnews[$i]["minute"], $rssnews[$i]["seconde"]); if ($rssnews[$i]["mois_str"]=="Jan") $rssnews[$i]["mois"]=1; if ($rssnews[$i]["mois_str"]=="Feb") $rssnews[$i]["mois"]=2; if ($rssnews[$i]["mois_str"]=="Mar") $rssnews[$i]["mois"]=3; if ($rssnews[$i]["mois_str"]=="Apr") $rssnews[$i]["mois"]=4; if ($rssnews[$i]["mois_str"]=="May") $rssnews[$i]["mois"]=5; if ($rssnews[$i]["mois_str"]=="Jun") $rssnews[$i]["mois"]=6; if ($rssnews[$i]["mois_str"]=="Jul") $rssnews[$i]["mois"]=7; if ($rssnews[$i]["mois_str"]=="Aug") $rssnews[$i]["mois"]=8; if ($rssnews[$i]["mois_str"]=="Sep") $rssnews[$i]["mois"]=9; if ($rssnews[$i]["mois_str"]=="Oct") $rssnews[$i]["mois"]=10; if ($rssnews[$i]["mois_str"]=="Nov") $rssnews[$i]["mois"]=11; if ($rssnews[$i]["mois_str"]=="Dec") $rssnews[$i]["mois"]=12; $rssnews[$i]["ts"]=gmmktime( $rssnews[$i]["heure"], $rssnews[$i]["minute"], $rssnews[$i]["seconde"], $rssnews[$i]["mois"], $rssnews[$i]["jour"], $rssnews[$i]["annee"]); } usort($rssnews,"compare"); $resrssnews=$rssnews; return(1); } return(0); }
  14. Ou alors utiliser setInterval qui va appeler de façon régulière une fonction. mon_timer = setInterval("mafonction()",1000); Va appeller mafonction() toutes les secondes. Pour l'arrêter : clearInterval(mon_timer); Et vala... Antoine
  15. 'lut, J'ai repéré un ptit bug. Bon c'est vraiment trois fois rien. Une fois inscrit, lorsque tu cliques sur "Lien Rapide" ou "Recherche" tu as un menu qui apparaît. A ce moment là, en passant d'un bouton à l'autre tu fais apparaître les menus. Autrement dit, après avoir cliquer pour faire apparaître un menu, tu passes en mode roll-over. Si tu cliques ailleurs dans la fenêtre, tu re-passes alors en mode OnClick et l'effet roll-over disparaît. Tu dois re-cliquer pour que les menus apparaîssent. Bon ok, c'est pas super clair... Et puis faut vraiment en vouloir aux mouches à ce stade Antoine
  16. Un petit up pour signaler que mon problème est résolu mais ça n'a pas été sans mal. Donc effectivement, la configuration de base qui consiste à avoir les DNS chez OVH pour mon NDD fonctionne très bien. Ca m'apprendra à lire trop vite les guides et à ne pas réfléchir sur des choses que je connais déjà En revanche, là où ça a été plus sport, c'est qu'en remettant les DNS du NDD chez OVH, j'ai inversé primaire et secondaire. Forcément, ça marche moins bien. Ensuite, pour je ne sais quelle raison, impossible de revenir et en arrière et de les mettre dans le bon ordre. Heureusement, un monsieur fort compétent à la hotline téléphonique a fait faire un reset par un technicien et tout est rentré dans l'ordre. A noter : j'avais aussi soumis mon problème à la hotline en ligne (par mail) et là réponse a été : "c'est juste un problème d'affichage dans le Manager". Trop merci. Si je n'avais pas raqué 1,5 Euros par téléphone, j'y serais encore... Antoine
  17. Il y a aussi une évolution au niveau des formats de DATE et TIMESTAMP. Voir cette page de la doc MySQL
  18. Ok, c'est un peu ce dont je me doutais. En l'occurence je n'ai pas spécialement de sous-domaines à créer dynamiquement, donc pas de BIND pour le moment. Je laisse nos amis de chez OVH prendre en main les DNS. J'ai refait les modifs il y a quelques heures en allant au plus simple : mondomaine.com est géré par ns.ovh.net / dns.ovh.net, j'ai changé le champ A pour pointer sur mon IP, j'ai viré le DNS secondaire au niveau du dédié. Le truc basique quoi... Réponse dans quelques heures... Antoine
  19. Bon alors quelque chose m'échappe dans la notion de DNS. Pour moi un DNS c'est une machine qui contient un annuaire faisant les liens entre adresse IP et NDD. Le primaire fait autorité et le secondaire est là en cas de problème. Lorsque je prends un NDD chez OVH il est référencé dans les DNS d'OVH et ensuite redistribué dans le monde entier (les fameux 24/48h d'attente). Il suffit donc de fixer dans les DNS d'OVH que mondomaine.com pointe sur l'IP de mon serveur dédié (champ A) et roule ma poule... Alors, pourquoi ma machine devrait être le DNS primaire ? Pour être optimal ? (l'accès ne se fait plus via les DNS d'OVH mais directement sur ma machine... on zappe un intermédiaire quoi). Antoine PS : merci pour le coup de main !
  20. Re-Salut, Tout d'abord je précise que je ne suis pas non plus complètement débutant... Mais jusqu'ici je bossais avec Suse/Yast et je n'ai pas eu à m'occuper des DNS. Mais comprenons nous bien... Je ne parle pas des DNS de mon serveur. Si je fais un lynx www.google.fr ça fonctionne très bien. La configuration native fournie par OVH en Debian est nickel de ce côté là. Mon problème vient du fait que j'ai acheté un nom de domaine chez OVH et que je veux le faire pointer sur l'IP de mon serveur dédié. C'est vrai que j'ai lu un peu rapidement et sans trop réfléchir les guides OVH. Dites moi si je me trompe : - j'ai acheté mondomaine.com. Il est donc référencé dans les DNS d'OVH, à savoir ns.ovh.net et dns.ovh.net - si dans le manager, section "Redirection & DNS" je vais dans "DNS Expert" et que je fixe le champ A sur l'IP de mon serveur pour mondomaine.com, ça devrait modifier les infos dans les DNS d'OVH. Et donc ça devrait fonctionner. - mais comme un gros naze je suis allé dans la section "Domaine" du manager et j'ai indiqué le nom de mon serveur comme DNS (en suivant le guide OVH). Résultat, c'est la merde. - Pour le moment je suis revenu en arrière, c'est à dire qu'au niveau du domaine j'ai dit que mondomaine.com est géré par ns.ovh.net et dns.ovh.net - j'ai laissé mes configs DNS expert avec le champ A sur l'IP du serveur. Donc, théoriquement, sous quelques heures ça devrait fonctionner... Vous confirmez ou bien j'ai zappé quelque chose ? Antoine
  21. Salut à tous, J'ai pris un dédié chez OVH ainsi qu'un nom de domaine. Comme je veux faire mon pro, j'ai choisi de prendre Debian en distribution. Aucun problème pour faire toutes mes installations Apache, MySQL, PHP et autres tools (finalement Debian c'est si compliqué que ça)... Mais en revanche j'ai un gros doute sur la gestion des DNS. Tout ce que je veux faire c'est mondomaine.com pointe sur l'IP de mon serveur dédié. Dans les guides OVH ils disent : Je suis perplexe car parce que j'ai rien sur le serveur de prévu pour gérer les DNS (autrement dit : ma machine n'est pas un serveur DNS avec UDP en 53 ouvert). D'autre part, en allant dans les configs DNS expert j'ai directement indiqué l'IP dans le champ A. Comme le guide parle ensuite OVHm, je me dis qu'il ne concerne que les machines pré-configurées... Pour ma part, j'aurais tendance à penser que les DNS devraient être NS.OVH.NET DNS.OVH.NET et que mes modifications sur les dns expert( IP par champ A) devrait suffire. Z'en pensez quoi ? Merciiiiii Antoine PS : dernières modifs faites il y a environ 12 heures. J'attends demain matin pour voir si tout est ok, mais j'ai un doute.
  22. Salut, D'un point de vue général je le trouve très bien. La structure est légère, les couleurs sont agréables, les rubriques sont bien évidences... Voilà pour la partie "compliments" Maintenant, les choses qui fâchent (à mon TRES humble avis) : - Menu à droite ? C'est un peu bizarre... - je suis pas fan de cette police. Mais je travaille en 1600x1200. Ptet qu'en 1024x768 (résolution la plus courante) elle passe mieux. - Les onglets en haut sont un peu trop sobres. - Les couleurs sont bien mais il y a un sentiment de "pas fini" (normal si c'est une phase de test ?) avec tout ce blanc partout et quelques zones colorées. Les contrastes sont brutaux. - Oups, on perd le menu principal dans les fiches "commune" et "communautés de commune" J'ai pas tout regardé en détail et c'est juste une première impression et quelques remarques "de base". Pour résumé je dirais seulement que c'est une très bonne base. Antoine PS : où as tu trouvé les diverses images qui apparaissent en haut de la barre de menu ?
  23. Nan, ça je connais... C'est pour bloquer la mise en cache systématiquement. J'y tiens pas forcément Mon problème c'est que je m'y perds un peu entre "Expires" et "Last-modified". Vais continuer à chercher... Antoine
  24. Salut à tous, J'ai récemment fait une grosse mise à jour de mon site, notamment en virant des effets de roll-over faits en CSS. Dans l'absolu, les CSS pour le roll-over c'est génial, mais malheureusement ça passe assez mal sous IE et il faut faire des manipulations directement au niveau de la config du serveur (Apache, dans mon cas). Précisément : mauvaise gestion de cache qui fait que IE recharge une des images à chaque fois. Enfin bref, j'ai viré les roll-over... Le problème c'est qu'avec cette mise à jour, j'ai des visiteurs qui me signalent un mauvais fonctionnement graphique : le bug IE semble "trainer" dans leur cache. Donc moi je voudrais pouvoir signaler au niveau des headers qu'il ne faut pas utiliser le cache pour toutes les précédentes visites antérieures à une certaine date. En clair : si tu as visité mon site avant le 5 mai (par exemple), je veux que ton navigateur remette son cache à jour avec la nouvelle version du site. J'ai commencé à lire les spécifications du W3C sur les headers (Cache-Control, Cache-Revalidation, etc.) mais j'ai pas le courage de tout me taper. Si une bonne âme qui est déjà passée par là pouvait me faire un récap' ça serait cool... Merciiiiiiiiii Antoine
  25. J'ai développé une technologie qui correspond à votre attente. Message en MP.
×
×
  • Créer...