<?php
/**
* Created by PhpStorm.
* User: Adeline
* Date: 16/02/2019
* Time: 00:33
*/
class Assurance {
protected $id;
protected $nom;
protected $codePostal;
protected $email;
protected $ville;
protected $telephone;
protected $pays;
protected $numAssurer;
protected $adresse1;
protected $adresse2;
public function __construct( array $array =[] )
{
$this->hydrate($array);
}
public function getId() {
return $this->id;
}
public function getNom() {
return $this->nom;
}
public function getCodePostal() {
return $this->codePostal;
}
public function getEmail() {
return $this->email;
}
public function getVille() {
return $this->ville;
}
public function getTelephone() {
return $this->telephone;
}
public function getPays() {
return $this->pays;
}
/**
* @return mixed
*/
public function getNumAssurer() {
return $this->numAssurer;
}
/**
* @return mixed
*/
public function getAdresse1() {
return $this->adresse1;
}
/**
* @return mixed
*/
public function getAdresse2() {
return $this->adresse2;
}
public function setId( $id ) {
echo '<br>[debug]Dans "'.__FUNCTION__.'" [/debug]';
$id = (int) $id;
if ($id > 0)
{
$this->id = $id;
}
}
public function setNom( $nom ) {
if (strlen(trim($nom)) > 0)
//strlen = Calcule la taille d'une chaîne
// trim = Supprime les espaces (ou d'autres caractères) en début et fin de chaîne
{
if (strpos($nom,"#") !== false)
// strpos = Cherche la position de la première occurrence dans une chaîne
{
throw new Exception("Le nom ne peut pas avoir de caracteres speciaux");
}
if (preg_match("/[0-9]/", "$nom"))
// preg_match = sert ici pour les cfiffres
{
throw new Exception("Le nom ne peut pas avoir de chiffre");
}
else
{
//echo "la chaîne $nom est correcte";
$this->nom = $nom;
}
}
}
public function setCodePostal( $codePostal ) {
if (preg_match('/[0-9]{5}/',$codePostal))
{
$this->codePostal = $codePostal;
} else {
echo "<br/>Aucun résultat n'a été trouvé.";
}
}
public function setEmail( $email ) {
//1) si la chaine n'est pas vide
if (strlen(trim($email)) == 0) {
//erreur
throw new LengthException("Le mail est vide",100); //code 100 == mail vide
} else {
//pas d'erreur on continue
// if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
// //mail validé
$this->email = $email;
// } else {
// //erreur à gérer
// throw new Exception("Le mail est invalide",101); //code 101 == mail invalide
// }
}
}
public function setVille( $ville ) {
if (strlen(trim($ville)) > 0)
{
$this->ville = $ville;
if (preg_match("/[0-9]/", "$ville"))
{
throw new Exception("La ville ne peut pas avoir de chiffre");
}
}else{
echo "la ville est obligatoire";
}
}
public function setTelephone( $telephone ) {
$this->telephone = $telephone;
}
public function setPays( $pays ) {
if (strlen(trim($pays)) > 0)
{
$this->pays = $pays;
if (preg_match("/[0-9]/", "$pays"))
{
throw new Exception("La ville ne peut pas avoir de chiffre");
}
}else{
echo "le pays est obligatoire";
}
}
/**
* @param mixed $numAssurer
*/
public function setNumAssurer( $numAssurer ) {
$this->numAssurer = $numAssurer;
}
/**
* @param mixed $adresse1
*/
public function setAdresse1( $adresse1 ) {
$this->adresse1 = $adresse1;
}
/**
* @param mixed $adresse2
*/
public function setAdresse2( $adresse2 ) {
$this->adresse2 = $adresse2;
}
protected function hydrate($array){
echo '<br>[debug]Dans "'.__FUNCTION__.'" [/debug]';
foreach ($array as $key => $value) {
$methodName = 'set'.ucfirst($key);
if(method_exists($this, $methodName)){
$this->$methodName($value);
}
}
}
}
<?php
/**
* Created by PhpStorm.
* User: Adeline
* Date: 19/02/2019
* Time: 19:09
*/
class Assurance_habitation extends Assurance {
protected $id;
protected $assurance;
public function __construct( array $data =[] )
{
//appel du constructeur parent puisqu'on est h�rit� de ...
parent::__construct($data);
}
/**
* @return mixed
*/
public function getId() {
return $this->id;
}
/**
* @return mixed
*/
public function getAssurance() {
return $this->assurance;
}
/**
* @param mixed $id_habitation
*/
public function setId( $id ) {
echo '<br>[debug]Dans "'.__FUNCTION__.'" [/debug]';
$id = (int) $id;
if ($id > 0)
{
$this->id_habitation = $id;
}
}
/**
* @param mixed $assurance
*/
public function setAssurance( $assurance ) {
$this->assurance = $assurance;
}
protected function hydrate($array){
echo '<br>[debug]Dans "'.__FUNCTION__.'" [/debug]';
foreach ($array as $key => $value) {
$methodName = 'set'.ucfirst($key);
if(method_exists($this, $methodName)){
$this->$methodName($value);
}
}
}
}
manager :
<?php
class ManagerAssurance extends Manager{
public function __construct( $mode = 'prod' ) {
debug( '<br>[debug]Dans "' . __CLASS__ . "::" . __FUNCTION__ . '" [/debug]', true );
parent::__construct( $mode );
}
public function read( $id ) {
echo '<br>[debug]Dans "' . __FUNCTION__ . '" [/debug]';
$req = $this->db->prepare( 'SELECT * FROM assurance WHERE id =:id' );
$req->bindValue( 'id', $id, PDO::PARAM_INT );
$req->execute();
$array= $req->fetch();
$oAssurance = new assurance( $array );
return $oAssurance;
}
public function add( $data ) {
echo '<br>[debug]Dans "' . __FUNCTION__ . '" [/debug]';
//bloc try/catch pour g�rer les exceptions
//provenant de Employer
try {
$oAssurance = new assurance( $data );
} catch ( LengthException $lengthException ) {
//cas longueur == 0
throw new Exception( $lengthException->GetMessage(), $lengthException->GetCode() );
} catch ( Exception $exception ) {
//autre cas (mais pour nous invalide)
throw new Exception( $exception->GetMessage(), $exception->GetCode() );
}
$req = $this->db->prepare( 'INSERT INTO assurance (nom,codePostal,email,ville,telephone,pays,numAssurer,adresse1,adresse2) VALUES(:nom,:codePostal,:email,:ville,:telephone,:pays,:numAssurer,:adresse1,:adresse2)' );
$req->bindValue( 'nom', $oAssurance->getNom(), PDO::PARAM_STR );
$req->bindValue( 'codePostal', $oAssurance->getCodePostal(), PDO::PARAM_STR );
$req->bindValue( 'email', $oAssurance->getEmail(), PDO::PARAM_STR );
$req->bindValue( 'ville', $oAssurance->getVille(), PDO::PARAM_STR );
$req->bindValue( 'telephone', $oAssurance->getTelephone(), PDO::PARAM_STR );
$req->bindValue( 'pays', $oAssurance->getPays(), PDO::PARAM_STR );
$req->bindValue( 'numAssurer', $oAssurance->getNumAssurer(), PDO::PARAM_STR );
$req->bindValue( 'adresse1', $oAssurance->getAdresse1(), PDO::PARAM_STR );
$req->bindValue( 'adresse2', $oAssurance->getAdresse2(), PDO::PARAM_STR );
$req->execute();
$id = $this->db->lastInsertId();
$oAssurance->setId( $id );
}
public function getAllAssurance() {
$stm = "SELECT * FROM assurance";
//Ceci:
// $stmt = $this->connexion->query($req);
// return $stmt;
//resum� par cela
return $this->db->query( $stm );
}
public function getAssurance( $id ) {
$stm = "SELECT * FROM assurance WHERE id=:id";
//preparation == protection des donn?es ? venir
$stmt = $this->db->prepare( $stm );
//liaison des marqueur :toto aux donnees
$stmt->bindValue( 'id', $id, PDO::PARAM_INT );
//execution de la requete sur le serveur SQL
$stmt->execute();
return $stmt;
}
public function update( $data ) {
echo '<pre>' . print_r( $data, true ) . '</pre>';
echo '<br>[debug]SESSION';
echo '<pre>' . print_r( $data, true ) . '</pre>';
$req = $this->db->prepare( 'UPDATE assurance SET nom=:nom,codePostal=:codePostal,email=:email,ville=:ville,telephone=:telephone,pays=:pays,numAssurer=:numAssurer,adresse1=:adresse1,adresse2=:adresse2 WHERE id =:id' );
$req->bindValue( 'id', $data->getId(), PDO::PARAM_INT );
$req->bindValue( 'nom', $data->getNom(), PDO::PARAM_STR );
$req->bindValue( 'codePostal', $data->getCodePostal(), PDO::PARAM_STR );
$req->bindValue( 'email', $data->getEmail(), PDO::PARAM_STR );
$req->bindValue( 'ville', $data->getVille(), PDO::PARAM_STR );
$req->bindValue( 'telephone', $data->getTelephone(), PDO::PARAM_STR );
$req->bindValue( 'pays', $data->getPays(), PDO::PARAM_STR );
$req->bindValue( 'numAssurer', $data->getNumAssurer(), PDO::PARAM_STR );
$req->bindValue( 'adresse1', $data->getAdresse1(), PDO::PARAM_STR );
$req->bindValue( 'adresse2', $data->getAdresse2(), PDO::PARAM_STR );
if ( ! $req->execute() ) {
echo "<br>[debug] Erreur";
}
}
public function delete( $id ) {
// =>voir getLivre(id) pour modele
$req = "DELETE FROM assurance WHERE id=:id";
$stmt = $this->db->prepare( $req );
$stmt->execute();
if ( $stmt->rowCount() == 1 ) {
echo '[debug]OK 1 ligne inseree';
} else {
echo 'Erreur insertion donnees';
}
}
}
<?php
/**
* Created by PhpStorm.
* User: Adeline
* Date: 21/02/2019
* Time: 14:29
*/
class ManagerAssurance_habitation extends ManagerAssurance {
public function __construct( $mode = 'prod' ) {
debug('<br>[debug]Dans "'.__CLASS__."::".__FUNCTION__.'" [/debug]',true);
parent::__construct( $mode );
}
public function read($id){
echo '<br>[debug]Dans "'.__FUNCTION__.'" [/debug]';
$req = $this->db->prepare('SELECT * FROM Assurance_habitation WHERE id =:id');
$req->bindValue('id', $id, PDO::PARAM_INT);
$req->execute();
$array = $req->fetch();
$oAssurance_habitation = new assurance_habitation($array);
return $oAssurance_habitation;
}
public function add( $data ) {
echo '<br>[debug]Dans "' . __FUNCTION__ . '" [/debug]';
//bloc try/catch pour g�rer les exceptions
//provenant de Employer
try {
$oAssurance_habitation = new assurance_habitation( $data );
} catch ( LengthException $lengthException ) {
//cas longueur == 0
throw new Exception( $lengthException->GetMessage(), $lengthException->GetCode() );
} catch ( Exception $exception ) {
//autre cas (mais pour nous invalide)
throw new Exception( $exception->GetMessage(), $exception->GetCode() );
}
$req = $this->db->prepare( 'INSERT INTO Assurance_habitation (assurance) VALUES(:assurance)' );
$req->bindValue('numAssurer', $oAssurance_habitation->getAssurance(), PDO::PARAM_INT );
$req->execute();
$id = $this->db->lastInsertId();
$oAssurance_habitation->setId( $id );
}
public function getAllHabitation() {
$stm = "SELECT * FROM assurance_habitation";
//Ceci:
// $stmt = $this->connexion->query($req);
// return $stmt;
//resum� par cela
return $this->db->query($stm);
}
public function getHabitation($id) {
$stm = "SELECT * FROM assurance_habitation WHERE id=:id";
//preparation == protection des donn?es ? venir
$stmt = $this->db->prepare($stm);
//liaison des marqueur :toto aux donnees
$stmt->bindValue('id',$id,PDO::PARAM_INT);
//execution de la requete sur le serveur SQL
$stmt->execute();
return $stmt;
}
public function update($data){
echo '<pre>'.print_r($data,true).'</pre>';
echo '<br>[debug]SESSION';
echo '<pre>'.print_r($data,true).'</pre>';
$req = $this->db->prepare('UPDATE assurance_habitation SET assurance=:assurance WHERE id=:id');
$req->bindValue('id', $data->getId(), PDO::PARAM_INT);
$req->bindValue('assurance', $data->getAssurance(), PDO::PARAM_INT );
if (! $req->execute()) {
echo "<br>[debug] Erreur";
}
}
public function delete($id) {
// =>voir getLivre(id) pour modele
$req = "DELETE FROM assurance_habitation WHERE id=:id";
$stmt = $this->db->prepare($req);
$stmt->execute();
if ($stmt->rowCount() == 1) {
echo '[debug]OK 1 ligne inseree';
} else {
echo 'Erreur insertion donnees';
}
}
}
lorsque je remplie mon formulaire et le valide, cela dit qu'il manque une ou plusieurs données
[debug]Dans "ManagerAssurance::__construct" [/debug] [debug]Dans "add" [/debug] [debug]Dans "hydrate" [/debug]SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
( ! )Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\uniscite\code\templates\profil_AssuranceHabitationInscription.php:6) in C:\wamp\www\uniscite\code\templates\profil_AssuranceHabitationInscription.php on line39
Je ne parle pas de ta bdd mais de $_POST['assurance'] qui, si tu n'as aucun input/select/textarea dans ton formulaire ayant pour name="assurance" ne peut que valoir NULL/ne pas exister d'où l'isset qui renvoie faux derrière ...
Ouais mais si tu parles de plusieurs problèmes à la fois et saute du coq à l'âne sans le préciser, on va droit dans le mur.
Le post initial, ton problème était :
> je remplis mon formulaire et le valide, cela dit qu'il manque une ou plusieurs données
Ce qui correspond à ce code :
> echo "il manque une ou plusieurs donnees";
D'où ma réponse qu'il manque un champ dans ton formulaire avec le name assurance
On est bon ?
Pour ton :
> Invalid parameter number: parameter was not defined
Je voudrais bien le message d'erreur complet (avec nom du fichier et ligne !). Tu as un DELETE qui contient un marqueur :id que tu ne bindes jamais et un INSERT où le marqueur est :assurance mais où tu cherches à en binder un qui s'appelle ... numAssurer.
À la ligne 19 de ton premier code, tu mets $_POST['assurance'], sauf que tu n'as aucun élément dans le formulaire correspondant, donc tu tombes forcément sur l'erreur de ta condition.
Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.
( ! )Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\uniscite\code\templates\profil_AssuranceHabitationInscription.php:6) in C:\wamp\www\uniscite\code\templates\profil_AssuranceHabitationInscription.php on line39
> Warning: Cannot modify header information - headers already sent by ...
? Si oui, c'est normal, tu dumpes $_POST avant quand on n'est pas censé "afficher" quoi que ce soit avant une fonction dite d'entête dont fait partie header.
C'est bien beau de mettre du debug partout, mais en production, ça n'aura plus sa place.
1) dans base de donnée, dans assurance_habitation, j'ai :
- id (normal) et assurance : null ... c'est bisare, je n'ai rien d'autre.
dans la table assurance je n'ai rien non plus (nom, adresse ...)
et le sql de la bdd est :
-- Structure de la table `assurance`
--
DROP TABLE IF EXISTS `assurance`;
CREATE TABLE IF NOT EXISTS `assurance` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nom` varchar(50) NOT NULL,
`codePostal` varchar(5) NOT NULL,
`email` varchar(500) NOT NULL,
`ville` varchar(500) NOT NULL,
`telephone` varchar(500) NOT NULL,
`pays` varchar(500) NOT NULL,
`numAssurer` varchar(50) NOT NULL,
`adresse1` varchar(500) NOT NULL,
`adresse2` varchar(500) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Structure de la table `assurance_habitation`
--
DROP TABLE IF EXISTS `assurance_habitation`;
CREATE TABLE IF NOT EXISTS `assurance_habitation` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`assurance` int(11) DEFAULT '3',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2) comment faire pour qu'une fois le formulaire compléter, cela redirige automatiquement vers la page souhaité ?
1) On la trouve où la valeur pour assurance_habitation.assurance si elle ne fait pas partie des champs du formulaire ? Parce que dans le code de départ c'était : $oManagerAssurance_habitation->add( $_POST );
2) je ne vois pas le problème, c'est toujours header('Location: ...') comme tu l'as déjà fait
assurance a toutes les infos de base (nom, adresse) ...
assurance_habitation (tout comme assurance_vie, assurance_voiture) est une "caractéristique" (si on peut dire cela ainsi). elle reprends les champs d'assurance et permet de savoir qu'il sagit de l'habitation.
C'est plus des clients quoi ? Pourquoi une table différente par type d'assurance au lieu d'une pour les décrire et une (contrats) pour faire le lien entre les deux ?
Il n'y a même pas de clé étrangère pour faire un quelconque lien. Un tour préalable par la case MCD ?
Je ne sais pas si c'est une bonne idée cette POO, quand il va falloir lier des tables, ça va vite montrer ses limites.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Merci à tous. Vous pouvez me retrouver ici :
🌐 Visitez mon profil sur Comeup
🚀 Découvrez BeFreelancr
📱 Retrouvez-moi sur LinkedIn
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Merci à tous. Vous pouvez me retrouver ici :
🌐 Visitez mon profil sur Comeup
🚀 Découvrez BeFreelancr
📱 Retrouvez-moi sur LinkedIn
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Merci à tous. Vous pouvez me retrouver ici :
🌐 Visitez mon profil sur Comeup
🚀 Découvrez BeFreelancr
📱 Retrouvez-moi sur LinkedIn
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.
Merci à tous. Vous pouvez me retrouver ici :
🌐 Visitez mon profil sur Comeup
🚀 Découvrez BeFreelancr
📱 Retrouvez-moi sur LinkedIn
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Merci à tous. Vous pouvez me retrouver ici :
🌐 Visitez mon profil sur Comeup
🚀 Découvrez BeFreelancr
📱 Retrouvez-moi sur LinkedIn
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Merci à tous. Vous pouvez me retrouver ici :
🌐 Visitez mon profil sur Comeup
🚀 Découvrez BeFreelancr
📱 Retrouvez-moi sur LinkedIn
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Merci à tous. Vous pouvez me retrouver ici :
🌐 Visitez mon profil sur Comeup
🚀 Découvrez BeFreelancr
📱 Retrouvez-moi sur LinkedIn
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Merci à tous. Vous pouvez me retrouver ici :
🌐 Visitez mon profil sur Comeup
🚀 Découvrez BeFreelancr
📱 Retrouvez-moi sur LinkedIn
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Merci à tous. Vous pouvez me retrouver ici :
🌐 Visitez mon profil sur Comeup
🚀 Découvrez BeFreelancr
📱 Retrouvez-moi sur LinkedIn
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Merci à tous. Vous pouvez me retrouver ici :
🌐 Visitez mon profil sur Comeup
🚀 Découvrez BeFreelancr
📱 Retrouvez-moi sur LinkedIn