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. Quelle erreur... la ligne ne m'intéresse que si je sais quelle erreur elle produit... à mon avis $totalnumrows n'est pas calculé comme il faut (il doit être égal à 0 donc), c'est ce qui fait que la gestion de la pagination (liste des pages et liens suivant précédents) ne fonctionne pas. Mais l'erreur générée au complet est m'intéresse et si tu peux également placer la ligne suivante juste après la requête pour le calcul de $totalnumrows on saura si la requête à produit une erreur : echo 'Erreur '.mysql_errno().' : '.mysql_error(); S'il y a une erreur qui apparaît merci de me la communiquer, en entier
  2. Bonjour, Tout d'abord je ne te conseillerais pas d'utiliser ce script pour deux raisons, il semble avoir été écrit avec les coudes (pas très bien) et il utilise les variables super-globales auto-déclarées. Si toutefois tu ne peux pas faire autrement, le principe de la pagination est simple, tu appliques une limite et un offset (une position) à ta requête SQL en fonction d'un paramètre passé dans l'URL (un paramètre GET). Mais avant, pour créer le système de navigation pour passer d'une page à l'autre, ou atteindre directement une page il faut connaître le nombre de pages et pour ceci tu dois connaître le nombre d'enregistrement de ta requête lorsqu'elle n'est pas limité (sans la clause LIMIT, mais avec les autres clauses WHERE, etc.). Tu peux simplement effectuer une requête avec COUNT (toujours en reprenant le même exemple dans ton programme) : $totalnumrows = mysql_result(mysql_query("SELECT COUNT(*) FROM $table WHERE cat='$cat' ORDER BY 'version'"),0); $numpages = ceil($totalnumrows / $perpage); Disons que ton paramètre s'appelle "page" et que tu souhaites avoir 10 enregistrements par page. Au début de ton script tu vérifie si "page" est défini : $perpage = 10; // Nombre d'enregistrement par page if(isset($_GET['page']) && is_numeric($_GET['page']) && $_GET['page'] > 0 && $_GET['page'] <= $numpages) { $page = intval($_GET['page']); } else { $page = 1; } $offset = ($page - 1) * $perpage; // On calcule la position du premier élément à afficher $limitclause = ' LIMIT '.$offset.', '.$limit; // Cela sera utilisé pour limiter les requêtes afin d'effectuer la pagination Ensuite à toi de limiter les requêtes utilisées pour récupérer les enregistrements à afficher grâce à cette variable $limitclause. Par exemple, en reprennant une ligne de ton programme: $query = "select * from $table where cat='$cat' order by 'version'".$limitclause; Maintenant seuls 10 enregistrements seront affichés. Tu peux éventuellement effectuer une vérification supplémentaire pour $offset, il serait bon que cette variable ne soit pas plus grande que le nombre d'enregistrement total pour la requête, autrement ta requête ne retournera aucun enregistrement Comme tu connais le nombre de pages tu peux créer ta liste de page ainsi que les boutons suivant et précédent : if ($numpages > 1) { // Affichage de la navigation par page lorsqu'il y a plus d'une page echo '<ul>'; $previous = $page - 1; $next = $page + 1; // Lien précédent if ($page != 1) { echo '<li><a href="?page='.$previous.'">Précédent ></a></li>'; } // Liste des pages for($i=1; i<=$numpages; $i++) { if($page != $i) { echo '<li><a href="?page='.$i.'">'.$i.'</a></li>'; } else { echo '<li class="active">'.$i.'</li>'; } } // Lien suivant if ($page != $numpages) { echo '<li><a href="?page='.$next.'">Suivant ></a></li>'; } echo '</ul>'; } Et voilà ça devrait faire l'affaire. Bonne continuation.
  3. Bonsoir, Pour ta première question, il suffit de placer ton mysql_close à la fin de ton fichier. Au lieu de le placer juste après avoir ouvert la connexion... ensuite plus besoin d'ouvrir de connexion à chaque fois que tu veux faire une requête. Simple question de logique, une connexion fermée ne pourra être utilisée que ce soit dans une fonction ou même juste après, donc ferme la une fois que tu sais que tu ne vas plus l'utiliser. Ensuite, comme je te l'ai déjà dit, indenter ton code te permettra une lecture plus facile, enfin pour toi tu fais comme tu veux, mais si tu souhaites le présenter à d'autres pense à leur santé mentale Puis, si tu lis la page du manuel PHP au sujet de readdir tu t'apercevras que la manière que tu utilises pour parcourir un dossier est est décrite comme "mauvaise". Utilise l'autre et cela fonctionnera dans tous les cas de figure. De plus lorsque tu vérifies si $fichier est un répertoire tu ne joint pas le reste du chemin, donc au delà d'un répertoire le chemin relatif n'est plus vérifié... si tu changes cette vérification ainsi cela fonctionnera : [...] $cheminfichier = $repertoire.'/'.$fichier; if(is_dir($cheminfichier) && $fichier !="." && $fichier != ".."){ indexer($cheminfichier); [...] Enfin, un conseil supplémentaire, pour supprimer plus rapidement toutes les entrées d'une table utilise plutôt : TRUNCATE TABLE recherche Au lieu de DELETE, car les performances de TRUNCATE sont meilleures... à moins que tu aies besoin de conserver les transactions (par exemple avec le type de table InnoDB), dans ce cas DELETE est la seule option. Bonne continuation.
  4. Ton adaptation est correcte, note que tu n'est pas obligé d'utiliser d'alias (<expr> AS <alias>) dans ce cas. Donc tu peux même la simplifier en : $classement = "SELECT COUNT(DISTINCT(note))+1 AS rang FROM membre WHERE note > $notee"; À priori cela ne change pas grand chose, mais c'est toujours une variable de moins à stocker pour MySQL lorsqu'il exécute ta requête. Et de rien, ce fut aussi l'occasion d'apprendre des choses pour moi donc tout le monde y gagne
  5. En fait, après réflexion la requête que je vous ai donné ne donne pas les résultats escomptés. En revanche je n'ai jamais utilisé ">=" dans mes requêtes donc je ne sais pas d'où tu sors ceci sparh, d'ailleurs mes requêtes ne retournaient qu'un seul résultat à chaque fois (pour une notre -> un rang), mais passons vu que de toute façon ma requête était erronée. Bref, après réflexion voici une requête qui marche et qui cette fois donne le classement au complet avec pour chaque enregistrement son rang : SELECT *, (SELECT COUNT(DISTINCT(a.note))+1 AS rang FROM ta_table AS a WHERE a.note < b.note) AS rang FROM ta_table AS b Il faut encore préciser une chose, ce classement fonctionne lorsque le champ "note" est un entier, simplement parce que le classement d'entiers ou de chaînes de caractères diffère. Donc lorsque tu fait "point >= '$point'" tu sembles vouloir comparer deux chaînes et non deux entiers. Car pour des chaînes de caractères "24", par exemple, est plus petit que (<) la chaîne "3" (à moins d'utiliser un tri dit "par ordre naturel" qui corrige justement ce comportement). Dans la requête qui nous préoccupe cela a tout son importance Pour obtenir uniquement le rang d'une note il suffit de ne conserver que la sous-requête et à la place de b.note placer la valeur de la notre à comparer. Mes excuses pour la fausse requête que je vous avais donnée, je ne l'ai pas assez testée assez avant de la poster
  6. Bonjour, Es-tu sûr que mettre GeSHi entre simple quotes (') lorsque tu l'utilises avec instanceof est correcte ? Le manuel ne décrit pas cette syntaxe ainsi en tout cas, il suffit de mettre le nom de la classe (étant donné qu'elle doit respecter les règle s'appliquant aux variables cela paraît logique). :/
  7. Pourquoi un "guignol" ? J'espère que nos réponses ne te font pas ressentir ceci, en tout cas pour ma part ce n'est pas mon intention. J'essayais juste d'être le plus complet possible. Bonne continuation P.S. : Selon moi l'adage commençant par "Il n'y a pas de question bête" est toujours vrai... et quand bien même il y en aurait, elles ne récolteraient pas beaucoup de réponses
  8. Bonsoir, Eh bien, rares sont ceux qui se donnent autant de peine dans leur présentation, chapeau Bienvenue sur le Hub ! J'espère que comme tu l'as laissé entendre tu trouveras des moyens de prospérer financièrement sur le Web, en tout cas tu trouveras certainement des réponses à tes questions sur le Hub (pour peu qu'elles rentrent dans le cadre des règles du forum). P.S. : Il manque encore ton numéro de carte de crédit et après on saura VRAIMENT tout sur toi P.S.S. : C'est une blague
  9. Effectivement... et c'est "<=" et non juste "=" dans la requête SQL. Si tu utilise "=" tu va obtenir le nombre de personne avec la même note. Et comme l'a dit Nazario, mysql_fetch_array retourne un tableau (d'où "Array")... Si tu veux récupérer un seul champ dans une variable utiliser mysql_result. $classem = mysql_result($req,0); Le "0" étant pour indiquer à la fonction de retourner le premier champ.
  10. C'est un peu court comme description du problème qui te préoccupe, "je n'y arrive pas"... je veux bien t'aider mais dans plus de détails je ne vois pas comment le faire. Personnellement si j'exécute la requête suivante : SELECT DISTINCT COUNT(*) AS rang FROM ta_table WHERE note <= 24 "24" étant la note de "Jean" (je n'ai pas remis le ORDER BY car en fait il est inutile dans cette requête, c'est le reste d'une autre requête que j'avais testé, j'ai édité mon message précédent également dans ce sens), j'obtiens bien "3" comme résultat à cette requête.
  11. Pardon j'avais mal compris ta question. En fait en comptant le nombre distinct d'enregistrement tu peux connaître ce rang. Il y a deux façons de faire, soit tu considère que les personnes à égalité on le même rang, soit tu considères qu'ils ont un rang différent et tu leur attribue ce rang en fonction d'autres paramètres (par défaut le code suivant les classera en fonction de l'ordre dans lequel les enregistrements auront étés ajoutés si tu enlève le DISTINCT). Partons du principe que les gens à égalité on le même rang, c'est le cas le plus simple : SELECT DISTINCT COUNT(*) AS rang FROM ta_table WHERE note <= <note_utilisateur_ici> En espérant que cette fois j'aie bien compris ta demande
  12. Lorsque tu commence une ligne par "//" ou que tu entoure une partie de ton code entre "/*" et "*/" tu mets ce code en commentaire, c'est à dire qu'il n'est pas exécuté... Dans ton cas tu as mis la boucle en commentaire, et c'est justement la condition de ta boucle : while ($data = mysql_fetch_array($req)) { Qui traite la ressource MySQL (retournée par la ligne $result = mysql_query($query); un peu plus haut). En plus lors de ton appel à mysql_fetch_array tu utilises $req au lieu d'utiliser $result. Donc, enlève les commentaires sur cette boucle while et utilise le bon nom de variable et cela fonctionnera (pour peut que ta requête renvoie effectivement quelque chose ).
  13. Bonsoir, Sans donner le code PHP en question ni les erreurs éventuelles qu'il génère je doute que quelqu'un puisse te répondre. Si tu compte obtenir un cours sur l'accès à une base de données MySQL avec PHP personne ne te répondra, il existe tant de cours à ce sujet (les moteurs de recherche sont tes amis, un exemple de requête : cours MySQL PHP) , c'est la première étape avant de poser une question d'ordre aussi général. En d'autres termes, essaie de te documenter, écrit un peu de code et si tu as des problèmes avec un code en particulier tu auras tout loisir de poser des questions précises. En attendant, bonne chance et bonne lecture
  14. Bonsoir, À première vu je dirais que ton problème vient du fait que Internet Explorer (même la version 7.0) ne gère pas correctement la correction gamma proposée par PNG alors que Firefox le fait (tout comme Internet Explorer jusqu'à la version 6 ne gère pas la transparence alpha). Pour résoudre ce problème il existe, entre autre, une petit utilitaire dans lequel tu peux faire passer tes fichier .png pour le "réparer" afin qu'ils fonctionnent dans Internet Explorer. De mémoire et sauf erreur PngOptimizer le fait et même pour plusieurs fichiers à la fois (tout en réduisant la taille de fichiers également). N'oublie pas en suite d'utiliser la même couleur pour l'arrière-plan de ton div avec l'id header que celui du fond de ton logo. Bonne continuation.
  15. Bonsoir, Si tu veux que le plus "grand" soit en premier c'est l'ordre décroissant que tu souhaite utiliser, pas l'ordre croissant. Pour classer les résultats d'une requête tu dispose de la clause ORDER BY en l'occurrence cela donnerait : SELECT * FROM ta_table ORDER BY node DESC DESC sert à indiquer l'ordre décroissant et s'applique au champ qui le précède. Tu peux spécifier plus d'un champ (et un ordre différent pour chaque champ) et dans ce cas la position de ces champs indique leur priorité. Bonne continuation.
  16. Peut-être qu'avec les guillemets dans ta première requête cela marchera mieux... $nombre_erreurs = mysql_query("SELECT COUNT(*) AS nb_erreurs FROM erreurs WHERE fichier='$fichier' AND ligne='$ligne'"); D'où l'importance de choisir une syntaxe qui te convient pour toutes tes chaînes de caractères et de t'y tenir (à part quelques exceptions). Parce que là tu utilises par fois la concaténation (.), parfois l'interprétation à la volée des variables avec les double-quotes. Avoir des règles de programmation est une des bases pour obtenir un code lisible et réutilisable. Ensuite pour trouver où se produit une erreur dans un code lorsqu'aucun message d'erreur ne s'affiche il faut y aller pas à pas. PHP ne propose pas cette fonctionnalité de debug, mais tu peux l'émuler en affichant les requêtes après interprétation et les messages d'erreurs de MySQL (qui ne sont pas automatiquement affichés), en testant ta requête directement sur ton serveur MySQL, etc.
  17. Très bonne interview, comme quoi même un Admin y apprend des choses sur les coulisses du Hub, j'avais loupé l'épisode du Minou-Pichoun Merci à vous deux pour ce moment rafraîchissant, enfin... sûrement moins que la piscine
  18. Bonsoir, Tu ne peux pas simplement faire if($query > $date){ Car en l'occurrence $query est toujours une ressource MySQL tant que tu ne la traite pas avec une fonction comme, par exemple, mysql_result. Le code sera donc : $lasterrortime = mysql_result($query,0); if($lasterrortime > $date){ Sinon à vu d'oeil (sans avoir testé ton code, même modifié), il devrait faire ce que tu souhaites. **EDIT** Après relecture, ta requête SQL pour déterminer si l'erreur a déjà été reporté est également erronée, elle devrait plutôt être: $nombre_erreurs = mysql_query("SELECT COUNT(*) AS nb_erreurs FROM erreurs WHERE fichier=$fichier AND ligne=$ligne"); En effet, COUNT est une fonction, et la syntaxe SQL requiert les parenthèses et également qu'il n'y ait pas d'espace entre le nom de la fonction et ses paramètres.
  19. TheRec

    Variable et define()

    Oui effectivement je me suis mal exprimé, je supposais que Nairol voulais en fait qu'à chaque appel à la valeur de la constante la variable soit réévaluée et ce ne sera pas le cas dans le code actuel, la constante peut se baser sur une variable pour obtenir sa valeur mais une fois définie elle ne changera jamais durant toute l'exécution même si la variable de base change.
  20. TheRec

    Variable et define()

    Bonjour, Ce n'est pas possible parce que par définition, une constante doit avoir une valeur qui est définie (d'ou le "define") et qui reste la même tout le long de l'exécution du script. Ce que tu veux faire est possible si tu utilises une variable, l'inconvénient est que cette variable sera modifiables par d'autres parties du programme. Mais en toute logique, si tu veux que la valeur de ta constante change, c'est que tu veux une variable
  21. Bonjour, Je suppose que tu as un serveur dédié, car sinon tu vas avoir des difficultés à faire ce que tu souhaites. Tout d'abord il faut qu'au niveau des enregistrements DNS la résolution des sous-domaines mène effectivement vers ton serveur. C'est possible en ajoutant cette ligne (avec l'adresse IP correcte à la place de 123.123.123.123) dans ton fichier bind (monsite.com.hosts, se trouvant à priori sous /var/named/) : * IN A 123.123.123.123 Une fois cette ligne ajoutée, tu devras redémarrer bind avec la commande "/etc/init.d/named restart" Ensuite il faudra avoir le mod_vhost installé sous Apache (si ce n'est pas le cas tu devras recomplier Apache pour l'installer) afin de pouvoir créer un VirtualHost également avec un wildcard (*) menant vers le répertoire de ton choix, cela se passe dans le fichier httpd.conf de ton serveur Apache. À priori tu devrais déjà avoir un VirtualHost ou tu trouveras un ligne du genre : ServerAlias domain.com (OU www.domaine.com) Remplace-là par ServerAlias domaine.com *.domain.com Maintenant tous les sous-domaines (sauf ceux que tu as explicitement défini dans d'autres <VirtualHost>) pointent vers le même DocumentRoot que ton domaine Donc finalement tu gères ces sous-domaines avec ton fichier .htaccess : RewriteEngine On RewriteCond %{HTTP_HOST} !www.monsite.com$ [NC] RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).monsite.com [NC] RewriteRule (.*) %2/$1 [L] Cela prend en compte le fait que le sous-domaine "www" ne doit pas être récrit, et le fait que un sous-domaine du type www.sousdomaine.monsite.com doit aussi être récrit (comme le simple sousdomaine.monsite.com). C'est du travail et cela nécessite certaines connaissances et certains accès sur le serveur utilisé pour l'hébergement, ce n'est pas possible sur un hébergement mutualisé en général.
  22. Salut ! Jolie initiative Mais bon je compte pour du beurre ? À toutes fins utiles, je suis près de Lausanne, en Suisse.
  23. Bonjour, Satisfy ne peut prendre comme valeur que Any ou All. Les deux n'auraient pas de sens. De plus tu peux l'utiliser de concert avec <Limit> (et <LimitExcept>) uniquement depuis Apache 2.0.51 et suivantes donc si tu as une version antérieur cela ne fonctionnera tout simplement pas dans un <Limit>. Selon moi, en enlevant la ligne "Satisfy (any, all)" de ton .htaccess cela devrait fonctionner, vu que tu as "satisfy any" à la fin de ton <Limit>. Peut-être peux-tu nous préciser quel version de Apache tu as exactement
  24. Tu es libre d'en faire un, mais avec la tradition française tu va avoir de la peine à avoir un franc succès, enfin on ne sait pas, les temps changent. En Suisse par contre tu trouveras un large publique, la dénonciation est souvent même encouragée par l'État, mais elle est aussi punie sévèrement lorsqu'il le faut. Tant que cela ne vire pas à la délation ou à la calomnie pourquoi pas, cela dépend beaucoup de la vision qu'on a sur le monde et en particulier la société. Mais un site comme tu l'évoque devra se munir d'une bonne équipe d'avocats
  25. TheRec

    Afficher un COUNT

    De rien En l'occurrence ce n'est pas PHP, c'est MySQL qui retourne cette erreur, d'où l'usage de la fonction mysql_error pour en connaitre la teneur. PHP te donnait une erreur t'indiquant que la ressource retournée par mysql_query n'était pas exploitable avec mysql_result (ou d'autres fonction du même genre). P.S. : Au fait, sur le Hub, pour les BB Codes "courts" (moins de 10-15 lignes lignes) tu peux utiliser la balise CODE, pour les codes plus long la balise tu peux utiliser CODEBOX, j'ai édité des message dans ce sens P.S.S. : Idem pour petit-ourson concernant les BB Codes
×
×
  • Créer...