Un Update qui ne marche ''plus''

Résolu
warbeast1000 Messages postés 56 Date d'inscription   Statut Membre Dernière intervention   -  
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   -
Salutation ! *encore*

Je reviens vous voir aujourd'hui suite à un petit soucis que je n'arrive pas à régler depuis 2 jours.
Voila comment sa se présente : une page specprod.php (qui contient toutes les caractéristiques de mes produits (marque, modele, ref... etc) qui contient, à ce jour 2 formulaires avec action vers (modifprod.inc.php et le seconde vers promoprod.inc.php)
les voicis :

<?php
         
try{
 
     include('inc/cnx.inc.php');
         
     if(isset($_GET['refP'])){
    $reqs = "SELECT * FROM produits WHERE refP='".$_GET['refP']."'";
    $rereqs = $connexion->query($reqs);
    $prod = $rereqs->fetch();
         
    echo "<form id='modifproduits' action='inc/modifprod.inc.php' method='POST'>";
         
    echo "<input type='hidden' name='idP' value=".$prod['idP']." />";
    echo "<fieldset><label>Référence : </label><input type='text' name='refP' value='".$prod['refP']."' maxlength='13' required [/contents/2121-l-autofocus autofocus] /><br /><br /></fieldset>";
    echo "<fieldset><label>Catégorie : </label><input type='text' name='categD' value='".$prod['categD']."' /><br /><br /></fieldset>";
    echo "<fieldset><label>Marque : </label><input type='text' name='marqueP' value='".$prod['marqueP']."' required /><br /><br /></fieldset>";
    echo "<fieldset><label>Modèle : </label><input type='text' name='modeleP'  value='".$prod['modeleP']."' required /><br /><br /></fieldset>";

?>

    <fieldset><label>Description : </label><[/contents/493-formulaires-html-cours-et-exemples textarea] name='descriptionP' required>"<?php echo htmlspecialchars($prod['descriptionP'],ENT_QUOTES, 'UTF-8'); ?>"</textarea><br /><br /></fieldset>

<?php

    echo "<fieldset><label>Prix : </label><input type='text' name='prixP' value='".$prod['prixP']."' required /><br /><br /></fieldset>";
    echo "<fieldset><label>Quantité : </label>  <input type='number' name='quantiteP' min='1' max='30' value='".$prod['quantiteP']."' required /><br /><br /></fieldset>";
    echo "<button type='submit' id='modifproduits' name='modifproduits'>Valider Modifications</button><br /><br /><br />";
       
    echo "</form>";
           
 }
}
[/contents/554-java-les-exceptions catch] (PDOException $e){
 die("Source : ".$[/contents/698-odbc-open-database-connectivity DSN]." Erreur : ".$e->getMessage());
}
          
?>

<hr /><br />
          
<?php
         
try{
          include('inc/cnx.inc.php');

            
      $reqp = "SELECT idP, promoP FROM produits WHERE refP='".$_GET['refP']."'";
      $rereqp = $connexion->query($reqp);
      $reqpro = $rereqp->fetch();
 
      echo "<form id='promoprod' action='inc/promoprod.inc.php' method='POST'>";

      echo "<input type='hidden' name='idP' value=".$reqpro['idP']." />";
      echo "<fieldset><label>Promotion(%) : </label><input type='text' name='promoP' placeholder='Entrez pourcentage promotion' maxlength='2' required autofocus /><br /><br /><br /></fieldset>";
      echo "<button type='submit' name='promo' id='promoprod' value='Promo'>Valider % promo</button><br /><br />";
           
      echo "</form>";      

}
catch (PDOException $e){
         die("Source : ".$DSN." Erreur : ".$e->getMessage());
}
         
?>


le formulaire de promotion (ainsi que son fichier d'UPDATE, promoprod.inc.php) fonctionne.
Le problème vient de modifprod.inc.php, donc de l'UPDATE du produits (PS: la soumission du formulaire est bonne, je pense donc que cela vient de la requête mais je ne sais pas OU ce trouve l'erreur dans la requête).
fichier modifprod.inc.php


<?php

include('cnx.inc.php');
  
   $reqprodup = $connexion->prepare ("UPDATE produits SET refP=".$_POST['refP'].'",
          categD = "'.$_POST['categD'].'",
          marqueP = "'.$_POST['marqueP'].'",
          modeleP = "'.$_POST['modeleP'].'",
          descriptionP = "'.$_POST['descriptionP'].'",
          prixP = "'.$_POST['prixP'].'",
          quantiteP = "'.$_POST['quantiteP'].'"
   WHERE idP = "'.$_POST['idP'].'"');

$reqprodup->execute();
header('Location:../modifprod.php');

?>




VOILA VOILA, merci à ceux qui m'aideront à resoudre ce problème qui m'empeche de poursuivre la création de mon site ^^

Guillaume
echo est plus rapide que print.
A voir également:

1 réponse

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

1 - Il est préférable de sortir la requête de l'exécution prepare
2 - Il est préférable d'utiliser un ARRAY de param pour les variables de ta requête
3 - (c'est le plus important ! ) on récupère PROPREMENT les variables AVANT de les utiliser. (pour cela on va se servir de la fonction ISSET pour vérifier qu'elles existent bien et de l'écriture TERNAIRE (une sorte de IF/ELSE )).
4 - Tu peux ajouter un bloc try/catch pour intercepter les éventuelles erreurs.

Ce qui donne :
// récupération des variables
$refP = isset($_POST['refP'])?$_POST['refP']:'';
$categD = isset($_POST['categD'])?$_POST['categD']:'';
$marqueP = isset($_POST['marqueP'])?$_POST['marqueP']:'';
$modeleP = isset($_POST['modeleP'])?$_POST['modeleP']:'';
$descriptionP = isset($_POST['descriptionP'])?$_POST['descriptionP']:'';
$prixP = isset($_POST['prixP'])?$_POST['prixP']:'';
$quantiteP = isset($_POST['quantiteP'])?$_POST['quantiteP']:'';
$idP = isset($_POST['idP'])?$_POST['idP']:NULL;

if($idP){
// préparation des requetes
$sql = "UPDATE produits 
        SET refP=:refP
           ,categD = :categD
           ,marqueP = :marqueP
           ,modeleP = :modeleP
           ,descriptionP = :descriptionP
           ,prixP = :prixP
           ,quantiteP = :quantiteP
        WHERE idP = :idP ";

 $params = array( ":refP"=>$refP
                  ,":categD"=>$categD
         ,":marqueP"=>$marqueP
         ,":modeleP"=>$modeleP
         ,":descriptionP"=>$descriptionP
         ,":prixP"=>$prixP
         ,":quantiteP"=>$quantiteP
         ,":idP"=>$idP
         );

 //execution de la requete
 try{        
    $reqprodup = $connexion->prepare ($sql);
   $reqprodup->execute($params);  
  } catch(Exception $e){
    echo 'Erreur dans la requête : <br>' . $e->getMessage();
 }
  
  
}else{
 echo "<br> Erreur : Aucun ID  ! ";
}



Cordialement,
Jordane
0
warbeast1000 Messages postés 56 Date d'inscription   Statut Membre Dernière intervention  
 
Alors, j'ai adapter le code, proprement.
Mais cela ne réalise toujours aucun action sur la bdd :(

Ai-je encore fait une erreur ?

<?php

 include('cnx.inc.php');
 // récupération des variables
 $refP = isset($_POST['refP'])?$_POST['refP']:'';
 $categD = isset($_POST['categD'])?$_POST['categD']:'';
 $marqueP = isset($_POST['marqueP'])?$_POST['marqueP']:'';
 $modeleP = isset($_POST['modeleP'])?$_POST['modeleP']:'';
 $descriptionP = isset($_POST['descriptionP'])?$_POST['descriptionP']:'';
 $prixP = isset($_POST['prixP'])?$_POST['prixP']:'';
 $quantiteP = isset($_POST['quantiteP'])?$_POST['quantiteP']:'';
 $idP = isset($_POST['idP'])?$_POST['idP']:NULL;

 if($idP){


   $requete = "UPDATE produits SET refP = :refP,
             categD = :categD,
             marqueP = :marqueP,
             modeleP = :modeleP,
             descriptionP = :descriptionP,
             prixP = :prixP,
             quantiteP = :quantiteP
            WHERE produits idP = :idP ";
            
   $params = array( ":refP"=>$refP
      ,":categD"=>$categD
      ,":marqueP"=>$marqueP
      ,":modeleP"=>$modeleP
      ,":descriptionP"=>$descriptionP
      ,":prixP"=>$prixP
      ,":quantiteP"=>$quantiteP
      ,":idP"=>$idP
   );
   
  try{
   $reqprodup = $connexion->prepare ($requete);
   $reqprodup->execute($params);
   header('Location:../modifprod.php');
  }
  catch (PDOException $e){
   die("Source : ".$DSN." Erreur : ".$e->getMessage());
  } 
 }
 else{
  echo "<br> Erreur : Aucun ID  ! ";
 }
?>
0
warbeast1000 Messages postés 56 Date d'inscription   Statut Membre Dernière intervention  
 
RESOLU !

l'erreur, dans le code que j'ai adapter, était celle-ci :
 WHERE produits idP = :idP ";


changer en
 WHERE idP = :idP ";


et sa marche !

MERCI ENCORE a jordane45 !

Guillaume
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
dans un premier temps .. ne mets pas la redirection (le header) pour voir si des messages apparaissent.
Tu peux aussi ajouter (avant le TRY) du debogue sur les variables pour voir si elles sont bonnes:
// le temps des tests :
 echo " <br>URL = ".$sql;
 echo "<br><br> Params : <br>";
 print_r($params);

0