xpatval Posté 21 Juin 2006 Partager Posté 21 Juin 2006 'Soir, La course automobile étant ce qu'elle est (wouuaarff, ch'uis philosophe à mes heures...), on voit maintenant des bolides avec numéros spéciaux (marketing oblige...), ce qui me mets dans la panade. Lorsque cela va de 1 à 9999...999, pas de problème. Mais lorsque ce numéro est 007, et qu'il existe une autre voiture portant le numéro 7, je me retrouve "fait", car pas prévu dans mes programmes. Du coup, (je sais qu'un post abordant la problématique est récemment passé (où qu'il est le post ??)), comment puis-je faire pour conserver le 007, sachant que le champ est en INT de 3, non null ? Merci de votre aide, xpatval Lien vers le commentaire Partager sur d’autres sites More sharing options...
TheRec Posté 21 Juin 2006 Partager Posté 21 Juin 2006 Bonsoir, À ma connaissance, aucun type numérique ne peut garder les 0 non-significatifs avec MySQL... Le sujet que tu mentionnes existe bien, mais il traitait de l'affichage d'un nombre avec des 0 non-significatifs, et non du stockage de celui-ci ! Pour gérer l'affichage il y a plusieurs fonctions (number_format, spintf, ...). Ce n'est pas ce que tu souhaites faire si jai bien compris. Je pense que tu n'as qu'une seule solution, c'est de faire de ton champ "INT" un champ "VARCHAR"...ainsi tu enregistres les "nombre" tels qu'ils sont, surtout ne convertis pas en entier en PHP ce que l'utilisateur te fournit (tu perdrais les 0 non-significatifs également)... Bref ce champ sera une chaîne de caractères. Cela est aussi logique car si tu viens à avoir une lettre ou simplement différents nombres de zéros non-significatifs, tu seras de toute façon embêté si ce champ n'est pas une chaîne de caractères. Si tu as un problème pour trier tes résultats (l'ordre alphabétique n'est pas toujours correcte lorsqu'il s'agit de trier les chaînes de caractères contenant des chiffres uniquement : 2 et 20 se suivent même si tu as 3 dans ta table) tu peux récupérer l'entier de tes données et les trier avec PHP grâce à la fonction natsort par exemple. Ce n'est pas très efficace, mais c'est un cas limite... je ne vois vraiment pas d'autre solution pour l'instant. Lien vers le commentaire Partager sur d’autres sites More sharing options...
slender Posté 22 Juin 2006 Partager Posté 22 Juin 2006 Tu peux peut-être créer deux champs parallèles, un en VARCHAR l'autre en INT, le premier pour l'affichage, le second pour les tris. Lien vers le commentaire Partager sur d’autres sites More sharing options...
georges Posté 22 Juin 2006 Partager Posté 22 Juin 2006 Et poutant il existe l'attribut "ZEROFILL", non ?? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Jeromnimo Posté 22 Juin 2006 Partager Posté 22 Juin 2006 Il me semble que l'attribut ZEROFILL permet l'inverse, c'est à dire formater les resultats dans une requete (exemple si tu as 1 2 3 4 5 6 d'enregistrés, avec un ZEROFILL sur une taille de 2, tu vas obtenir 01 02 03 04 05 06...), ce qui n'est pas vraiment ce qu'il cherche. La solution avce les VARCHAR est la plus simple je pense... Lien vers le commentaire Partager sur d’autres sites More sharing options...
xpatval Posté 22 Juin 2006 Auteur Partager Posté 22 Juin 2006 En tout cas, merci de vos réponses. Je me rabats sur la solution 'varchar', on verra bien si ça merdoie dans certains scripts... Je serai paré pour des numéros de voitures futurs, avec une racine carré, une puissance, un mix lettres-chiffres ! Merci à vous, xpatval Lien vers le commentaire Partager sur d’autres sites More sharing options...
xpatval Posté 22 Juin 2006 Auteur Partager Posté 22 Juin 2006 Et bien ce fut rapide !! Me revoilà avec mes 000...et mon problème d'affichage. J'ai modifié mon champ d'INT 3 en VARCHAR, pas de souci, le numéro avec les 0 (007) s'effectue bien. Je bute (mes yeux, mon neurone, E.T. ?) malgré tout sur ce bout de script: while (list($libelle,$type,$num_voit,$groupe,$class_dep,$class_arr,$nb_t,$km,$nom,$prenom) = $db->get_row()) { echo "num_voit_first...........= ". $num_voit ."<br>"; [color="#FF0000"]<== j'ai bien mon "007"[/color] $nom = stripslashes($nom); $Found=0; for($i=0;$i<count($tNumVoit);$i++) { if ($tNumVoit[$i]==$num_voit) { $tEquipage[$i].="/". E_pilot($nom ."?". $prenom); $Found=1; break; } } if ($Found==0) { echo "num_voit...........= ". $num_voit ."<br>"; [color="#CC0000"]<== je n'ai plus mon "007"[/color] $tLib[] = L_marque($libelle) ." ". $type; $tMod[] = $groupe ; $tNumVoit[] = $num_voit; $tC_dep[] = $class_dep; $tN_tour[]= $nb_t; $tKm[] = $km; if ($class_arr == 99) $tC_arr[] = "NC"; else $tC_arr[] = $class_arr; $tEquipage[] = E_pilot($nom ."?". $prenom); } } Le principe de cette partie est de regrouper l'équipage de la voiture sur une ligne (il y a 3 pilotes) dans un tableau. La condition première dans la boucle "for" n'est bien entendu pas respectée au premier passage, puisque $tNumVoit[$i] est null. Donc, le process passe à la condition "if ($Fopund == 0). Or, à ce moment, ma valeur "007" ($num_voit) a disparu ! Au sortir de ma requête, pourtant, $num_voit affiche bien "007"... Pourquoi ?? J'en ai marre. Veux aller me coucher ! xpatval Lien vers le commentaire Partager sur d’autres sites More sharing options...
xpatval Posté 22 Juin 2006 Auteur Partager Posté 22 Juin 2006 Bon, ben ça ne s'arrange pas. Le pourquoi du problème ci-dessus réside dans l'affectation de la valeur dans le tableau $tNumVoit[$i]. Suite au prochain épisode... xpatval Lien vers le commentaire Partager sur d’autres sites More sharing options...
MS-DOS_1991 Posté 22 Juin 2006 Partager Posté 22 Juin 2006 Salut Juste un petit post pour te donner un petit conseil d'optimisation PHP : while (list($libelle,$type,$num_voit,$groupe,$class_dep,$class_arr,$nb_t,$km,$nom,$prenom) = $db->get_row()) est moins rapide que $current_car = 0;while ($current_car < $db->num_rows){ $car = $db->get_row(); // Tes opérations ici // print_r ($car); // echo $car['num_voit']; // etc $current_car++;} Lien vers le commentaire Partager sur d’autres sites More sharing options...
xpatval Posté 22 Juin 2006 Auteur Partager Posté 22 Juin 2006 Salut Juste un petit post pour te donner un petit conseil d'optimisation PHP : ... C'est certain ! Mais pour l'instant, je n'ai pas le temps de réécrire le tout. Merci quand même. xpatval Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant