Problème au niveau de ma requête SQL( INSERT)

Ce topic a été résolu
JxSDev

JxSDev Le 19 avril 2016 à 13:33 (Édité le 25 janvier 2019 à 17:50)

Salut tout le monde  ! 
J'ai un tout petit problème que j'ai pas pu résoudre car je n'ai aucune idée d’où ça vient 
Explications : 
J'ai créé un formulaire de demande de prix que l'administrateur le recevra dans son email , et j'ai mis une requête pour stocker toutes les données saisies après l'envoi de la demande.
l'email s'envoi avec le contenu et tout va à merveille ! SAUF QUE  ! les données ne sont pas stockées dans la table après l'envoi  donc il doit y avoir un problème au niveau de ma requête que j'ai du mal à identifier >______<' ! 
donc voila je vous prie de m'aider sur ce coup là.. 
la requête : 
App::getDatabase();
   App::getAuth()->restrict();
    
 if(!empty($_POST) && !empty($_POST['qtePdt']) && !empty($_POST['namePdt']) && !empty($_POST['refPdt'])
 && !empty($_POST['suggestedPrice']) && !empty($_POST['message']) && isset($_POST['fileUpload'])){
   $db = App::getDatabase();
   App::getAuth()->estimate($db, $_POST['qtePdt'],$_POST['namePdt'],$_POST['refPdt'], $_POST['suggestedPrice'], $_POST['message'], $_POST['fileUpload']);}
le formulaire : 
<form action="post_contact.php" method="post" class="contact-form-box" enctype="multipart/form-data">
        <?php $form = new Form(isset($_SESSION['inputs']) ? $_SESSION['inputs'] : []); ?>
          <div class="row">  
          <div class="col-md-6">
         <?= $form->text('qtePdt','Quantité');?>          
         <?= $form->text('namePdt','Produit');?>
         <?= $form->text('refPdt','Référence');?>
         <?= $form->text('suggestedPrice','Prix proposé');?> 
 
  <div class="form-group">
  <label for="fileUpload">Fichier</label>
  <input type="file" name="fileUpload" class="form-control" id="fileUpload">
  </div>
        </div> 
       <div class="col-md-6">
         <?= $form->textarea('message','Votre message');?> </div>
       <div align="center"> <?= $form->submit('Demander un devis'); ?></div>
         </div>
    </form>
et ma function query :
public function estimate($db, $qtePdt, $namePdt, $refPdt, $suggestedPrice, $message, $fileUpload){
          $db->query("INSERT INTO estimate SET qtePdt = ?, namePdt = ?, refPdt = ?, suggestedPrice = ?, message = ?, fileUpload = ?",[
              $qtePdt,
              $namePdt,
              $refPdt,
              $suggestedPrice,
              $message,
              $fileUpload
              ]);
      }
Ai-je fais une grosse erreur   ? 
Merci d'avance~ 
Dwardower

Dwardower Le 19 avril 2016 à 14:38

Je ne crois pas que la query soit un moyen adapté pour insérer des données dans une base de donnée
public function estimate($db, $qtePdt, $namePdt, $refPdt, $suggestedPrice, $message, $fileUpload){
 $requete = $db->prepare("INSERT INTO estimate (qtePdt, namePdt, refPdt, suggestedPrice, message, fileUpload) VALUES(?,?,?,?,?,?)");
 $requete->execute(array($qtePdt, $namePdt, $refPdt, $suggestedPrice, $message, $fileUpload));
}
Un bon vieux pdo bien classique suffit largement 😉
JxSDev

JxSDev Le 19 avril 2016 à 15:29

voila je l'ai remplacé mais ça donne le même résultat , oh  god why ..T_T
Dwardower

Dwardower Le 19 avril 2016 à 15:34 (Édité le 19 avril 2016 à 15:36)

App::getAuth()->estimate($db, $_POST['qtePdt'],$_POST['namePdt'],$_POST['refPdt'], $_POST['suggestedPrice'], $_POST['message'], $_POST['fileUpload']);
Essai ça :
App::getAuth()->estimate($db, $_POST['qtePdt'],$_POST['namePdt'],$_POST['refPdt'], $_POST['suggestedPrice'], $_POST['message'], $_FILES['fileUpload']);}

J'imagine que ton formulaire doit être un fichier donc le $_POST sera null et empechera l'écriture des données 😉
C'est pour cela que le $_FILES lui renverra le nom du fichier
JxSDev

JxSDev Le 19 avril 2016 à 15:38 (Édité le 19 avril 2016 à 15:39)

ah ouii ouii je l'ai bien changé ^^ mais c'etais pareil xD 
Dwardower

Dwardower Le 19 avril 2016 à 15:39

La dernière valeur appelée dans la fonction, je l'ai passé de $_POST à $_FILES 😉
JxSDev

JxSDev Le 19 avril 2016 à 15:46 (Édité le 19 avril 2016 à 15:48)

oui je l'ai remarqué ^^ ! et je l'ai déjà fais avant que tu me le dises 
sauf que le problème n'est pas toujours résolu ! au fait, si ça pourra nous aider a trouver l'erreur , mon fichier devis.php inclut un autre fichier que j'ai appelé post_contact.php qui contient quelques instructions de contrôle nécessaires pour l'envoi de la demande 
<?php
require 'inc/bootstrap.php';
require '_inc.php';
$errors = [];
    if(!array_key_exists('qtePdt', $_POST) || $_POST['qtePdt'] == ''){
    $errors['inputQte'] = "Vous n'avez pas renseigné la quantité demandée";
    }
    if(!array_key_exists('namePdt', $_POST) || $_POST['namePdt'] == ''){
        $errors['inputPdt'] = "Vous n'avez pas renseigné le nom du produit";
    }
    if(!array_key_exists('refPdt', $_POST) || $_POST['refPdt'] == ''){
    $errors['refPdt'] = "Vous n'avez pas renseigné la référence du produit.";
    }
    if(!array_key_exists('message', $_POST) || $_POST['message'] == ''){
        $errors['message'] = "Vous n'avez pas renseigné votre message. ";
    }
 // définition de l'espace destiné à recevoir les fichiers
    $repository = $_SERVER["DOCUMENT_ROOT"];
    $extensionsAutorisees = array(".jpeg", ".jpg", ".pdf", ".txt");
    // si un fichier a bien été transféré
    if (is_uploaded_file($_FILES["fileUpload"]["tmp_name"])) {
        // recupération de l'extension du fichier
        $nomfichier = $_FILES["fileUpload"]["name"];
        $extension = substr($nomfichier, strrpos($nomfichier, "."));
        // Contrôle de l'extension du fichier
        if (!(in_array($extension, $extensionsAutorisees))) {
            $errors['message'] = "Votre fichier n'a pas l'extension attendue.";
        }
    }
    
    if(!empty($errors)){
        $_SESSION['errors'] = $errors;
        $_SESSION['inputs'] = $_POST;
       App::redirect('devis.php');
    }else{
        $_SESSI0N['success'] = 1;
        $recipients = array(
        "aycj@gmail.com" , 
        "aycs@gmail.com",
        "contact@toupackgroup.com"
        );
        foreach($recipients as $recipient) {
        $headers = 'FROM: site@local.dev';
        $message = $_POST['message'];
        $to      = $recipient;
        mail($to,'Demande de devis',$message, $headers);}
        Session::getInstance()->setFlash('success', "Votre demande a bien été envoyée. Notre équipe vous répondra dans les plus brefs délais.");
        App::redirect('devis.php'); 
    }

je ne sais pas mais , je me suis dis que peut-être je dois mettre la requete dans ce fichier >< désolé je e sens un peu perdue là ^^'
Dwardower

Dwardower Le 19 avril 2016 à 15:55

sur la page à laquelle tu vas accéder via l'url, tu vas y rajouter ce bout de code à la première ligne :
ini_set('display_errors','on');
JxSDev

JxSDev Le 19 avril 2016 à 16:08

comme ça ?
<?php
ini_set('display_errors','on');
require 'inc/bootstrap.php';
   App::getDatabase();
   App::getAuth()->restrict();
ET après ?
(j'ai  fais un test mais aucune erreur ne s affiche ^^')
Dwardower

Dwardower Le 19 avril 2016 à 16:51

Oui c'est correct, fait un echo 'test'; dans ta fonction pour voir si elle est bien appelée ^^
JxSDev

JxSDev Le 19 avril 2016 à 17:13

voila l'echo "test" ne s affiche pas ^^ donc cela veut dire qu'elle n'est pas exécutée ?
Dwardower

Dwardower Le 19 avril 2016 à 17:23 (Édité le 19 avril 2016 à 17:23)

exactement 😉
La fonction n'est pas demandée et par conséquence, ne s'exécute pas
JxSDev

JxSDev Le 19 avril 2016 à 17:28

je fais quoi alors ? any suggestions ? ^^
Dwardower

Dwardower Le 19 avril 2016 à 17:41

tu peux enlever ce code qui doit gêner qui est devant la fonction 😉
App::getAuth()->
JxSDev

JxSDev Le 19 avril 2016 à 21:20

App::getAuth()-> elle appelle juste notre fonction pk causera t-elle de problèmes alors? ^^
JxSDev

JxSDev Le 19 avril 2016 à 22:05

EEEET c'est bon je l'ai réglé ! c'etait a cause de mon action="post_contact.php" qui, avec l'envoi du mail a bloqué ma requête, donc j'ai mis tout le control dans la meme page voila en plus j'i tout changé en creant de nouvelles fonctions xD 
<?php
ini_set('display_errors','on');
require 'inc/bootstrap.php';
   App::getAuth()->restrict();
   if(!empty($_POST)){
  $errors = array();
  $db = App::getDatabase();
  $validator = new Validator($_POST);
  $validator->isThere('qtePdt', "Vous n'avez pas renseigné la quantité demandée");
  $validator->isThere('namePdt', "Vous n'avez pas renseigné le nom du produit");
  $validator->isThere('refPdt', "Vous n'avez pas renseigné la référence du produit");
  $validator->isThere('suggestedPrice', "Vous n'avez pas mis votre prix");
  $validator->isThere('message', "Vous n'avez pas renseigné votre message");
  if($validator->isValid()){
    App::getAuth()->estimate($db, $_POST['qtePdt'],$_POST['namePdt'],$_POST['refPdt'], $_POST['suggestedPrice'], $_POST['message'], $_FILES['fileUpload']);
     $_SESSI0N['success'] = 1;
        $recipients = array(
        "aycjihen@gmail.com" , 
        "aycskander@gmail.com",
        "contact@toupackgroup.com"
        );
        foreach($recipients as $recipient) {
        $headers = 'FROM: site@local.dev';
        $message = $_POST['message'];
        $to      = $recipient;
        mail($to,'Demande de devis',$message, $headers);}
    Session::getInstance()->setFlash('success', "Votre demande a ete bien envoyee");
    App::redirect('devis.php'); 
  }else {
    $errors = $validator->getErrors();
  }
  }
require 'inc/header2.php'; ?>
<?php 
 if(!empty($errors)): ?>
  <div class="alert alert-danger">
    <p> Vous n'avez pas rempli le formulaire correctement</p>
    <ul>
      <?php  foreach($errors as $error): ?>
        <li><?= $error; ?></li>
      <?php endforeach; ?>
    </ul>
  </div>
<?php endif; ?>
<head>
</head>
<body>
<h3 align="center"> Demander un devis </h3>
<p align="center"> <strong> Il vous suffit de remplir le formulaire ci-dessous pour recevoir gratuitement votre devis en 24/48h.</strong></p><br>
  <div class="container" align="">
          <?php
          if(array_key_exists('errors', $_SESSION)): ?>
            <div  class="alert alert-danger">
                <?= implode('<br>', $_SESSION['errors']); ?>
            </div>
          <?php  endif; ?> <!-- comme ça l'erreur ne  s'affiche qu'une seule fois-->
    <form action="" method="post" class="contact-form-box" enctype="multipart/form-data">
        <?php $form = new Form(isset($_SESSION['inputs']) ? $_SESSION['inputs'] : []); ?>
          <div class="row">  
          <div class="col-md-6">
         <?= $form->text('qtePdt','Quantité');?>          
         <?= $form->text('namePdt','Produit');?>
         <?= $form->text('refPdt','Référence');?>
         <?= $form->text('suggestedPrice','Prix proposé');?> 
 
  <div class="form-group">
  <label for="fileUpload">Fichier</label>
  <input type="file" name="fileUpload" class="form-control" id="fileUpload">
  </div>
        </div> 
       <div class="col-md-6">
         <?= $form->textarea('message','Votre message');?> </div>
       <div align="center"> <?= $form->submit('Demander un devis'); ?></div>
         </div>
    </form>
  </div>
 
    <?php
            unset($_SESSION['errors']);
            unset($_SESSION['success']);
            unset($_SESSION['inputs']);
    ?>
<?php require 'inc/footer.php'; ?>
 c'est mieux non ?^^

Dwardower

Dwardower Le 20 avril 2016 à 09:21

Oui effectivement, sur ce bonne continuation 😉
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte