Echange des variable entre deux fonctions

Répondre
farouk
le 16/03/2011 à 16:14
farouk
Bonjour!
J'ai une classe avec deux méthodes qui font des insertions des requetes. Je voudrais recuperé l'id du premiere requete pour l'utiliser sur la 2eme méthode. J'ai declaré une variable globale pour assurer le relai mais cela ne semble pas marché merci de me donner votre avis ou bien de me dire ce qui ne marche pas.
  1. <?php
  2. class Modelsaisie
  3. {
  4. //attributs
  5. public $table;
  6. private $id=0;


  7. //la function qui insert les données sur les tables
  8. public function ajout($num,$fic,$dat,$cli)
  9. {

  10. $sql="INSERT INTO ".$this->table." VALUES ('$num','$fic','$dat','$cli')";
  11. //on ecxecute la requete
  12. mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error());
  13. // on récupère le dernier numéro inséré
  14. $this->id= mysql_insert_id();
  15. echo $this->id.'<br />'; //je remarque la variable id recupere bien la donnée
  16. }



  17. //la méthode qui insert les données du sous formulaire sur les tables
  18. public function sousformulaire($numl,$nomp,$qte,$pu,$tva)
  19. {

  20. $longueur=count($nomp);
  21. for($i=0; $i<$longueur; $i++)
  22. {

  23. echo $this->id;
  24. /* je voudrais affiché la variable id ici mais il recupere le 0 au lieu du valeur de l'id mysql.*/
  25. }
  26. }
  27. ?>
  28. ?>
devWeb
moogli
le 16/03/2011 à 16:33
moogli
salut,

je viens de tester ton code, il fonctionne.

est ce que mysql_insert_id retourn quelque chose ?

@+
Il en faut peu pour être heureux !!!!!
farouk
le 16/03/2011 à 17:54
farouk
Oui effectivement mysql_insert_id() recupere l'id qu'on vient d'inserer j'ai fait un echo et il affiche bien l'id. Maintenant je voudrais l'affecté à la variable private $id pour la reutilisé sur l'autre fonction en dessous, mais quand je teste la variable sur la 2eme fonction ça donne rien
  1. echo $this->id
je me rend comte la variable n'est pas transmise.
Merci
devWeb
LA GLOBULE
le 16/03/2011 à 19:17
LA GLOBULE
Montre nous le code qui utilise la classe.

N'initialiserais tu pas 2 objets par hasard ?
farouk
le 16/03/2011 à 20:54
farouk
voila la classe en entier:
  1. <?php class Modelsaisie
  2. {
  3. //attributs
  4. public $table;
  5. private $id=0;
  6. //la méthode qui insert les données sur les tables
  7. public function ajout($num,$fic,$dat,$cli)
  8. {

  9. $sql="INSERT INTO ".$this->table." VALUES ('$num','$fic','$dat','$cli')";
  10. //on ecxecute la requete
  11. mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error());
  12. // on récupère le dernier numéro inséré
  13. $this->id= mysql_insert_id();
  14. echo $this->id.'<br />';
  15. }


  16. //la méthode qui insert les données du sous formulaire sur les tables
  17. public function sousformulaire($numl,$nomp,$qte,$pu,$tva)
  18. {

  19. $longueur=count($nomp);
  20. for($i=0; $i<$longueur; $i++)
  21. {
  22. echo $this->id;
  23. }
  24. }
  25. //Une calsse qui permet d'instancier les objets
  26. static function chargement($name)
  27. {
  28. require("$name.php");
  29. return new $name();
  30. }
  31. }
  32. ?>

Ensuite on a cette classe
  1. <?php
  2. class ClassFacture extends Modelsaisie
  3. {
  4. var $table='facture';
  5. }
  6. ?>


A la fin sur ma page index j'aurai bien cela
  1. $facture=Modelsaisie::chargement(ClassFacture);
devWeb
farouk
le 17/03/2011 à 10:27
farouk
Salut l'équipe!
J'ai réussit à regler mon probleme et merci à vous tous. Au fait il fallait que je recupere ma var au niveau du fichier index où j'instancie mes objets et ensuite la retransmettre en POST vers la 2eme fonction et ça marche nikel.
Je vous aime tous smiley
devWeb
LupusMic
le 18/03/2011 à 01:25
LupusMic
Bon, j'espère que ce n'est pas du code en production que tu nous montre là.

Je pense aux injections SQL possibles (mysqli::real_escape_string est ton amie), et les attaques par injection PHP (require "$variable.php" est ton ennemi).
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours