IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Ma fonction crée renvoi la variable en double [PHP 5.2]


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Ma fonction crée renvoi la variable en double
    Bonjour.
    Je tente de coder une interface de creation/d'ajout de produit en inventaire.
    A chaque ajout d'article, je veus qu'un script crée automatiquement un ID pour la base de donnée et qui servira en même temps pour imprimer le code barre.

    Mais je bloque a un endroit, après mon formulaire il y a la page du 'submit' qui appelera plusieurs fonctions.
    Dans l'ordre :
    1er fonction : Create_Ref($Type, $Name);
    cette fonction se trouve sur un autre fichier 'fonction.php' et permettra de crée cette fameuse ID.
    dans cette même fonction j'y appel encore une autre fonction dans un autre fichier :
    2e fonction : LectureArticleID($ID);
    cette fonction se trouve dans un fichier 'fonction_connect.php' et permettra de voir si l'ID existe déjà dans la DB.
    Mais c'est là que le problème surviens.
    Par exemple dans Create_Ref($Type, $Name); je crée l'ID à la valeur '520620090000' mais dans la fonction LectureArticleID($ID); ça renvoi cette valeur mais en 2fois = '520620090000520620090000'.

    Voila le 'submit' du formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    <?php
    include ("../Kernel/admin.php") ;
    include ("../Kernel/fonction.php") ;
    $Name = $_POST['Name'];
    $Type = $_POST['Type'];
    $PRIX = $_POST['Prix'];
    $Date_Ajout = $_POST['Date'];
    $Nombre = $_POST['Nombre'];
    $R_ID = Create_Ref($Type, $Name) ;
    mysql_connect($Serveur, $Root, $Passwd)or die(mysql_error());
    mysql_select_db($Article)or die(mysql_error());
    $requete = "INSERT INTO produit VALUES('$R_ID','$Name','$Type','$PRIX','$Date_Ajout')";
    $i = 0; //on définit la variable $i qui sera notre nombre que l'on incrémentera. Ici $i va commencer à 0 
    while($i < $Nombre) 
    { 
    	mysql_query($requete)or die(mysql_error());
    	$i++; 
    } 
    Header ("Location:http://serveur:84/ajout/ok.php");
    ?>
    Ensuite la fonction Create_Ref($Type, $Name) ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function Create_Ref($Type, $Name)
    {
    	$Date = Date('mo');
    	$Fin = '0000';
    	$ID = "$Type$Name$Date$Fin";
    	$N_id = LectureArticleID($ID);
    	return $ID ;
    }
    A noter que $ID est bien correcte, j'ai fait un echo pour vérifier.
    Et enfin la fonction qui me renvoi la variable en double : LectureArticleID($ID);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function LectureArticleID($ID)
    {
    	include ("admin.php") ;
    	mysql_connect($Serveur, $Root, $Passwd)or die(mysql_error());
    	mysql_select_db($Article)or die(mysql_error());
    	$requete = "select * from produit where id = '$ID'";
    	$resultat = mysql_query($requete);
    	while(list($Id) = mysql_fetch_row($resultat))
    	{
    		$R_ID = "$Id";
    		echo "$R_ID<br>" ;
    	}
    }
    Le problème est ici, la valeur $ID est en double et je comprend pas comment et pourquoi

    Pour la debug j'ai fait des // sur mon script d'auto-incrementation de l'ID.
    Vous remarquerez que $Fin = 0000 et c'est cette variable que je voulais incrementer mais le truc c'est que $Fin++ = 1 après donc ça donne $ID =520620091 et donc ça foire mon incrementation alors que je veus $ID++ = 520620090001.

    Pour le moment je me penche sur ce problème de variable et ensuite je reprend le taff sur ce fameux script d'auto-incrementation, je l'avais fait avec un 'while' mais la boucle qu'une fois c'est pour ça que j'ai mis la recherche d'ID dans la DB dans une fonction afin de l'appeler dans la boucle et éviter de faire des boucle dans des boucle etc...

    Voila merci de votre aide d'avance.

  2. #2
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718
    Par défaut
    Je ne sais pas si ça va résoudre ton problème mais j'ai quelques détails à te faire remarquer dans ton code :

    1) Evite de faire des echo dans une fonction préfère retourner une valeur

    2) Evite de faire un include, préfaire un include_once sinon en cas de double appel de ta fonction, ton script va planter

    3) Lorsque tu appel ta 2eme fonction, tu attend une valeur de retour ($N_id) or ta fonction ne retourne rien...

    4) Evite d'entrer directement une variable dans ta requete SQL sans l'avoir proteger (SQL Injections). Utilise mysql_real_escape_string().

    5) Pourquoi utiliser list ? (while(list($Id) = mysql_fetch_row($resultat))) Si tu ne veux qu'une valeur, ne fait pas un "select *" ^^
    Préfère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while($row = mysql_fetch_row($resultat)) { $id = $row[0]; }
    Je pense que c'est plus clair ^^

    6) Pour ton problème d'incrémentation, utilise un entier (1,2,3 etc) et après comble le avec la fonction sprintf :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // 5 caractère de long minimum
    $valeur = sprintf("[%05d]\n",   $i);
    ^^

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Je te remercie.

    Pour les petites erreurs de codage, c'est surement parce que j'ai aucune formation en PHP, je me sert d'énormément de tuto, livre sur le language, des forums, etc... Je n'ai personne pour m'aider a mieux comprendre ce language donc je me sert que de se que je sais me servir.

    Comme tu l'a dit pour les "echo" pour le moment j'en suis a la phase beta donc j'aime bien voir sur une page neutre la valeur des variable c'est plus simple pour corriger, quand j'en aurais fini je les transformerais en "return".

    Par précaution j'ai mis mon include en include_once.

    4) Evite d'entrer directement une variable dans ta requete SQL sans l'avoir proteger (SQL Injections). Utilise mysql_real_escape_string().
    Désolé mais je n'ai pas vraimment compris

    Pour le "list" je l'ai remplacer par ton code et ça fonctionne je n'ai pas ma valeur doublé encore merci ça faisait quelques jours que je bloqué la dessus a tenté de trouvé un post sur le même problème.

    Hum "sprintf" >< je ne l'utilse pas encore cette fonction je vais voir les tutos pour savoir comment m'en servir.

    Et heu que veut tu dire "ne pas faire select" ?
    Et enfin la fonction LectureArticleID() ne renvoi toujours aucune valeurs ><

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function LectureArticleID($ID)
    {
    	include ("admin.php") ;
    	mysql_connect($Serveur, $Root, $Passwd)or die(mysql_error());
    	mysql_select_db($Article)or die(mysql_error());
    	$requete = sprintf("select id from produit where id = '%s'", mysql_real_escape_string($ID));
    	$resultat = mysql_query($requete);
    	while($row = mysql_fetch_row($resultat))
    	{
    		$id = $row[0];
                              return $id;
    	}
    }
    Encore merci de ta réponse rapide.

    Edit j'ai réussi en même temps mon incrementation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    function Create_Ref($Type, $Name)
    {
    	include_once("fonction_connect.php");
    	$Date = Date('mo');
    	$Fin = '0000';
    	$XD = "$Type$Name$Date$Fin";
    	$N_id = LectureArticleID($XD);
    	while($N_id == $XD OR $N_id > $XD) 
    	{ 
    		$XD++;
    		$N_id = LectureArticleID($XD);
    		$C_ID = $XD ;
    	}
    	return $C_ID ;
    }

  4. #4
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718
    Par défaut
    Si la fonction LectureArticleId ne fait aucun return, c'est une erreur d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $N_id = LectureArticleID($XD);
    Pour le sprintf, c'est un peu avancé mais je t'ai donné le code tout prêt ^^

    Pour les injections, c'est pas grave tu débute tu en entendra parler plus tard ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. fonction qui renvoie le type d'une variable
    Par alves1993 dans le forum Débuter
    Réponses: 4
    Dernier message: 30/04/2014, 01h01
  2. [Débutant] Fonction qui renvoie un nombre de paramètres variables.
    Par abel413 dans le forum MATLAB
    Réponses: 7
    Dernier message: 24/07/2013, 09h29
  3. fonction qui renvoie le type d'une variable
    Par dgwabo dans le forum C++
    Réponses: 6
    Dernier message: 31/03/2011, 16h08
  4. Fonction qui renvoie une variable locale.
    Par deubelte dans le forum C++
    Réponses: 7
    Dernier message: 28/03/2011, 17h27
  5. Fonction qui renvoie plusieurs variables
    Par _Aravis dans le forum MATLAB
    Réponses: 1
    Dernier message: 28/09/2008, 19h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo