[Résolu]Génération aléatoire puis insertion

Génération aléatoire puis insertion [Résolu] - PHP - Programmation

Marsh Posté le 13-10-2005 à 10:32:19    

Bonjour,
 
J'ai un script qui génére un nombre aléatoire compris entre 0 et 1000000000. Le script fonctionne super bien. J'ai un formulaire avec 2 champs. L'un que l'on rempli manuellement et l'autre qui prend ce chiffre aléatoire.  
Ensuite j'insère ces chiffres dans ma table. Tout ceci fonctionne sans problème. Mais maintenant j'ai un prob. J'aimerais qu'une fois qu'un nombre aléatoire a été rentré on ne puisse plus le rerentrer...  
Je pense donc mettre un while avec un if avant mon insertion.
Voici ce à quoi j'ai pensé:

Code :
  1. if ($_POST['ajouter'] == "Ajouter" )
  2. {
  3. if ((!empty($troucont)) && (!empty($troucode)))
  4. {
  5. While($troudata = mysql_fetch_assoc($sql_results))
  6. {
  7. if ($troudata['troucode']!=$nb)
  8. {
  9. $sql = "INSERT INTO `trousseau` (`troucontnum`, `troucode`) VALUES ('$troucont', '$troucode')";
  10. mysql_query($sql) or die (mysql_error());
  11. echo "<div align='center'>";
  12. echo "Les infos du trousseau ont bien &eacute;t&eacute; sauvegard&eacute;es!";
  13. echo "</div>";
  14. mysql_close();
  15. }
  16. }
  17. }
  18. }


Bonne approche ou pas??? Si vous avez besoin de tous le code dite le moi...


Message édité par limp15000 le 14-10-2005 à 09:42:19
Reply

Marsh Posté le 13-10-2005 à 10:32:19   

Reply

Marsh Posté le 13-10-2005 à 10:39:36    

Une requête simple :

Code :
  1. $query = mysql_query("SELECT `champ` WHERE `champ` = '".$_POST["le_nbe"]."';" );
  2. if ( !mysql_num_rows($query) > 0 ) {
  3.   // On fait l'ajout
  4. }


Message édité par dwogsi le 13-10-2005 à 10:40:13

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 13-10-2005 à 10:43:59    

oui, ou un index unique sur `champ`
et un insert avec un même nb existant te fera une erreur de `duplicate key`

Reply

Marsh Posté le 13-10-2005 à 10:44:26    

Citation :

oui, ou un index unique sur `champ`
et un insert avec un même nb existant te fera une erreur de `duplicate key`


Je pensais avoir mis unique en créant ma table, mais je m'étais trompé, je l'ai rajouté et maintenant c'est bon il me met bien:
 Duplicate entry '551640312' for key 2  
Merci beaucoup!


Message édité par limp15000 le 13-10-2005 à 10:47:57
Reply

Marsh Posté le 13-10-2005 à 10:46:17    

bah non ...
avec la requête de dwogsi, tu vérifies si la clé existe déjà
avec l'index le serv. SQL te dira que tu ne peux insérer cette clé ...
edit: typo


Message édité par shakpana le 13-10-2005 à 10:48:21
Reply

Marsh Posté le 13-10-2005 à 10:47:46    

Plus fort encore :
 
Tu fais en sorte que la DB n'accepte pas de doublons (unique index). Tu fais d'office l'ajout et tu testes le code de retour. Si tu as violé la contrainte de duplicate, tu essayes avec un autre nombre. [:dawa]
 
Très dirty mais un seul accès DB au lieu de 2.
 
Maintenant, vu ton range, le risque de collision est assez minime a priori. Ta méthode n'est certainement pas à généraliser si le range venait à se remplir !
 
Sans doute la méthode de dwogsi est-elle plus simple si la question des perfs ne se pose pas. Sauf que j'aurais fait if (n = 0) plutôt que if (! n > 0), mais bon, hein.
 
[:pingouino]
 
 
EDIT: Partiellement grilled.

Message cité 1 fois
Message édité par sircam le 13-10-2005 à 10:48:24

---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 13-10-2005 à 11:17:06    

sircam a écrit :

Sauf que j'aurais fait if (n = 0) plutôt que if (! n > 0), mais bon


Bah en fait j'avais pas mis de négation dans ma condition à la base, mais j'ai du éditer parcequ'en fait ce que j'avais écrit ne correspondait pas vraiment à la question. Alors plutot que de réécrire le code j'ais mis une négation... De la grosse flemme pour résumer!


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 13-10-2005 à 11:35:53    

Wé, c'est de toute façon, c'est de la micro-optimisation sans intérêt pratique.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 13-10-2005 à 11:40:37    

Si! D'un point de vu relecture ca peut aider!


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 13-10-2005 à 11:54:07    

Wé cé vré mé komensé a changé du kode eksiten sa vaupala penne pou rsipeu. [:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 13-10-2005 à 11:54:07   

Reply

Marsh Posté le 13-10-2005 à 12:01:21    

ba tu c d foa sa pe édé


Message édité par dwogsi le 13-10-2005 à 12:01:35

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 13-10-2005 à 12:03:39    

lol tenke tu mé dé kom enter dan le kod sé ok lol


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 13-10-2005 à 12:27:37    

ué c vré mé je préfér qan mém corrigé se genr derere kom sa c + kler pr mua é lé otr perso ki seré amené a lir mon cde!
 
(C'est quand même assez diffile d'écrire comme ca, vraiment je ne les comprend pas!)


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 13-10-2005 à 12:30:15    

a wé lol ta rézon lol si sé fa sil kan tu sé pa écrir normal lol !


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 13-10-2005 à 13:13:29    

ué mé g jamé apri kom sa alor ba c dur kan mém
 
mém kan je reli ce ke j'vien d'ecrir d fua g du mal a savuar ce ke je voulé dir
 
du cou d fua kan yan a ki ecri kom ca on c mm pa ce kil voulé dir é du cou il par en disen ke l'abiense et pouri, ba kil parte
 
alé jaréte la ca dvi1 tro dur pr mua 7 fason décrir


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 13-10-2005 à 13:36:46    

Vous avez craqué les gars???

Message cité 1 fois
Message édité par limp15000 le 13-10-2005 à 13:37:14
Reply

Marsh Posté le 13-10-2005 à 13:41:15    

lol j u bezwin 2 30s pour lir ton mesaj é en ariven o bou ja v oubliyé le débu lol j con pren pa ceu ki pouri l'anbiens ki di ke jékri mal lol sé pa sa ké inportan sé mon pb lol lol lol
 
:hello:


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 13-10-2005 à 13:43:17    

limp15000 a écrit :

Vous avez craqué les gars???


 
ué tro a donf 2 la bal ki tu


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 13-10-2005 à 13:51:06    

Sa bute tro sa mer lol


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 13-10-2005 à 17:15:50    

Bon, je reviens avec une nouvelle question, maintenant que l'insertion fonctionne bien, j'ai fait un formulaire qui permet de rechercher le numéro de contrat et d'afficher le numéro de clé correspondant. Ca de nouveau ça marche sans autre.
J'ai ensuite fait une page qui me permet de regénérer un nouveau code de clé... La génération et la mise à jour avec le update marche bien parcontre j'arrive pas à incrémenter la variable qui me permet de voir combien de changement il y a eu!
L'echo me donne 1 alors que ça devrait être 0, enfin je capte pas...

Code :
  1. include('lib/erreur.lib.php');
  2. include('lib/connection.lib.php');
  3. if ($_POST['Modifier'] == "Modifier" )
  4. {
  5. $rqtsRechTrousseau = "SELECT * FROM trousseau WHERE troucontnum ='$contnum'";
  6. $rep2RechTrousseau = mysql_query($rqtsRechTrousseau) or die ($errCli);
  7. $trousdata = mysql_fetch_assoc($rep2RechTrousseau);
  8. $trouperdu = $trousdata['trouperdunb'];
  9. $trouperdus = $trouperdu++;
  10. $nouvcode= $_POST['troucodegenere'];
  11. $contratnum= $_POST['contnumgenere'];
  12. $sql = "UPDATE `trousseau` SET `troucode`='$nouvcode',`trouperdunb`='$trouperdus' WHERE `troucontnum`='$contratnum'";
  13. mysql_query($sql) or die (mysql_error());
  14. echo "<div align='center'>";
  15. echo "Le code du trousseau a bien &eacute;t&eacute; modifi&eacute;!";
  16. echo $trouperdu;
  17. echo "</div>";
  18. mysql_close();

Reply

Marsh Posté le 13-10-2005 à 17:57:41    

ça je le comprends pas bien
# $trouperdu = $trousdata['trouperdunb'];
# $trouperdus = $trouperdu++
affecter une valeur à une variable, incrémenter cette dernière, affecter cette dernière à une autre ...
[:pingouino]
 
et toi tu n'as pas bien lu le chapitre sur l'incrémentation ...
> $trouperdus = $trouperdu++;
pas pareil que
> $trouperdus = ++$trouperdu;
 
alors du coup spa très clair tout ça ... pas évident de comprendre ton fonctionnement
tu veux modifier un enregistrement, incrémenter de 1 le champs qui stocke le nb de changements ?
pourquoi pas faire les choses en une fois
UPDATE truc SET champs1 = new, compteur = compteur + 1 WHERE champs1 = old

Reply

Marsh Posté le 13-10-2005 à 18:30:29    

J'aimerias que $trousdata['trouperdunb'];  s'incrémente de 1...
C'est tout, j'ai peut être chercher à faire trop compliquer.

Reply

Marsh Posté le 13-10-2005 à 19:37:03    

$trousdata['trouperdunb']++;

Reply

Marsh Posté le 14-10-2005 à 09:27:00    

ENFIN Réussi!

Code :
  1. if ($_POST['Modifier'] == "Modifier" )
  2. {
  3. $rqtsRechTrousseau = "SELECT * FROM trousseau WHERE troucontnum ='$contratnum'";
  4. $rep2RechTrousseau = mysql_query($rqtsRechTrousseau) or die ($errCli);
  5. $trousdata = mysql_fetch_assoc($rep2RechTrousseau);
  6. $trouperdu = $_POST['fucking']+=1;
  7. $nouvcode= $_POST['troucodegenere'];
  8. $contratnum= $_POST['contnumgenere'];
  9. $sql = "UPDATE `trousseau` SET `troucode`='$nouvcode',`trouperdunb`='$trouperdu' WHERE `troucontnum`='$contratnum'";
  10. mysql_query($sql) or die (mysql_error());
  11. echo "<div align='center'>";
  12. echo "Le code du trousseau a bien &eacute;t&eacute; modifi&eacute;!";
  13. echo $trouperdu;
  14. echo "</div>";
  15. mysql_close();
  16. }


 
Comme vous le voyez, j'ai de superbe nom de variable comme fu*" ou fuç*"ing
Bref, l'incrémentation avec ++ n'a pas fonctionner, donc j'ai essayé +=1 et ça marche!!

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed