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
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;
?>
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
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