Aller au contenu

TheRec

Hubmaster
  • Compteur de contenus

    1 777
  • Inscrit(e) le

  • Dernière visite

Tout ce qui a été posté par TheRec

  1. Bonsoir, Si par plus simple tu veux dire plus court tu peux faire ainsi : echo mysql_result(mysql_query("SELECT nom FROM utilisateurs WHERE id='1'"),0,0); Le deuxième "0" (troisième paramètre) n'est pas nécessaire, il sert à définir le champ à retourner, mais comme tu n'en as qu'un et que c'est celui que tu veux retourner ce paramètre est facultatif... je le mets par pure habitude Sinon, non pour obtenir la valeur d'un champ pour un enregistrement donné, rien de plus efficace qu'une requête sur la table où se trouve l'information recherchée
  2. Le fait que ce soit du Perl n'est pas trop d'importance dans ce cas... C'était juste pour te montrer que dès l'instant out tu as les coordonnées géographiques des deux points le problème se règle en une ligne... Maintenant comme l'a dit nounours1956 si ce calcul et donc la récupération des coordonnées viennent à être ponctuelles il va de soit que sous-traiter cette tâche est la bonne option. Tu peux chercher également du côté de Map24 France, ils ont des solutions commerciales intéressantes.
  3. Bonjour, La distance kilométrique "à vol d'oiseau" ? Par la route ? Le chemin le plus court ? Le plus rapide ?... Si c'est la distance à vol d'oiseau qui t'intéresse, un calcul à l'aide des coordonnées géographiques (latitudes et longitudes de chaque point) te donnera la distance. Tu as un exemple de code (en Perl, et explications en anglais) et des valeurs a utiliser ici : Latitude and Longitude formula Pour trouver les valeurs des longitudes et latitude des points dont tu souhaites trouver la distance tu peux utiliser Maporama, chercher les adresses postales et tu trouveras les coordonnées sur la page de résultat.
  4. Bonjour, As-tu un fichier .htaccess à la racine de ton site ? Si oui, quel en est le contenu. Je crois savoir que Free.fr n'autorise pas la réécriture d'URL et d'autres directives dans les fichiers .htaccess et c'est peut-être ce qui est à l'origine de ton problème.
  5. Ok d'abord J'ai mal choisi mes mots, mea culpa
  6. Bonsoir, Il me semble que tu peux faire ce que tu souhaites en une seule requête avec MySQL (version 4.1 ou plus), grâce à la syntaxe "INSERT ... SELECT" : INSERT INTO seven_signs (char_obj_id, cabal, seal, red_stones, green_stones, blue_stones, ancient_adena_amount, contribution_score) SELECT characters.obj_Id, 'dawn', '1', '0', '0', '0', '0', '0' FROM characters Si tu veux limiter à quelques éléments selon un critère ou un nombre limite d'enregistrements, tu es libre d'ajouter respectivement une clause WHERE et/ou LIMIT à la sous-requête "SELECT" (après "FROM characters"). Bonne continuation.
  7. Bonsoir, Je n'ai pas de doctorat et encore moins de boule de cristal (ou de boussole ) Où as-tu rencontré cette erreur (URL, contexte, etc.), cette erreur est-elle persistante ou sporadique ? Si tu maîtrises l'anglais tu trouvera des explications détaillées sur les causes probables de cette erreur dans la RFC 2616. Désolé à ma connaissance cette RFC n'a pas encore été traduite complètement (officiellement ou officieusement).
  8. TheRec

    Une section Smarty

    Très juste. C'est ce que je disais, je ne connais et n'utilise pas Smarty
  9. Bonjour, Tout d'abord, merci pour ce tutorial Je suis d'accord avec captain_flame, j'ajouterai encore un point, l'utilisation de la méthode document.write n'est plus possible lorsqu'un document est servi aux visiteurs en tant que fichier de type MIME application/xml (ou text/xml), ce qui est à terme le but, avec par exemple XHTML. Donc dans ce cadre ton script ne fonctionnera pas, je précise qu'en servant les fichiers XHTML avec le type MIME application/xhtml+xml (ou pire, text/html) le script fonctionnera car le document héritera de la méthode qui est normalement destinée aux fichier HTML. Au niveau de l'évolutivité du système cela pose tout de même un sérieux problème. Au delà de ça, la bande passante est de moins en moins un problème (certains pays, dont le mien, prévoient même d'ajouter l'accès à Internet dit "haut débit" au service universel, c'est-à-dire faisant partie du raccordement de base assuré à chaque abonné) et je suis d'accord ce n'est pas une raison pour la "gaspiller", simplement l'économiser en exploitant temps du processeur pour ce faire ne me semble pas très respectueux des visiteurs (le choix se discuter, utiliser plus la bande passante ou le CPU, à mon avis il n'y a pas de préférence à l'un ou à l'autre de nos jours). Surtout quand l'économie reste minime somme toutes.
  10. Pour citer le manuel PHP au sujet de la fonction imagettftext concernant le paramètre fontfile (qui est une chaîne de caractères) : Puis dans l'exemple en dessous : // Définission de la variable d'environnement pour GD putenv('GDFONTPATH=' . realpath('.')); // Nom de la police à utiliser (notez l'absence de l'extension .ttf) $font = 'SomeFont'; Bref, place ta police ou cela te sieds le mieux, du moment que le chemin est précisé (soit dans fontfile, soit par cette variable globale) et que tu as l'accès en lecture au fichier concerné. Le format TTF étant géré par GD tu n'auras pas de problème. Après pour obtenir le fichier TTF désiré à toi de voir la police qui te convient, généralement tu trouvera un fichier TTF correspondant dans le dossier "X:\<chemin d'accès au répertoire Windows>\Fonts"... Sinon il existe beaucoup de site qui référence quantité de polices diverses et variées et souvent même gratuite (pas forcément libre de droit pour une utilisation commercial), pour cela je te laisse utiliser ton moteur de recherche préféré.
  11. Les jointures internes ([iNNER] JOIN) ne récupèrent que les enregistrement ayant des correspondances dans les tables qui sont jointes. Dans ton cas les jointure sont toutes internes et donc seul les enregistrement ayant une correspondance dans chaque table présente dans ta requête seront retourné Je suppose que c'est le cas de l'enregistrement portant l'id "3" Pour faire ce que tu souhaites tu devras recourir à l'usage des jointures externes (OUTER JOIN) qui permettent d'obtenir également les éléments de table (celle venant indiquée dans la clause FROM) n'ayant pas de correspondance dans la ou les tables jointes. Plus précisément, tu vas être amené à utiliser LEFT OUTER JOIN dans ce cas.
  12. Mes excuses, j'ai oublié de te préciser qu'il fallait ajouter le contraintes à la jointure (en mettant plusieurs noms de table dans la requête cela a indiqué à MySQL que ces tables sont liées, sans contrainte MySQL fait un produit cartésien de toutes les table) à ta requête. Donc tu dois ajouter à ta condition actuelle toutes les clés qui lient ces tables : $query_DetailRS1 = "SELECT appartements.id, appartements.nom, appartements.ville, appartements.arrondissement, appartements.quartier, description.id_appart, description.superficie, description.equipement, images.thumb1, images.photo1, images.thumb2, images.photo2 FROM appartements, description, images, commentaires WHERE appartements.id = $recordID AND appartements.id = description.id_appart AND appartements.id = images.id_appart AND appartements.id = commentaires.id_appart ORDER BY nom ASC";
  13. As-tu pris la peine de lire les réponses à ton premier message ? Enfin... au risque de me répéter, dans le fichier fiche.php change la requête : $query_DetailRS1 = "SELECT * FROM appartements WHERE id = $recordID ORDER BY nom ASC"; En $query_DetailRS1 = "SELECT appartements.id, appartements.nom, appartements.ville, appartements.arrondissement, appartements.quartier, description.id_appart, description.superficie, description.equipement, images.thumb1, images.photo1, images.thumb2, images.photo2 FROM appartements, description, images, commentaires WHERE appartements.id = $recordID ORDER BY nom ASC"; Bien entendu pour que ces jointures soient optimisées il faut que toutes ces tables soient liée par des clé étrangères ayant un INDEX défini. Par rapport à ce que Dan à dit, les guillemets ne sont pas "nécessaires" si ton $recordID est bien un entier correspondant à un id (à toi de t'assurer au préalable que ces données ne soient pas dangereuses afin t'éviter les injections SQL).
  14. Bonsoir, Comme je te l'ai dit, c'est pour cela que tu devrais enregistrer les données telles que l'utilisateur les a saisies (sans <br />, mais avec les sauts de lignes) et seulement lorsque tu vas afficher tu utilises la fonction nl2br. Ou alors tu codes une fonction br2nl toi-même et tu l’appliques avant d'envoyer les données dans le <textarea> pour l'édition : function br2nl($text) { return preg_replace('/<br\\s*?\/??>/i', '', $text); } Source : Commentaires de nl2br Mais la première solution est selon moi la meilleure, imaginons que tu fasse un moteur de recherche par la suite, les données seront parasitées par ces balises <br/> ajoutée par la fonction nl2br.
  15. Bonjour, Ta requête devrait avoir une clause "FROM appartements, description, images, commentaires" avant la clause "WHERE", ainsi tu indiques à MySQL dans quelles tables doit aller récupérer les champs que tu as définis avant cette clause FROM. Ce qui m'étonne c'est qu'en l'état ton code devrait simplement afficher une erreur de syntaxe MySQL vu que cette requête n'est pas synataxiquement correcte...
  16. De rien. Concernant cet appel que dans présentes ton second message, il a plus de sens, il sert à passer des variables Javascript (côté client et apparemment ce sont des informations concernant le navigateur du visiteur) vers un script PHP (côté serveur), cela peut servir à plusieurs titres (pour des statistiques entre autres). Techniquement parlant, cet appel est correct (la fonction, l'appel, etc.). mais comme je te l'ai dit je ne ferai pas cela ainsi, j'utiliserai les possibilités offertes par DOM. Je te propose ceci, en étant conscient que le code tel quel remplace es éventuel autres actions liée à l'événement "window.onload" (à toi de voir si c'est un problème avec tes autres scripts) et que l'élément placé après l'endroit ou tu veux placer ton <script> doit avoir un "id" (en l'occurrence je l'ai "nommé" after) : <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Titre</title> <script type="text/javascript"> //<![CDATA[ window.onload = function () { var page = 'page' var resolution = 'resolution' var bdbrowser = 'bdbrowser' var bdplatform = 'bdplatform' var bdversion = 'bdversion' var bdmajorver = 'bdmajorver' var bdminorver = 'bdminorver' var phpscript = document.createElement('script'); phpscript.setAttribute('type', 'text/javascript'); phpscript.setAttribute('src', 'ecriture.php?parm1='+ page + '&parm2=' + resolution + '&parm3=' + bdbrowser + '&parm4=' + bdplatform + '&parm5=' + bdversion + '&parm6=' + bdmajorver + '&parm7=' + bdminorver); var nodeafterphp = document.getElementById('after'); nodeafterphp.parentNode.insertBefore(phpscript, nodeafterphp); }; //]]> </script> </head> <body> <p>Avant</p> <p id="after">Après</p> </body> </html> J'ai juste déclaré (avec une valeur "bidon") les variables que tu vas passer en paramètres à ton script PHP, c'est nécessaire vu qu'elles sont utilisées par la suite, à moins quelles aient été déclarées comme variables "globales" (déclarées dans un script Javascript inclus avant ce morceau de Javascript). Cette technique reste relativement peu fiable, le script PHP ne sera pas appelé si Javascript est désactivé dans le navigateur de ton visiteur. Donc tu ne devrais pas utiliser les informations récupérées pour autre chose que des statistiques, au risque de priver certains des visiteurs de certaines fonctionnalités de ton site.
  17. Bonsoir, J'ai un peu de peine à comprendre ce que tu veux faire de prime abord... si ton but est d'inclure le fichier "temps.php" dans le fichier "proto61.html" pourquoi n'utilises tu pas simplement la fonction include : <p>Avant</p> <?php include('temps.php'); ?> <p>Après</p> (Je ne cite qu'une partie du code, celle qui permet de situer où placer cette fonction, si le fichier HTML ne se trouve pas dans le même répertoire que le fichier PHP il faudra inclure le chemin dans la fonction include) Enfin, admettons que tu veuilles inclure le contenu généré par le fichier PHP grâce à du Javascript, je ne vois pas pourquoi tu utilise une balise script pour écrire une autre balises script faisant appel à la page PHP... il me semble que tu te complique la tâche... un simple : <p>Avant</p> <script type="text/javascript" src="temps.php"></script> <p>Après</p> Maintenant le contenu généré par le fichier "temps.php" devra être du Javascript, vu qu'avec cette balise "<script>" tu indiques au navigateur que tu veux qu'il utilise un interpréteur de scritps côté client (Javascript en l'occurrence)... donc en l'état tu auras une erreur Javascript. Si tu modifie ton fichier PHP en : <?php echo 'document.write("le temps")'; ?> Mais bon, premièrement d'une je ne vois pas le but dans l'exemple que tu cites donc si tu as plus de précision sur ce que tu veux faire n'hésite pas... et deuxièmement je ne suis pas partisan de l'utilisation de la balise <script> en dehors de l'en-tête HTML et je ne te conseille pas du tout d'utiliser la fonction document.write qui est obsolète de nos jours, tu devrais privilégier les fonctions mises à disposition avec le DOM (pour faire simple : accès, ajout, modifications, suppression, etc. de noeud). P.S. : Ce dernier parahraphe ne correspond qu'au pratiques que je cautionne... tu es libre de faire comme bon te sembles
  18. Bonjour, Je suppose que ton hébergeur voulait parler d'un service comme celui que propose WebCron. Il en existe peut-être d'autres, mais il n'y a que celui-là qui me vient à l'esprit maintenant. Tu peux créer une tâche planifiée qui s'exécutera à intervalles réguliers, comme par exemple une requête HTTP qui va appeler l'URL menant au script "update.php" (qui lui lorsqu'il est invoqué effectue les tâches que tu cites. Bonne continuation.
  19. Bonsoir, L'idéal est de sauvegarder les données telles que l'utilisateur les a entrées (en faisait les vérifications d'usage pour assurer que les données sont sûres) et lorsque tu les affiches par la suite d'utiliser la fonction nl2br pour convertir les newlines en balises <br />. Un autre conseil, lorsque tu présentes un problème, prend la peine de te relire (orthographe et grammaire) et de former plusieurs phrases au lieu d'une seule de 6 lignes, c'est beaucoup plus clair et cela facilite la lecture pour les personnes susceptibles de t'aider **EDIT** Grillé pour la fonction Mon second conseil reste valable
  20. TheRec

    INSERT ... SELECT

    Bonsoir, La syntaxe d'une sous requête est la même que celle d'une requête saut qu'elle est entourée d'une parenthèse ouvrante et une parenthèse fermante. En te basant sur ce postulat tu peux en déduire qu'il est possible d'ajouter des données "fixes" lors de la sélection, la syntaxe est la suivante pour la requête que tu souhaites faire : INSERT INTO objets (objets.idj, objets.idobj, objets.nom, objets.description, objets.effet, objets.cat, objets.prix) (SELECT '53', id, nom, description, effet, cat, prix FROM objets_liste WHERE id='1') P.S. : Tant que le nombre de champs sont les mêmes tu n'auras pas de problème.
  21. Le tri devra de toute façon être fait avec les deux solutions sur l'entier des entrées de la table, mais comme je te l'ai dit sans faire de benchmark je ne pourrais pas affirmer quune solution est plus rapide que lautre. Il te suffit de générer beaucoup d'enregistrements et tester les deux méthodes avec la fonction BENCHMARK (car il faut prendre en compte le fait que MySQL effectue un cache des résultats tables lorsque tu fais une requête) qui génère autant de requêtes successives que tu le souhaites... ainsi tu peux voir la charge que chacune des solution génère. Dans ton cas, comme je l'ai dit précédemment, je pense que ta solution sera plus efficace car tu as cette limite sur la boucle qui fait que le nombre de requêtes est contrôlé. Concernant les ressources d'apprentissage au sujet de SQL il y a de bon tutoriaux et cours sur SQLPro
  22. Bien sûr, voilà un exemple : <?php $limit = 5; $result = mysql_query('SELECT membre, titre, date_envoi FROM membres ORDER BY date_envoi DESC'); $members_done = array(); while(($member = mysql_fetch_array($result)) && count($members_done)+1 <= $limit) { // Dès qu'il n'y a plus de résultat ou que le nombre de titres affiché max est atteint la boucle s'arrêtera. if(!in_array($member['membre'],$members_done)) { // Le membre a-t-il déjà été affiché ? print_r($member); // Affichage du membre $members_done[] = $member['membre']; // Ajout du membre (id) au tableau de membre ayant déjà un titre affiché, vu qu'il vient d'être affiché. } } ?> En gros c'est ça, je n'ai même pas utilisé l'instruction break, en rajoutant la vérification de la limite à la boucle cela va aussi et c'est plus propre. Suivant la charge du serveur et la taille de la table entre autres ta solution sera plus efficace à mon avis, mais je n'ai pas fait de benchmarks.
  23. Oui... ou bien tu ne limites pas la requête qui est juste ordonnée par date et tu arrêtes ta boucle (instruction break) une fois que tu as affiché 5 enregistrement (pour 5 membres différents). La sélection des données est une des tâches les plus optimisée surtout sur les requêtes simples (pas de clause WHERE, etc.) et il en est de même pour le traitement de ressources (résultats de requêtes) "volumineuses", et côté PHP l'API je stock les données que lorsque on y fait appel, tu peux toujours évaluer cela en utilisant les fonctionnalités de benchmark de MySQL. Mais la solution dont tu parles fonctionne également, c'est juste que je ne suis pas fanatique des requêtes à l'intérieur des boucles, quoi que dans ton cas le nombre n'évolue que si tu modifie ta limite et donc elle a de fortes chances de se révéler plus performante.
  24. De rien... Comme d'habitude, ma réponse est rédigée en l'état de mes connaissances, je serais vraiment surpris et content qu'il y ait un moyen de faire ceci en une seule requête Ce qui épargnera le plus ton serveur de base de donnée ça serait de faire une simple requête classée par le champ date_envoi avec le langage interprété côté serveur que tu utilises (PHP je suppose) de ne pas afficher les enregistrements des membres pour lesquels un enregistrement a déjà été affiché (à chaque enregistrement affiché tu remplis un tableau avec l'id du membre et avant chaque affichage tu vérifies que l'id du membre ne soit pas déjà présent dans ce tableau, avec la fonction in_array). Au fait moi c'est TheRec... sa_rc
  25. Bonjour, Je pense avoir compris ce qu'il veut, pour résumer, il veut les x derniers enregistrements (en fonction de date_envoi) et qu'il n'y ait qu'un seul enregistrement par membre. Premier point, qui a été évoqué précédemment, lorsqu'une clause GROUP BY est utilisée la requête ne renvoie des valeurs significatives uniquement pour les champs sur lesquels on applique une fonction d'agrégation. Pour les champs auxquels on n'applique pas de fonction d'agrégation, ils n'auront une valeur significative que si ils sont uniques DANS le groupe. Source: Manuel MySQL - GROUP BY avec les champs cachés Cela implique que la clause ORDER BY ne peut pas se baser sur ces champs cachés efficacement, vu que leur valeur n'est présente qu'une fois le groupement effectué. Concernant DISTINCT (proposé par Portekoi), le problème est fondamentalement le même, les champs sont "filtrés" avant d'être "ordonnés" et donc tu n'obtiendra pas le résultat souhaité (dans le cas de sa requête tu obtiendra même tous les enregistrements de ta table à moins qu'il y ait un couple "membre/titre" qui se répète... la clause DISTINC ne se fait pas sur un champs, mais sur tous). Tout cela pour te dire que ce que tu souhaites faire ne peut pas se réaliser en une seule requête à ma connaissance. Apparemment, vu ton premier message, tu sais comment le faire autrement donc je ne vais pas t'expliquer quelles sont les autres solutions
×
×
  • Créer...