Problème de class en php

Problème de class en php - PHP - Programmation

Marsh Posté le 01-12-2005 à 17:48:27    

Bonjour à tous!!  
 
je suis en train de réaliser un site de e-commerce en php. J'utilise donc des class mais je ne m'aîtrise pas encore bien la POO.  
 
Voici ma class user :  
<?  
class user  
 {  
  //attribut  
  var $nom,$prenom,$adresse,$num,$bp,$cp,$ville,$pays,$mail,$pswd;  
   
  //constructeur  
  function user ($nom,$prenom,$adresse,$num,$bp,$cp,$ville,$pays,$mail,$pswd)  
  {  
   $this->nom = $nom;  
   $this->prenom = $prenom;  
   $this->adresse = $adresse;  
   $this->num = $num;  
   $this->bp = $bp;  
   $this->cp = $cp;  
   $this->ville = $ville;  
   $this->pays = $pays;  
   $this->mail = $mail;  
   $this->pswd = $pswd;  
  }  
   
  //méthode  
  function ajout()  
  {  
   //premet d'ajouter un utilisateur dans la db  
   mysql_query ("INSERT INTO db_users (Nom,Prenom,Adresse,Numero,BP,CP,Ville,Pays,Mail,Pswd) VALUES ('$this->nom','$this->prenom','$this->adresse','$this->num','$this->bp','$this->cp','$this->ville','$this->pays','$this->mail','$this->pswd')" );  
  }  
   
  function mailto()  
  {  
   
   $mail = $this->mail;  
   $msg = 'Inscription';  
   $corps = "Vos coordonées :"."\n\n".$this->nom." ".$this->prenom."\n".$this->adresse." ".$this->num." ".$this->bp."\n".$this->cp." ".$this->ville."\n".$this->pays."\n\n"."Votre e-mail : ".$this->mail."\n\n"."Votre mot de passe : ".$this->pswd;  
   $entete ='Vos données de l\'inscription au site de commerce';  
   mail ($mail, $msg, $corps, $entete);  
   
  }  
  function maj_user ($mail)  
  {  
   //premet de mettre à jour la db  
   if (!isset ($_POST["update"]))  
   {  
    echo "<FORM method = \"POST\" action = \"maj_user.php\">";  
     echo "Page de mise à jour de vos données<BR><BR>";  
   
     $sql = "SELECT * FROM db_users WHERE Mail='$mail'";  
     $result = mysql_query ($sql);  
     $row = mysql_fetch_row($result);  
   
     for ($i=1;$i!=11;$i++)  
     {  
      echo "<input type =\"text\" name = \"$i\" value = \"$row[$i]\"><BR>";  
     }  
   
    echo "<BR><input type = \"submit\" name = \"update\" value = \"Update\">";  
   echo "</FORM>";  
   }  
   else  
   {  
    $nom = $_POST['1'];  
    $prenom = $_POST['2'];  
    $adresse = $_POST['3'];  
    $num = $_POST['4'];  
    $bp = $_POST['5'];  
    $cp = $_POST['6'];  
    $ville = $_POST['7'];  
    $pays = $_POST['8'];  
    $mail = $_POST['9'];  
    $pswd = $_POST['10'];  
     
    //mise à  jour de la db avec les nouvelles valeurs utilisateur  
    $sql = "UPDATE db_users SET Nom='$nom', Prenom='$prenom', Adresse='$adresse', Numero='$num', BP='$bp', CP='$cp', Ville='$ville', Pays='$pays', Mail='$mail', Pswd='$pswd' WHERE Mail='$mail'";  
    mysql_query ($sql);  
   
    echo "Vos données ont été mise à jour...";  
   }  
  }  
   
  function sup_user ()  
  {  
   //permet de supprimer un utilisateur  
  }  
 
 }  
 
 
 
?>  
 
les fonction ajout() et mailto() fonctionne parfaitement le problème se trouve lors de l'utilisation de maj_user($mail), j'ai une erreur à la ligne 8 (valeurs inconnues) mais je ne vois pas comment resoudre le problème...  
 
Création de l'objet avant l'appel de la fonction ajout :  
$utilisateur = new user($nom,$prenom,$adresse,$num,$bp,$cp,$ville,$pays,$mail,$pswd);  
 
Création de l'objet avant l'apple de la fonction maj_user($mail) :  
$utilisateur = new user ();  
 
Merci de votre aide!

Reply

Marsh Posté le 01-12-2005 à 17:48:27   

Reply

Marsh Posté le 01-12-2005 à 17:56:16    

je n'ai rien changé, c'est juste pour que ce soit plus clair ;)
 
edit: c'est du php4 ou php5 ?

Code :
  1. <? 
  2. class user 
  3.   //attribut   
  4.   var $nom,$prenom,$adresse,$num,$bp,$cp,$ville,$pays,$mail,$pswd; 
  5.  
  6.   //constructeur   
  7.   function user ($nom,$prenom,$adresse,$num,$bp,$cp,$ville,$pays,$mail,$pswd) 
  8.   { 
  9.    $this->nom = $nom; 
  10.    $this->prenom = $prenom; 
  11.    $this->adresse = $adresse; 
  12.    $this->num = $num; 
  13.    $this->bp = $bp; 
  14.    $this->cp = $cp; 
  15.    $this->ville = $ville; 
  16.    $this->pays = $pays; 
  17.    $this->mail = $mail; 
  18.    $this->pswd = $pswd; 
  19.   } 
  20.  
  21.   //méthode   
  22.   function ajout() 
  23.   { 
  24.    //premet d'ajouter un utilisateur dans la db   
  25.    mysql_query ("INSERT INTO db_users (Nom,Prenom,Adresse,Numero,BP,CP,Ville,Pays,Mail,Pswd) VALUES ('$this->nom','$this->prenom','$this->adresse','$this->num','$this->bp','$this->cp','$this->ville','$this->pays','$this->mail','$this->pswd')" ); 
  26.   } 
  27.  
  28.   function mailto() 
  29.   { 
  30.  
  31.    $mail = $this->mail; 
  32.    $msg = 'Inscription'; 
  33.    $corps = "Vos coordonées :"."\n\n".$this->nom." ".$this->prenom."\n".$this->adresse." ".$this->num." ".$this->bp."\n".$this->cp." ".$this->ville."\n".$this->pays."\n\n"."Votre e-mail : ".$this->mail."\n\n"."Votre mot de passe : ".$this->pswd; 
  34.    $entete ='Vos données de l\'inscription au site de commerce'; 
  35.    mail ($mail, $msg, $corps, $entete); 
  36.  
  37.   } 
  38.   function maj_user ($mail) 
  39.   { 
  40.    //premet de mettre à jour la db   
  41.    if (!isset ($_POST["update"])) 
  42.    { 
  43.     echo "<FORM method = \"POST\" action = \"maj_user.php\">"; 
  44.      echo "Page de mise à jour de vos données<BR><BR>"; 
  45.  
  46.      $sql = "SELECT * FROM db_users WHERE Mail='$mail'"; 
  47.      $result = mysql_query ($sql); 
  48.      $row = mysql_fetch_row($result); 
  49.  
  50.      for ($i=1;$i!=11;$i++) 
  51.      { 
  52.       echo "<input type =\"text\" name = \"$i\" value = \"$row[$i]\"><BR>"; 
  53.      } 
  54.  
  55.     echo "<BR><input type = \"submit\" name = \"update\" value = \"Update\">"; 
  56.    echo "</FORM>"; 
  57.    } 
  58.    else 
  59.    { 
  60.     $nom = $_POST['1']; 
  61.     $prenom = $_POST['2']; 
  62.     $adresse = $_POST['3']; 
  63.     $num = $_POST['4']; 
  64.     $bp = $_POST['5']; 
  65.     $cp = $_POST['6']; 
  66.     $ville = $_POST['7']; 
  67.     $pays = $_POST['8']; 
  68.     $mail = $_POST['9']; 
  69.     $pswd = $_POST['10']; 
  70.    
  71.     //mise à  jour de la db avec les nouvelles valeurs utilisateur   
  72.     $sql = "UPDATE db_users SET Nom='$nom', Prenom='$prenom', Adresse='$adresse', Numero='$num', BP='$bp', CP='$cp', Ville='$ville', Pays='$pays', Mail='$mail', Pswd='$pswd' WHERE Mail='$mail'"; 
  73.     mysql_query ($sql); 
  74.  
  75.     echo "Vos données ont été mise à jour..."; 
  76.    } 
  77.   } 
  78.  
  79.   function sup_user () 
  80.   { 
  81.    //permet de supprimer un utilisateur   
  82.   } 
  83. ?>


Message édité par art_dupond le 01-12-2005 à 17:57:24
Reply

Marsh Posté le 01-12-2005 à 18:00:30    

c'est du php5

Reply

Marsh Posté le 01-12-2005 à 18:04:16    

ok, alors pour info le constructeur se fait avec function __construct en php5
 
 
ps: pour ton problème, mon cerveau refuse de lire le code, il me dit qu'il faut dormir
pps: ca bizarre de voir des echo'<form>' dans tes méthodes (enfin je crois, d'après ma grande expérience de 3 femto secondes en POO)

Message cité 1 fois
Message édité par art_dupond le 01-12-2005 à 18:05:52
Reply

Marsh Posté le 01-12-2005 à 18:31:27    

"(valeurs inconnues)" j'adore les documentations traduites .... mais j'aime pas me prendre la tête pendant des heures pour savoir à quel message de php correspond une traduction donnée.
 
sebphp > Serait il possible d'avoir le message d'erreur ou d'alerte exact que php t'as affiché?

Reply

Marsh Posté le 01-12-2005 à 21:05:14    

voici les Warning :  
Warning: Missing argument 1 for user() in c:\program files\easyphp1-7\www\tfe\class\class_user.inc.php on line 8
Warning: Missing argument 2 for user() in c:\program files\easyphp1-7\www\tfe\class\class_user.inc.php on line 8
Warning: Missing argument 3 for user() in c:\program files\easyphp1-7\www\tfe\class\class_user.inc.php on line 8
Warning: Missing argument 4 for user() in c:\program files\easyphp1-7\www\tfe\class\class_user.inc.php on line 8
Warning: Missing argument 5 for user() in c:\program files\easyphp1-7\www\tfe\class\class_user.inc.php on line 8
Warning: Missing argument 6 for user() in c:\program files\easyphp1-7\www\tfe\class\class_user.inc.php on line 8
Warning: Missing argument 7 for user() in c:\program files\easyphp1-7\www\tfe\class\class_user.inc.php on line 8
Warning: Missing argument 8 for user() in c:\program files\easyphp1-7\www\tfe\class\class_user.inc.php on line 8
Warning: Missing argument 9 for user() in c:\program files\easyphp1-7\www\tfe\class\class_user.inc.php on line 8
Warning: Missing argument 10 for user() in c:\program files\easyphp1-7\www\tfe\class\class_user.inc.php on line 8
 :??:


Message édité par sebphp le 01-12-2005 à 21:05:51
Reply

Marsh Posté le 01-12-2005 à 23:47:18    

Citation :

Création de l'objet avant l'apple de la fonction maj_user($mail) :  
$utilisateur = new user ();


Il est là le problème. La méthode user est considérée (par compatibilité avec PHP 4) comme le constructeur car elle porte le même nom que la class. Elle est donc automatiquement appelée et comme elle a des arguments impératifs, y a problème.

Reply

Marsh Posté le 01-12-2005 à 23:51:37    

C'est parce que tu ne peux pas appeller le contructeur sans lui donner les paramètres requis. Genre :

class Pouet {
 
  var $tagada;
 
  function Pouet($tagada) {
    $this->tagada = $tagada;
  }
}


Si tu l'appelles avec :

$pouet = new Pouet()


C'est normal qu'il fasse un warning (il devrait même faire une erreur fatale), vu qu'il faut y passer obligatoirement la valeur de $tagada.
 
Solution, mettre une valeur par défaut :

function Pouet($tagada = NULL)


Et là plus de warning, vu que tu files pas de valeur il va prendre la valeur par défaut spécifiée (ici NULL).

Reply

Marsh Posté le 02-12-2005 à 01:08:44    

art_dupond a écrit :

ok, alors pour info le constructeur se fait avec function __construct en php5
 
 
ps: pour ton problème, mon cerveau refuse de lire le code, il me dit qu'il faut dormir
pps: ca bizarre de voir des echo'<form>' dans tes méthodes (enfin je crois, d'après ma grande expérience de 3 femto secondes en POO)


youp,
 
 
j'aimerais avoir un avis sur ca (parce que je n'en sais rien en fait mais je trouve ca "moche" )
 
merci


---------------
oui oui
Reply

Marsh Posté le 02-12-2005 à 01:42:05    

art_dupond a écrit :

youp,
 
 
j'aimerais avoir un avis sur ca (parce que je n'en sais rien en fait mais je trouve ca "moche" )
 
merci


Mon avis: le traitement c'est le traitement, l'affichage c'est l'affichage... Et une classe sauf si justement elle gère l'affichage, ou qu'une méthode gère l'affichage de la classe, en effet c'est laid.
 
Mais au final pas plus que les 80% de prog en php de la part de gens qui profitent de la simplicité sans être capable de structurer même un poil de cul la prog :whistle:
 
Même avec un seul fichier unique les echo de partout c'est caca pour moi... Et en plus v'la la performance du machin, si certains ont besoin de preuves pas de souci :)
 
C'est tellement plus propre d'avoir une chaine et de la vider après... Et puis les tampons c'est une autre histoire mais ça empêche pas de coder proprement :whistle:
 
edit: c'est comme, un fichier il a une extension mais au delà de ça un but :) Donc les fichier mi php mi html beurk...
Si y'a besoin de html on include, sinon c'est que y'a un souci de conception...


Message édité par leflos5 le 02-12-2005 à 01:44:09
Reply

Marsh Posté le 02-12-2005 à 01:42:05   

Reply

Marsh Posté le 02-12-2005 à 02:50:29    

merci pour ton avis :jap:


---------------
oui oui
Reply

Marsh Posté le 02-12-2005 à 08:51:07    

function Pouet($tagada = NULL)


 
Merci bcp FlorentG, ca fonctionne!!!
 
Je vois que mes "echo '<FORM>'" vous n'aimez pas...comment puis-je pour utiliser votre méthode?

Reply

Marsh Posté le 02-12-2005 à 19:36:56    

sebphp a écrit :

function Pouet($tagada = NULL)


 
Merci bcp FlorentG, ca fonctionne!!!
 
Je vois que mes "echo '<FORM>'" vous n'aimez pas...comment puis-je pour utiliser votre méthode?


Bah tu utilises une chaine que tu construis au fur et à mesure :)
 
Tu vides à l'affichage au dernier moment :) Pas par morceau, sur juste de l'affichage ça change rien sauf que c'est pas lisible et l'éventuel débogage bonjour...
 
 

Reply

Marsh Posté le 02-12-2005 à 23:14:58    

function maj_user ($mail)  
  {  
   //premet de mettre à jour la db  
   if (!isset ($_POST["update"]))  
 
---------ici, il ne connait pas le $_POST
 
function maj_user ($mail,$array_post)
{
....
}  
$utilisateur = new user ($mail,$_POST);
 
il manque la partie qui vérifie les variables NULL,

Reply

Sujets relatifs:

Leave a Replay

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