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 :

[POO] Suis-je bien parti pour de la POO ?


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 41
    Points : 24
    Points
    24
    Par défaut [POO] Suis-je bien parti pour de la POO ?
    Bonjour !

    Je maitrise pas mal le PHP, mais a la "old school".
    Je me met donc doucement a la POO sious PHP5.

    Je fais pour m'entrainer un site (en locale ) avec une BDD :
    TABLE :: PAYS
    id
    Nom
    Capitale
    Drapeau
    Carte
    Monnaie
    FK_Visa // (Cle etrangere)
    Budget
    Notes


    TABLE :: VILLES
    id
    Nom
    FK_Pays // (Cle etrangere)
    notes

    TABLE :: VISA
    id
    duree
    prix
    notes
    Un pays a 1 visa et 1 ou plusieurs villes

    Je souhaite gerer tout cela (lecture + ecriture) avec des classes.
    Si j ene me trompe pas, une calss = 1 table (dans mon cas en tout cas)

    Voici mon code (juste de la lecture pour l'instant) ::

    CLASS :: Pays.class.php

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    <?php	
    class Pays{
     
    	public $id = NULL;
    	public $nom = NULL;
    	public $capitale = NULL;
    	public $drapeau = NULL;	
    	public $carte = NULL;
    	public $monnaie = NULL;
    	public $FK_visa = NULL;
    	public $budget = NULL;
    	public $notes = NULL;
     
     
    	public function addPays(Pays $objet){
    		$objet->CheckFields();
    		$query = "INSERT INTO pays VALUES ('', '$objet->nom', '$objet->capitale', '$objet->drapeau', '$objet->carte', '$objet->monnaie', '$objet->FK_visa', '$objet->FK_liens', '$objet->budget', '$objet->notes')";
     
    		 mysql_query($query);
    		 echo "<br />";
    		 echo "Insertion OK";
    		}
     
    	public function getPays($id) {			    
    		$requete = "SELECT * FROM pays WHERE id = $id";
     
    		$reponse = mysql_query($requete);
    		$donnees = mysql_fetch_array($reponse);
     
    		$this->id = $donnees['id'];
    		$this->nom = $donnees['nom'];
    		$this->capitale = $donnees['capitale'];
    		$this->drapeau = $donnees['drapeau'];
    		$this->carte = $donnees['carte'];
    		$this->monnaie = $donnees['monnaie'];
    		$this->FK_visa = $donnees['FK_visa'];
    		$this->budget = $donnees['budget'];
    		$this->notes = $donnees['notes'];
     
    		return $donnees;		
    		}
    }	
     
    /****************/
    /*	VILLES	*/
    /****************/
    class Villes{	
     
    	public $id = NULL;
    	public $nom = NULL;
    	public $FK_pays = NULL;
    	public $notes = NULL;
     
    	//Variables Externes
    	public $pays = NULL;
    	public $visa = NULL;
     
     
     
    	public function getVille($id) {			    
    		$requete = "SELECT * FROM villes WHERE id = $id";
     
    		$reponse = mysql_query($requete);
    		$donnees = mysql_fetch_array($reponse);
     
    		$this->id = $donnees['id'];
    		$this->nom = $donnees['nom'];
    		$this->FK_pays = $donnees['FK_pays'];
    		$this->notes = $donnees['notes'];
     
    		$Pays = new Pays();
    		$this->pays = $Pays->getPays($this->id);
     
    		$Visa = new Visas();
    		$this->visa = $Visa->getVisa($this->FK_pays);
     
    		}	
    }
     
    /****************/
    /*	VISAS	*/
    /****************/
    class Visas{
     
    	public $id = NULL;
    	public $duree = NULL;
    	public $prix = NULL;
    	public $notes = NULL;
     
    	public function getVisa($id) {			    
    		$requete = "SELECT * FROM visas	WHERE id = $id";
     
    		$reponse = mysql_query($requete);
    		$donnees = mysql_fetch_array($reponse);
     
    		$this->id = $donnees['id'];
    		$this->duree = $donnees['duree'];
    		$this->prix = $donnees['prix'];
    		$this->notes = $donnees['notes'];
     
    		return $donnees;		
    		}	
    }

    et le script php de test :: test.php

    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
    <?php
     
    // Inclusion de la source de la classe
    include 'Pays.class.php';
     
    connect('localhost', 'root', '', 'tdm');
     
    $Ville = new Villes();
    $Ville->getVille(1);
    echo 'Ville : '. $Ville->nom;
    echo "<br />";
    echo 'Pays : '. $Ville->pays['nom'];
    echo "<br />";
    echo 'Visa : '. $Ville->visa['duree'];
     
    ?>
    Alors, ca semble correct ou je suis a 1000 km d'avoir compris ?

  2. #2
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Points : 2 273
    Points
    2 273
    Par défaut
    Salut,
    personnellement j'aurais utilisé un niveau d'abstraction différent et fait la différence entre un objet et un ensemble d'objets, un truc du style :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    class sqlRecord	{
    	private $fields;
     
    	function __construct($table, $pKeyName, $pKeyValue !== null)	{
    		$fields = null;
    		if($pKeyValue!== null)	{
    			$this->sqlLoadFields($table, $pKeyName, $pKeyValue);
    		}
    	}
     
    	function sqlLoadFields($table, $pKeyName, $pKeyValue)	{
    		$requete = "SELECT * FROM ".$table." WHERE ".$pKeyName." = ".$pKeyValue;
    		$reponse = mysql_query($requete);
    		$donnees = mysql_fetch_assoc($reponse);
    		$fields = $donnees;
    	}
     
    	function getField($name)	{
    		if(isset($this->fields[$name]))	{
    			return $this->fields[$name];
    		}
    		else	{
    			return null;
    		}
    	}
    }
     
     
    class Ville extends sqlRecord	{
    	private $pays;
    	private $visa;
     
    	function __construct($id)	{
    		parent::__construct('VILLES', 'id', $id);
    		$this->pays = new Pays($this->getField('FK_Pays'));
    		$this->visa = new Visa($this->pays('FK_Visa'));
    	}
     
    	function getPays()	{
    		return $this->pays;
    	}
     
    }
     
    class Pays extends sqlRecord	{
     
    	function __construct($id)	{
    		parent::__construct('PAYS', 'id', $id);
    	}
    }
     
    class Visa extends sqlRecord	{
     
    	function __construct($id)	{
    		parent::__construct('VISAS', 'id', $id);
    	}
    }
     
     
    $ville = new Ville(1);
    echo $ville->getField('nom').'<br/>';
    echo $ville->getPays()->getField('nom').'<br/>';
    echo $ville->getVisa()->getField('duree').'<br/>';
    C'est évidemment moins optimisé en terme de vitesse mais plus en terme d'ergonomie, maintenance, etc.. Il manque des tests de retour de BDD
    Vive les roues en pierre

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 41
    Points : 24
    Points
    24
    Par défaut
    Super,
    ton code m'a beaucoup aide, et c'est vrai qu'il est plus pratique.

    Par contre si je veux me faire un formulaire pour ajouter des donnees (creation d'un nouveau Pays, d'un visa etc.), j'avais fait une fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	public function addPays(Pays $objet){
    		$objet->CheckFields();
    		$query = "INSERT INTO pays VALUES ('', '$objet->nom', '$objet->capitale', '$objet->drapeau', '$objet->carte', '$objet->monnaie', '$objet->FK_visa', '$objet->FK_liens', '$objet->budget', '$objet->notes')";
     
    		 mysql_query($query);
    		 echo "<br />";
    		 echo "Insertion OK";
    		}
    Je rajouterai donc dans la class Pays ::
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	public $id = NULL;
    	public $nom = NULL;
    	public $capitale = NULL;
    	public $drapeau = NULL;	
    	public $carte = NULL;
    	public $monnaie = NULL;
    	public $FK_visa = NULL;
    	public $FK_liens = NULL;
    	public $budget = NULL;
    	public $notes = NULL;
    Je fais ca de cette maniere ou bien je fais simplement (pas objet) ? ::
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	public function addPays($id,$nom,$capitale,...){
    		$objet->CheckFields();
    		$query = "INSERT INTO pays VALUES ('', '$nom', '$capitale', ...)";
     
    		 mysql_query($query);
    		 echo "<br />";
    		 echo "Insertion OK";
    		}
    Lequel est le mieux adapte ?


    EDIT ::
    Je vais surement aussi ajouter d'autres choses que des pays (des villes, des visas etc.)
    Existe-t-il un moyen de faire une fonction globale qui fasse le INSERT quelque soit la valeur et le nombre de parametres envoyes ?

  4. #4
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Points : 2 273
    Points
    2 273
    Par défaut
    T'as pas besoin d'ajouter de nouveaux membres aux classes, tu peux tout stocker dans le tableau fields.
    Voilà un bout de la fonction d'insert que j'utilise dans ma classe MySqlRecord :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    			$tmpStr = null;
    			$sql = "INSERT INTO ".$table." SET ";
     
    			if(($this->fields !== null)	{
    				foreach($fields as $fieldName => $fieldValue)	{
    					$tmpStr[] = $fieldName ." = '".$fieldValue."'";
    				}
    			}
    			if($tmpStr !== null)	{
    				$sql .= implode(', ', $tmpStr);
    			}
    +


    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
    	/**
    	* D�finit un nom de champ et sa valeur dans le tableau associatif des champs en prot�geant les caract�res.
    	* @param $name Le nom du champ.
    	* @param $value La valeur du champ.
    	*/
    	function setEscapedField($name, $value = null)	{
    		$this->fields[MySqlUtilities::quoteSmart($name)] = MySqlUtilities::quoteSmart($value);
    	}
     
    	/**
    	* D�finit un nom de champ et sa valeur dans le tableau associatif des champs sans prot�ger les caract�res.
    	* @param $name Le nom du champ.
    	* @param $value La valeur du champ.
    	*/
    	function setField($name, $value = null)	{
    		$this->fields[$name] = $value;		
    	}
    et là tu vois que le code te permet de modifier directement la façon dont tu échappes tes champs. S'il y a une modif, elle sera juste dans cette fonction.
    D'autre part quand t'utilises une fonction générique d'insert dans la BDD ca crée un gros trou de sécurité, il faut tester s'il y a des champs indésirables et ne garder que ceux que l'on veut insérer. Le but étant bien sur de copier directement les champs d'un formulaire passé en $_POST dans $fields.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $pays = new Pays();
    $pays->setFields($_POST['fields']);
    $pays->checkFields();
    $pays->sqlInsert()
    ps : tu peux remplacer MySqlUtilities::quoteSmart($name) par mysql_real_escape($name)
    Vive les roues en pierre

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 41
    Points : 24
    Points
    24
    Par défaut
    Yep merci,

    je n'ai pas tout capte, mais j'ai adapte.

    J'ai cree la fonction ::

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	public function sqlInsert($table, $sfields){
    			$tmpStr = null;
    			$sql = "INSERT INTO ".$table." SET ";
     
    			if($this->fields !== null)	{
    				foreach($sfields as $fieldName => $fieldValue)	{
    					$tmpStr[] = $fieldName ." = '".$fieldValue."'";
    				}
    			}
    			if($tmpStr !== null)	{
    				$sql .= implode(', ', $tmpStr);
    			}
    			echo $sql;
    	}
    et je fais juste ca pour envoyer ::
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $pays = new Pays(); 
    $pays->sqlInsert('pays',$_POST);
    et ca marche nikel
    mais je n'utilise pas $pays->setField($_POST['fileds']);
    car il ne connait pas l'attribut fields (y en a pas dans mon formulaire) et quand je met le nom d'un de mes champs, c'est ok, mais juste pour lui.
    Je vais pas faire autant de setField que de champ quand meme !

    Et pour le new Pays(), je recois cette erreur ::
    Warning: Missing argument 1 for Pays::__construct(),...

    c'est vrai que mon constructeur attends un $id et auand je veux surcharger la methode, ca passe pas, j'ai pas le droit de redeclarer la mm function _ construct().

    voila !

    J'aurai aussi pu faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if(isset($_POST)) {
    $k =$v = null;
    	foreach($_POST as $key=>$val) {
    		$k .= $key. ', ';
    		$v .= htmlentities(trim($val)). ', ';
    	}		
    	echo $k;	
    	echo $v;
     
    	$req = "INSERT INTO pays ($k) VALUES ($v)";
    	echo $req;
    }
    non?
    Je sais que c'est pas top secure mais bon...

  6. #6
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Points : 2 273
    Points
    2 273
    Par défaut
    C'est quoi que t'as pas capté ?

    Pour le Pays et les autres classes d'ailleurs :

    function __construct($id == null)

    Pour ce qui est du passage par formulaire le but c'est de faire :

    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
    <input type="text" name="ville[pays][nom]">
    <input type="text" name="ville[pays][drapeau]">
    <input type="text" name="ville[pays][capitale]">
    <input type="text" name="ville[visa][duree]">
    <input type="text" name="ville[visa][prix]">
     
     
    $ville = new Ville();
    $ville->setFields($_POST['ville']); // et dans le setFields de Ville faire les setFields d ePays et Visa
     
    // ou
     
    $pays = new Pays();
    $pays->setFields($_POST['ville']['pays']);
    $pays->checkFields();
    $pays->sqlInsert()
    La fonction c'est setFields($fields), en fait une simple boucle qui appelle setField() sur chaque clé/valeur du tableau passé.

    En passant les champs à la fonction sqlInsert() plutôt que de les stocker dans l'objet tu dérives du modèle objet. Idem, tu repasses la table alors que le constructeur est déjà prévu pour la recevoir (sauf que j'ai oublié un attribut private $table; dans sqlRecord ^^).

    Mais bon tout ca c'était surtout pour te montrer le principe de découpage des classes
    Vive les roues en pierre

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 41
    Points : 24
    Points
    24
    Par défaut
    ok, je pense que la c'est ok

    avec ::

    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
    22
    23
    24
    25
    26
    	public function setField($name, $value = null)	{
    		$this->fields[$name] = $value;		
    	}
    	
    	public function sqlInsert(){
    			$tmpStr = null;
    			$sql = "INSERT INTO ".$this->table." SET ";
     
    			if($this->fields !== null)	{
    				foreach($this->fields as $fieldName => $fieldValue)	{
    					$tmpStr[] = $fieldName ." = '".$fieldValue."'";
    				}
    			}
    			if($tmpStr !== null)	{
    				$sql .= implode(', ', $tmpStr);
    			}
    			echo $sql;
    	}
    	
    	public function setFields($post){
    		if(isset($post)) {
    		foreach($post as $key=>$val) {
    			$val = htmlentities(trim($val));		
    			$this->setField($key, $val); 
    		}		
    	}
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $pays = new Pays(); 
    $pays->setFields($_POST);
    //$pays->checkFields(); 
    $pays->sqlInsert('pays');
    Mon formulaire ressemble plus a ca (les name ne sont pas avec des [] ) ::

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <p><label for="nom">Nom :: </label><input name="nom" type="text" /></p>	
    			<p><label for="capitale">Capitale :: </label><input name="capitale" type="text" /></p>	
    			<p><label for="drapeau">Drapeau :: </label><input name="drapeau" type="file" /></p>
    Ca pose probleme ou c'est pareil ?

    au fait, pourquoi tu fais souvent !==, je savais pas que ca existait
    je connaissais que !=


    et function __construct($id == null) ne passe pas, j'ai mis function __construct($id = null)


    et j'ai remplace ton foreach($fields as $fieldName => $fieldValue) par foreach($this->fields as $fieldName => $fieldValue) sinon ca marchait pas, il connaissai pas $fields (qui est pourtant declare dan la classe)

    Et aussi :: Fatal error: Call to undefined function mysql_real_escape()
    Il connait pas, je vais garder htmlentities et addslashes, ca devrait suffire.

  8. #8
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Points : 2 273
    Points
    2 273
    Par défaut
    L'idée c'est de faire ton échappement qu'à un seul endroit, dans la fonction setField, en fait c'est mysql_real_escape_string() la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public function setFields($post){
    		if(isset($post)) {
    		foreach($post as $key=>$val) {
    			$this->setField($key, $val); 
    		}		
    	}
     
    public function setField($name, $value){
    	$this->fields[mysql_real_escape_string($name)] = mysql_real_escape_string($value);
    	}
    mysql_real_escape_string() est faite exprès et si tu utilises htmlentities ca va te poser un problème pour les recherches dans la BDD.
    Pour !== et === c'est pour comparer aussi le type par exemple :

    '0' == 0 return true
    '0' === 0 return false

    Pour le construcuteur et le foreach oui c'est des erreurs de ma part.

    Au sujet du formulaire le problème si tu crées pas de tableau c'est qu'il va te mettre le sumbit avec dans ta requête (enfin normalement il sera filtré avec le checkFields() mais à mon avis ca reste plus propre de faire name="pays[drapeau]").

    Au sujet de la table ce que je disais c'est que la table fait partie de l'objet, la classe sqlRecord ressemblerait donc plutôt à ça et sqlInsert() ne prend plus de paramètres ou juste le nom de la clé en auto-increment si elle est pas stockée dans l'objet :


    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    class sqlRecord	{
    	private $fields;
    	private $table;
     
    	function __construct($table, $pKeyName, $pKeyValue !== null)	{
    		$this->fields = null;
    		$this->table = $table;
    		if($pKeyValue !== null)	{
    			$this->sqlLoadFields($pKeyName, $pKeyValue);
    		}
    	}
     
    	function sqlLoadFields($pKeyName, $pKeyValue)	{
    		$requete = "SELECT * FROM ".$this->table." WHERE ".$pKeyName." = ".$pKeyValue;
    		$reponse = mysql_query($requete);
    		$donnees = mysql_fetch_assoc($reponse);
    		$this->fields = $donnees;
    	}
     
     public function sqlInsert(){
    			$tmpStr = null;
    			$sql = "INSERT INTO ".$this->table." SET ";
     
    			if($this->fields !== null)	{
    				foreach($this->fields as $fieldName => $fieldValue)	{
    					$tmpStr[] = $fieldName ." = '".$fieldValue."'";
    				}
    			}
    			if($tmpStr !== null)	{
    				$sql .= implode(', ', $tmpStr);
    			}
    			echo $sql;
    	}
     
    	function getField($name)	{
    		if(isset($this->fields[$name]))	{
    			return $this->fields[$name];
    		}
    		else	{
    			return null;
    		}
    	}
    }
    La classe SqlRecord est beaucoup plus complexe pour être générique mais ca donne un aperçu (en réalité les clés primaires sont aussi stockées dans un objet table etc.). J'espère ne pas t'avoir trop embrouillé.
    Vive les roues en pierre

  9. #9
    Membre à l'essai
    Inscrit en
    Janvier 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 41
    Points : 24
    Points
    24
    Par défaut
    yes !

    super et merci beaucoup d'avoir pris le temps de m'aider Djakisback !
    Je comprends un peu mieux le principe.

    Par contre l'histoire des tableaux dans le formulaire, c'est pas top clair, mais bon,

    j'ai remplace tous mes name="" (et les for="" des labels au passage) pour avoir des tableaux comme tu me l'as conseille.

    Je précise juste qu'il y a un formulaire pour chaque table ::
    un pour les pays, un pour les villes etc.
    Ca ne change rien ou les tableaux sont inutiles dans ce cas ?

    Merci encore !

  10. #10
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Points : 2 273
    Points
    2 273
    Par défaut
    Effectivement si t'as un seul objet par formulaire c'est moins important, un exemple plus concret :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <input type="text" name="duree">
    <input type="text" name="prix">
    <input type="submit" name="submit" value="insérer">
     
    $visa->setFields($_POST);
    Le tableau $visa->fields contiendra aussi une entrée 'submit' => 'insérer' alors que non, si tu fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <input type="text" name="visa[duree]">
    <input type="text" name="visa[prix]">
    <input type="submit" name="submit" value="insérer">
     
    $visa->setFields($_POST['visa']);
    Vive les roues en pierre

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

Discussions similaires

  1. [POO] [DEV] Classe de debug pour PHP
    Par -COil- dans le forum Langage
    Réponses: 11
    Dernier message: 09/06/2007, 19h53
  2. Une requête bien compliquée pour moi
    Par bellande dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 01/02/2007, 21h51
  3. [POO] Utilisé la function __destruct() pour...
    Par shadeoner dans le forum Langage
    Réponses: 4
    Dernier message: 31/03/2006, 14h56
  4. suis-je assez compétent pour espérer commencer ?
    Par veevee dans le forum Installation
    Réponses: 6
    Dernier message: 18/12/2005, 10h22
  5. Dev C++ (Bien seulement pour les debutants)?
    Par Frazeks dans le forum Dev-C++
    Réponses: 3
    Dernier message: 20/09/2005, 13h41

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