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

PHP & Base de données Discussion :

Requête PHP [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2020
    Messages : 15
    Par défaut Requête PHP
    Bonsoir,
    ça fait 2h que je suis sur une requête sql avec PHP. Elle s'exécute sans erreur mais n'insère pas les donnée du formulaire. J'ai utilisé quasiment la même fonction sur un autre projet et ça marche très bien. J'ai besoin d'aide.
    Voici mon code (Désolé si c'est pas ici on met le code c'est mon premier post sur ce forum)

    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
       public function create(User $user)
        {
     
           $req = $this->bd->prepare('INSERT INTO users (email, firstName, lastName, adress, diet, country, allergy, clothingSize, tel)
                  VALUES (:email, :firstName, :lastName, :adress, :diet, :country, :allergy, :clothingSize, :telNumber)');
     
     
     
            $req->bindParam(':email', $email);
            $req->bindParam(':firstName', $firstName);
            $req->bindParam(':lastName', $lastName);
            $req->bindParam(':adress', $adress);
            $req->bindParam(':diet', $diet);
            $req->bindParam(':country', $country);
            $req->bindParam(':allergy', $allergy);
            $req->bindParam(':clothingSize', $clothingSize);
            $req->bindParam(':telNumber', $telNumber);
     
     
            $email = $user->getEmail();
            echo "Email : ".$email;
            $firstName = $user->getFirstName();
            $lastName = $user->getLastName();
            $adress = $user->getAdress();
            $diet = $user->getDiet();
            $country = $user->getCountry();
            $allergy = $user->getAllergy();
            $clothingSize = $user->getClothingSize();
            $telNumber = $user->getTelNumber();
     
           $req->execute();
     
           echo "Apres execution ";
        }

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    salut,

    à ce stade dans ton code et plus précisément dans ce bloc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $req->bindParam(':email', $email);
    $req->bindParam(':firstName', $firstName);
    $req->bindParam(':lastName', $lastName);
    $req->bindParam(':adress', $adress);
    $req->bindParam(':diet', $diet);
    $req->bindParam(':country', $country);
    $req->bindParam(':allergy', $allergy);
    $req->bindParam(':clothingSize', $clothingSize);
    $req->bindParam(':telNumber', $telNumber);
    d'où proviennent tes variables $email, $fristName, etc.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    @rawsrc
    Avec bindParam(), ce sont des variables par référence.
    Les valeurs sont données après.
    Contrairement à PDOStatement::bindValue(), la variable est liée en tant que référence et ne sera évaluée qu'au moment de l'appel à la fonction PDOStatement::execute().
    Ceci dit, ici, on a meilleur jeu à utiliser bindValue() :
    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
    public function create(User $user)
        {
     
           $req = $this->bd->prepare('INSERT INTO users (email, firstName, lastName, adress, diet, country, allergy, clothingSize, tel)
                  VALUES (:email, :firstName, :lastName, :adress, :diet, :country, :allergy, :clothingSize, :telNumber)');
     
            $req->bindValue(':email', $user->getEmail());
            $req->bindValue(':firstName', $user->getFirstName());
            $req->bindValue(':lastName', $user->getLastName());
            $req->bindValue(':adress', $user->getAdress());
            $req->bindValue(':diet', $user->getDiet());
            $req->bindValue(':country', $user->getCountry());
            $req->bindValue(':allergy', $user->getAllergy());
            $req->bindValue(':clothingSize', $user->getClothingSize());
            $req->bindValue(':telNumber', $user->getTelNumber());
     
           $req->execute();
     
           echo "Apres execution ";
        }
    Quant au fait que ça n'enregistre pas... je mettrais :
    - un try catch
    - et lastInsertId() en return de la fonction
    Dernière modification par Invité ; 02/02/2020 à 11h06.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2020
    Messages : 15
    Par défaut Avec binParam...
    J'ai utilisé le bindValue comme tu me l'as suggéré mais c'est toujours la même chose.

    voici mon code complet qui concerne l'

    La classe EventStorage qui exécute la réquête:
    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
    <?php
     
    class EventStorage
    {
        private $bd;
        public function __construct($bd)
         {
           $this->bd = $bd;
         }
     
     
        public function create(User $user)
        {
     
           $req = $this->bd->prepare('INSERT INTO users (email, firstName, lastName, adress, diet, country, allergy, clothingSize, tel)
                  VALUES (:email, :firstName, :lastName, :adress, :diet, :country, :allergy, :clothingSize, :telNumber)');
     
     
    $email = $user->getEmail();
    echo "Email : ".$email;
    $firstName = $user->getFirstName();
    $lastName = $user->getLastName();
    $adress = $user->getAdress();
    $diet = $user->getDiet();
    $country = $user->getCountry();
    $allergy = $user->getAllergy();
    $clothingSize = $user->getClothingSize();
    $telNumber = $user->getTelNumber();
     
      $req->bindValue(':email', $email);
      $req->bindValue(':firstName', $firstName);
      $req->bindValue(':lastName', $lastName);
      $req->bindValue(':adress', $adress);
      $req->bindValue(':diet', $diet);
      $req->bindValue(':country', $country);
      $req->bindValue(':allergy', $allergy);
      $req->bindValue(':clothingSize', $clothingSize);
      $req->bindValue(':telNumber', $telNumber);
     
     
     
           $req->execute();
     
           echo "Apres execution ";
     
        }
     
    ?>
    La classe UserBuilder
    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
    <?php
    		class UserBuilder{
    			private $data;
    			private $error;
    			const LN_REF = "firstName";
    			const FN_REF = "lastName";
    			const ADRESS_REF = "adress";
                const DIET_REF = "diet";
                const COUNTRY_REF = "country";
                const ALLERGY_REF = "allergy";
                const SIZE_REF = "clothingSize";
                const TEL_REF = "telNumber";
                const MAIL_REF = "email";
                const LOGIN_REF = "login";
              //  const ID_REF = "identifiant";
                const PICTURE_REF = "picture";
                public function __construct($d){
    				$this->data = $d;
    				$this->error = null;
                }
                public function createUser(){
                    $user = new User(htmlspecialchars($this->data[self::FN_REF]), htmlspecialchars($this->data[self::LN_REF]),htmlspecialchars($this->data[self::ADRESS_REF]),
                    htmlspecialchars($this->data[self::DIET_REF]),htmlspecialchars($this->data[self::COUNTRY_REF]),htmlspecialchars($this->data[self::ALLERGY_REF]),
                    htmlspecialchars($this->data[self::SIZE_REF]),htmlspecialchars($this->data[self::TEL_REF]), htmlspecialchars($this->data[self::MAIL_REF]) ,null);
                       return $user;
                }
                public function getData(){
                    return $this->data;
                }
                public function isValid(){
                     if(($this->data[self::LN_REF]!="") && ($this->data[self::FN_REF]!="") && ($this->data[self::ADRESS_REF]!="") && ($this->data[self::DIET_REF]!="") && ($this->data[self::COUNTRY_REF]!="") && ($this->data[self::SIZE_REF]!="") && ($this->data[self::TEL_REF]!="") && ($this->data[self::MAIL_REF]!="")){
                            $this->error=null;
                  }else{
                    if($this->data[self::LN_REF]==""){
                      $this->error .= "Le champs nom doit être rempli ";
                    }
                    if($this->data[self::FN_REF]==""){
                        $this->error .= "Le champs prenom doit être rempli ";
                      }
                      if($this->data[self::ADRESS_REF]==""){
                        $this->error .= "Le champs adresse doit être rempli ";
                      }
                      if($this->data[self::COUNTRY_REF]==""){
                        $this->error .= "Le champs pays doit être rempli ";
                      }
                      if($this->data[self::ALLERGY_REF]==""){
                        $this->error .= "Le champs allergie doit être rempli ";
                      }
                      if($this->data[self::SIZE_REF]==""){
                        $this->error .= "Le champs taille vetement doit être rempli ";
                      }
                      if($this->data[self::TEL_REF]==""){
                        $this->error .= "Le champs telephone doit être rempli ";
                      }
                      if($this->data[self::MAIL_REF]==""){
                        $this->error .= "Le champs e-mail doit être rempli ";
                      }
                  }
               }
              public function getError(){
                  return $this->error;
              }
          }
       ?>
    La classe de la vue :
    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
    <?php
     
    require_once("Router.php");
    require_once ('model/User.php');
    require_once ('model/UserBuilder.php');
     
    class View {
     
    	protected $router;
    	protected $title;
        protected $content;
        private $menu;
    	public function __construct(Router $router) {
    		$this->router = $router;
    		$this->title = null ;
    		$this->content = null ;
    	} 
     
    	public  function makeUserFormPage(UserBuilder $ub)
    	{
    		$form = '<form action="'.$this->router->getUserForm().'" method = "POST" >';
    		$form.='<label>  Nom <input type="text" name ="'.UserBuilder::LN_REF.'" value="'.$ub->getData()[UserBuilder::LN_REF].'"  > </label> <br>';
    		$form.='<label>  Prenom<input type="text" name ="'.UserBuilder::FN_REF.'"value="'.$ub->getData()[UserBuilder::FN_REF].'" > </label> <br>';
    		$form.='<label>  Email<input type="mail" name ="'.UserBuilder::MAIL_REF.'"value="'.$ub->getData()[UserBuilder::MAIL_REF].'" > </label> <br>';
    		$form.='<label>  Pays <input type="mail" name ="'.UserBuilder::COUNTRY_REF.'" value="'.$ub->getData()[UserBuilder::COUNTRY_REF].'" > </label> <br>';
    		$form.='<label>  Adresse <input type="text" name ="'.UserBuilder::ADRESS_REF.'" value="'.$ub->getData()[UserBuilder::ADRESS_REF].' "> </label> <br>';
    		$form.='<label>  Alimentation (particulière) <input type="mail" name ="'.UserBuilder::DIET_REF.'" value="'.$ub->getData()[UserBuilder::DIET_REF].'" > </label> <br>';
    		$form.= '<label>  Allergies <input type="text" name ="'.UserBuilder::ALLERGY_REF.'"value="'.$ub->getData()[UserBuilder::ALLERGY_REF].'" > </label> <br>';
     
    		$form.= '<label>  Tailles Vêtements <select name ="'.UserBuilder::SIZE_REF.'" value="'.$ub->getData()[UserBuilder::SIZE_REF].'">
    														<option>S</option>
    														<option>M</option>
    														<option>L</option>
    														<option>Xl</option>
    														<option>XXl</option>
    														</select>
    		 </label> <br>';
    		$form.='<label>  Téléphone <input type="tel" pattern="[0-9]{2} [0-9]{2} [0-9]{2} [0-9]{2} [0-9]{2}" name = "'.UserBuilder::TEL_REF.'" value="'.$ub->getData()[UserBuilder::TEL_REF].'"> </label> <br>';
    		/*$form.='<label>  Régime <select name regime>
    														<option>test1</option>
    														<option>test1</option>
    														<option>test1</option>
    														<option>test1</option>
    														</select>
    		 </label> <br>';*/
     
     
     
    		 $form.='<input type="submit"  value = "soumettre"  name = "soumettre" >';
     
     
    		$form.='</form>';
        $this->title = "formulaire";
    		$this->content = $form;
     
    			}
     
     
    }
    ?>
    Le controleur :
    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
    <?php
     
     
    require_once ('view/View.php');
    require_once ('model/EventStorage.php');
    /**
     *
     */
    class Controller
    {
      private $view;
      private $eventStorage;
     
     
      function __construct(View $view, EventStorage $evS)
      {
            $this->view = $view;
            $this->eventStorage = $evS;
      }
     
     
        public function saveUser(UserBuilder $userBuilder)
        {
          $userBuilder->isValid();
     
          if ($userBuilder->getError() === null) {
     
                $user = $userBuilder->createUser();
                //var_export($user);
               $this->eventStorage->create($user);
     
                //$this->eventStorage->requeteTest($user);
          }
          else {
              //var_dump($userBuilder->getData())
             // var_dump($_POST);
            $this->view->makeUserFormPage($userBuilder);
     
          }
        }
     
    }
     
     ?>
    La classe du routeur:
    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
    <?php
        require_once("model/Admin.php");
        require_once("model/User.php");
        require_once("model/Participant.php");
        require_once("model/Sponsor.php");
        require_once("view/View.php");
        require_once 'model/UserBuilder.php';
        require_once ('control/Controller.php');
     
          class Router{
     
            public function main($bd){
     
              $tabVide = array('firstName' =>"" ,'lastName' =>"" ,'adress' =>"",'diet' =>"",'country' =>"",'allergy' =>"",'clothingSize' =>"",'telNumber' =>"",'email' =>"");
               $userBuilder = new UserBuilder($tabVide);
               $view = new View($this);
               $eventStorage = new EventStorage($bd);
               $controller = new Controller($view, $eventStorage);
          if(key_exists('action', $_GET)){
           switch ($_GET['action']) {
              case "validationUser":
                    $userB = new UserBuilder($_POST);
                    $controller->saveUser($userB);
                    echo "Apres insertion dans le Router";
                break;
              default:
                $view->makeUserFormPage($userBuilder);
                break;
            }
          }
               $view->render();
     
            }
     
            public function getUserForm()
            {
               return "index.php?action=validationUser";
            }
     
        }
     ?>

  5. #5
    Invité
    Invité(e)
    Par défaut
    Super, il ne manque plus que ton numéro de carte bancaire et la couleur de ton slip...

    1- Merci d'utiliser les balises [CODE][/CODE] : icône # du mini-menu.

    2- tu aurais pu copier-coller mon code...
    Ça n'a aucun intérêt de créer des variables intermédiaires.

    Et je ne vois pas trace de try catch :ça permettrait de savoir si la requête est correctement exécutée.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2020
    Messages : 15
    Par défaut
    Bonsoir,
    C'était moi le fautif, la réquête était correcte mais j'avais une contrainte sur la table pour interdire toute insertion sans une valeur pour la clé étrangère (je l'avais oublié).
    Merci pour vos réponse

    jreaux62 la couleur de mon slip est blanche et le numéro de ma carte bancaire est .... j'ai pas de compte bancaire en fait

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2020
    Messages : 15
    Par défaut A ce stade dans ton code
    je définis ces variables juste après les bindParam

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

Discussions similaires

  1. [MySQL] Récuperation de données dans un boucle via une requête PHP
    Par bodysplash007 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/04/2007, 11h39
  2. Requête PHP à partir de flash
    Par Zoons dans le forum Flash
    Réponses: 1
    Dernier message: 20/09/2006, 08h23
  3. [SQL] Aide sur requête PHP - SQL
    Par jrnb58 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 02/09/2006, 12h56
  4. [Conception] Résultat d'une requête PHP dans un tableau avec lien ?
    Par DjMaC dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/04/2006, 20h37
  5. [MySQL] Ma requête php n'effectue pas la modification
    Par leloup84 dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 01/03/2006, 17h18

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