william_dallas Posté 30 Juillet 2009 Posté 30 Juillet 2009 Bonjour à tous, J'ai un problème d'incrementation php lors du traitement d'un formulaire, voici la fonction concernée : if(isset($_POST['envoi'])) { $sqlMax = "SELECT MAX(num_commande) FROM `matable` WHERE num_commande LIKE 'LEB01%' LIMIT 1"; $reqMax = mysql_query($sqlMax); $maxNumCommande = 'LEB01000'; if($reqMax && mysql_num_rows($reqMax)>0) $maxNumCommande = 'LEB01'.sprintf("%04s",(mysql_result($reqMax,0,'num_commande')+1)); $num_commande = $maxNumCommande; Après j'enregistre $num_commande, qui est bien inséré dans la base mais à chaque enregistrement j'ai le même numéro. Qu'est-ce qui ne va pas dans ma fonction? Merci pr votre aide!
jcaron Posté 30 Juillet 2009 Posté 30 Juillet 2009 Plein de choses bizarres dans tout ça... 1. SELECT MAX(...) FROM ... LIMIT 1 c'est un peu redondant. Soit tu enlèves le LIMIT soit tu fais un SELECT num_commande ... ORDER BY num_commande DESC LIMIT 1. 2. tu essaies d'ajouter 1 à une chaîne. Ca donne évidemment un résultat bizarre, la chaîne est considérée comme valant 0, donc le résultat est toujours 1. Il faut que tu rajoutes un petit substr là-dedans 3. sprintf("%04s",nombre) c'est pas très net. Tu veux probablement dire sprintf("%04d",nombre). Et tu dois bien avoir 4 chiffres pour cette partie-là? La valeur "par défaut" que tu as juste avant n'en utilise que 3... Jacques.
william_dallas Posté 30 Juillet 2009 Auteur Posté 30 Juillet 2009 Ok merci, j'arrive pas à régler tous les problèmes, tu pourrais m'écrire la fonction tel que tu l'aurais fait toi, stp?
jcaron Posté 30 Juillet 2009 Posté 30 Juillet 2009 C'est en essayant qu'on apprend :-) Mais bon... Solution pure SQL: SELECT CONCAT('LEB01',LPAD(SUBSTR(MAX(num_commande),6)+1,4,'0')) FROM matable WHERE num_commande LIKE 'LEB01%' Jacques.
william_dallas Posté 30 Juillet 2009 Auteur Posté 30 Juillet 2009 (modifié) Ca ne marche pas, ca me retourne tout le temps 1. :-( J'ai cherché mais pour ca je bloque, au début je fasais $num_commande = mysql_insert_id(); Et après pour l'envoi de mail je prenais le dernier enregistrement avec l'id mais en cas d'utilisations simultanées, ca aurait envoyé le mauvais mail à la mauvaise personne. C'est pour ca que pour chaque enregistrement je dois avoir un numéro unique que je peux récupérer par la suite pour utiliser dans la requête sql avec un WHERE num_commande = $num_commande; Modifié 30 Juillet 2009 par william_dallas
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant