Bonjour à tous, je ne sais pas si le POST suivant est déjà sur le forum, si oui excusez-moi.
Je tente de créer un formulaire en utilisant le Pattern MVC, mais j'éprouve quelques petites difficultés

Ma structure est la suivante :
Modele -> contient ma classe articles (Variable + GET + SET)
controller -> contient une classe ManageArticle avec 2 méthodes : (Add() + GetAll())
vue -> simple formulaire en html
index.php -> à la racine

article.class.php (modele):

<?php
class Article{

    private $id;
    private $titre;
    function __construct($titre=null, $id=null) {
        $this->id = $id;
        $this->titre = $titre;
    }
    public function getId() {
        return $this->id;
    }
    public function setId($id) {
        $this->id = $id;
    }
    public function getTitre() {
        return $this->titre;
    }
    public function setTitre($titre) {
        $this->titre = $titre;
    }
}
?>

controlMonArticle.php (controller):

<?php
require_once'class.singleton.php';
require_once'../model/article.class.php';

class ManageArticle{
    public static function add(Article $article)
    {

            $connexion = Connexion::getInstance();
            $sql =$connexion->prepare("INSERT INTO article(`titre`) VALUES ('".$article->getTitre()."')");
            $sql->execute();
            return $article;
    }

   public static function getAll()
   {    
        $connexion = Connexion::getInstance();
        $ress = $connexion->prepare("SELECT * from article");
        $ress->execute();
        $listArticle = array();
        foreach ($ress as $value) 
        {
            $listArticle] = new Article($value'titre'],$value'id']);
        }
        return $listArticle;
    }
}
?>

Liste.php (vue):

<?php
require_once"../controller/controlMonArticle.php";

$ajoutArticle = ManageArticle::add(new Article);
$listeArticle = ManageArticle::getAll();

echo "<pre>";print_r($ajoutArticle);
 echo "<pre>";print_r($listeArticle);die;

?>

Mon problème est le suivant : Lors de l'envoi du titre de l'article je n'ai que l'id qui se rajoute (Auto-Incrément)
Mais le champ titre reste vide.
Je sais que mon erreur vient de la methode add() mais je ne sais pas comment la résoudre.

Merci de vos réponse

7 réponses


Garniture-banner
Réponse acceptée
new Article

Ce bout de code crée un nouvel objet article vide.
Quand tu fais

$article->getTitre()

getTitre renvoi une chaine vide...

normalement dans listeVue, tu dois faire :

<?php
require_once"../controller/controlMonArticle.php";

 $article = new Article();
$article->setTitre('super titre de test');
//ou mieux encore !!
/*
$ajoutArticle = ManageArticle::add(new Article('mon super titre');
*/

$ajoutArticle = ManageArticle::add($article);

$listeArticle = ManageArticle::getAll();

echo "<pre>";print_r($ajoutArticle);
 echo "<pre>";print_r($listeArticle);die;

?>
Palerm024
Auteur
Réponse acceptée

Et c'est bon j'ai trouver !!!
Bon ce n'est pas organisé mais le système est opérationnelle :

ControlMonArticle :

public static function add(Article $article)
    {
            if (isset($_POST'titre'])) {

            echo"salut la fonction";
            $_POST'titre']=$article->getTitre();
            }
            $connexion = Connexion::getInstance();
            $sql =$connexion->prepare("INSERT INTO article(`titre`) VALUES ('".$article->getTitre()."')");
            $sql->execute();
            return $article;
    }

et dans l'ajout à la base :

$article = new Article();
$ajoutArticle = ManageArticle::add(new Article($_POST'titre']));
echo "<pre>";print_r($ajoutArticle);

super ça marche mais le problème est que le titre on le marque en dur, comment faire pour récupérer alors le champs titre du formulaire alors ?

Pour ton bien, et pour que tu avances, je te laisse chercher sur google comment récupérer des informations d'un formulaire.

Oui je sais avec la méthode post, il n'y a pas de souci la dessus, alors je vais regarder ou envoyer le champs titre du formulaire.

je reviendrais vers vous lorsque j'aurais trouver

Bien joué !

rebonjour à tous Après plusieurs jours de recherche et de test, je viens de retravailler mon formulaire en MVC: Voici mon Modele: membre.class.php** [code]<?php class membre {

private $id_membre;
private $nom_membre;
private $prenom_membre;
private $date_naissance;
private $cp_membre;
private $adresse_membre;
private $ville_membre;
private $pays_membre;
private $tel_membre;
private $email_membre;

public function __construct(array $params)
{
    foreach($params as $k => $p) { $kTmp = explode('\_', $k); foreach($kTmp as &$k2) { $k2 = ucfirst($k2); } $methodName = 'set' . implode('', $kTmp); if(method\_exists($this, $methodName)) { $this->$methodName($p); } } } public function getId\_membre() { return $this->id\_membre; } public function getNom\_membre() { return $this->nom\_membre; } public function getPrenom\_membre() { return $this->prenom\_membre; } public function getDate\_naissance() { return $this->date\_naissance; } public function getCp\_membre() { return $this->cp\_membre; } public function getAdresse\_membre() { return $this->adresse\_membre; } public function getVille\_membre() { return $this->ville\_membre; } public function getPays\_membre() { return $this->pays\_membre; } public function getTel\_membre() { return $this->tel\_membre; } public function getEmail\_membre() { return $this->email\_membre; } public function setId\_membre($id\_membre) { $this->id\_membre = $id\_membre; } public function setNom\_membre($nom\_membre) { $this->nom\_membre = $nom\_membre; } public function setPrenom\_membre($prenom\_membre) { $this->prenom\_membre = $prenom\_membre; } public function setDate\_naissance($date\_naissance) { $this->date\_naissance = $date\_naissance; } public function setCp\_membre($cp\_membre) { $this->cp\_membre = $cp\_membre; } public function setAdresse\_membre($adresse\_membre) { $this->adresse\_membre = $adresse\_membre; } public function setVille\_membre($ville\_membre) { $this->ville\_membre = $ville\_membre; } public function setPays\_membre($pays\_membre) { $this->pays\_membre = $pays\_membre; } public function setTel\_membre($tel\_membre) { $this->tel\_membre = $tel\_membre; } public function setEmail\_membre($email\_membre) { $this->email\_membre = $email\_membre; } public function getReqParams() { return array('nom\_membre' => $this->getNom\_membre(), 'prenom\_membre' => $this->getPrenom\_membre(), 'date\_naissance' => $this->getDate\_naissance(), 'code\_postal' => $this->getCp\_membre(), 'adresse' => $this->getAdresse\_membre(), 'ville' => $this->getVille\_membre(), 'pays' => $this->getPays\_membre(), 'tel' => $this->getTel\_membre(), 'email' => $this->getEmail\_membre(), ); } } [/code] Voici Mon controller : add.php\*\* [code]<?php require_once 'connect.php';

require_once '../model/membre.class.php';
require_once 'loadingView.php';

class Add {

public static function addMembre($membre)
{
$connexion = Connexion::getInstance();

if(!is_array($membre))
{
    $membre = array($membre);
}

$sql = $connexion->query('INSERT INTO ps\_membre(id\_membre,nom\_membre,prenom\_membre,date\_naissance,cp\_membre,adresse\_membre,ville\_membre,pays\_membre,tel\_membre`,email\_membre) VALUE(?,?,?,?,?,?,?,?,?)'); $sql->execute($membre); foreach($membre as $member) { $params = $member->getReqParams(); echo"

mon ";print_r($params);

        foreach($params as $k => $v)
        {
                    echo"";echo print_r($k);
                    $sql->bindParam(':' . $k,$v);    
        }

    }

            return $sql;

                }
}

        $membre = new membre(array(
            'nom_membre' => $_POST['nom'],
            'prenom_membre' => $_POST['prenom'],
            'date_naissance' => $_POST['date_naissance'],
            'cp_membre' => $_POST['code_postal'],
            'adresse_membre' => $_POST['adresse'],
            'ville_membre' => $_POST['ville'],
            'pays_membre' => $_POST['pays'],
            'tel_membre' => $_POST['tel'],
            'email_membre' => $_POST['email'],

        ));
        echo $membre->getNom_membre();
        echo $membre->getPrenom_membre();
        echo $membre->getEmail_membre();

        echo"";print_r($membre);

        Add::addMembre($membre);

        [/code]

Et ma vue : un simple formulaire**

[code]

<form id="register-form" class="form" action="../controller/addClass.php" method="POST">
<legend>DEPOT D'ANNONCE</legend>
<hr>
<div class="body">
<!-- ENTREPRISE -->
<label for="name">NOM</label>
<input name="nom" class="input-huge" type="text">
<!-- TITRE DE LA MISSION -->
<label for="surname">PRENOM</label>
<input name="prenom" class="input-huge" type="text">
<!-- VILLE DE LA MISSION -->
<label for="surname">DATE NAISSANCE</label>
<input name="date_naissance" class="input-huge" type="text">
<!-- DESCRIPTION DE L'OFFRE -->
<label for="surname">CODE POSTALE</label>
<input name="code_postal" class="input-huge" type="text">
<!-- DESCRIPTION DE L'OFFRE -->
<label for="surname">ADRESSE</label>
<input name="adresse" class="input-huge" type="text">
<!-- DESCRIPTION DE L'OFFRE -->
<label for="surname">VILLE</label>
<input name="ville" class="input-huge" type="text">
<!-- DESCRIPTION DE L'OFFRE -->
<label for="surname">PAYS</label>
<input name="pays" class="input-huge" type="text">
<!-- DESCRIPTION DE L'OFFRE -->
<label for="surname">TELEPHONE</label>
<input name="tel" class="input-huge" type="text">

                <label for="surname">EMAIL</label>
                <input name="email" class="input-huge" type="text">
            </div>

        <div class="footer">
                <button type="submit" name="submit" class="btn btn-success">Enregistrer</button>
        </div>
    </form>[/code] Mon problème est le suivant : j'ai une erreur dans mon controller concernant mon execute() [code]$sql->execute($membre);[/code] l'erreur est : Catchable fatal error: Object of class membre could not be converted to string in C:\wamp\www\lorraine\_call\_admin\LorraineCallAdmin\controller\addClass.php on line 36\*\* Je ne sais pas, malgrès plusieur solutions sur le net, comment résoudre mon problème