Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1709 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Problème de class en php

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de class en php

n°1257043
sebphp
Posté le 01-12-2005 à 17:48:27  profilanswer
 

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!

mood
Publicité
Posté le 01-12-2005 à 17:48:27  profilanswer
 

n°1257050
art_dupond
je suis neuneu... oui oui !!
Posté le 01-12-2005 à 17:56:16  profilanswer
 

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
n°1257053
sebphp
Posté le 01-12-2005 à 18:00:30  profilanswer
 

c'est du php5

n°1257059
art_dupond
je suis neuneu... oui oui !!
Posté le 01-12-2005 à 18:04:16  profilanswer
 

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
n°1257071
omega2
Posté le 01-12-2005 à 18:31:27  profilanswer
 

"(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é?

n°1257123
sebphp
Posté le 01-12-2005 à 21:05:14  profilanswer
 

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
n°1257200
kalex
Posté le 01-12-2005 à 23:47:18  profilanswer
 

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.

n°1257202
FlorentG
Unité de Masse
Posté le 01-12-2005 à 23:51:37  profilanswer
 

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).

n°1257214
art_dupond
je suis neuneu... oui oui !!
Posté le 02-12-2005 à 01:08:44  profilanswer
 

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
n°1257217
leflos5
On est ou on est pas :)
Posté le 02-12-2005 à 01:42:05  profilanswer
 

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
mood
Publicité
Posté le 02-12-2005 à 01:42:05  profilanswer
 

n°1257218
art_dupond
je suis neuneu... oui oui !!
Posté le 02-12-2005 à 02:50:29  profilanswer
 

merci pour ton avis :jap:


---------------
oui oui
n°1257237
sebphp
Posté le 02-12-2005 à 08:51:07  profilanswer
 

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?

n°1257770
leflos5
On est ou on est pas :)
Posté le 02-12-2005 à 19:36:56  profilanswer
 

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...
 
 

n°1257885
robin_liu7​9
Expert technique PHP
Posté le 02-12-2005 à 23:14:58  profilanswer
 

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,


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Problème de class en php

 

Sujets relatifs
[C#] Problème d'instanciation de classes et usage de la class DebugProbleme class java + windows xp
Probleme class java + windows xp[jsp]problème à la compilation : class file contains wrong class
Problème de declaration de sous-classProbleme de class avec GD
[Résolu]nOOb, problème de class pathClass et callback : probleme de fonction
[CSS] problème de DIV avec CLASSProblème de class sous Win XP
Plus de sujets relatifs à : Problème de class en php


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR