Requête UPDATE ajoute des entrées

Résolu
Bonjour,

Ma requête ne doit pas être très bonne car au lieu de mettre à jour, elle ajoute une entrée. Je vous remercie de votre aide.

$reponse = $bdd->prepare('UPDATE sites SET nom = '.$nom.' , url = '.$url.' , dateCreation = '.$dateCreation.' , idTypeCms = '.$idTypeCms.' , dateMiseEnLigne = '.$dateMiseEnLigne.' , dateDerniereModif = '.$dateDernireModif.' WHERE sites.id='.$id.''); 


2 réponses

  1. Modérateur
    Bonjour,
    Prends l'habitude de sortir la requête de son exécution.
    Penses aussi à l'encapsuler avec des doubles quotes.

    $sql = "UPDATE sites SET nom = '$nom' 
                            , url = '$url'
                            , dateCreation = '$dateCreation' 
                            , idTypeCms = '$idTypeCms' 
                            , dateMiseEnLigne = '$dateMiseEnLigne' 
                            , dateDerniereModif = '$dateDernireModif' 
                 WHERE sites.id='$id' ";
    $reponse = $bdd->prepare($sql);
    
    


    Cordialement,
    Jordane
    0
    1. Merci mais ça fonctionne toujours pas de cette façon:

      <?php include('connexion.php'); ?>
      <?php include('fonctions.php'); ?>
      <title>Formulaire ajout site</title>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
      <link href="style.css" rel="stylesheet" type="text/css" />
      <?php
      $nom = ( isset($_POST['nom']) )? $_POST['nom'] : ''; 
      $url = ( isset($_POST['url']) )? $_POST['url'] : ''; 
      $dateCreation = ( isset($_POST['dateCreation']) )? $_POST['dateCreation'] : ''; 
      $idTypeCms = ( isset($_POST['idTypeCms']) )? $_POST['idTypeCms'] : ''; 
      $dateMiseEnLigne = ( isset($_POST['dateMiseEnLigne']) )? $_POST['dateMiseEnLigne'] : ''; 
      $dateDerniereModif = ( isset($_POST['dateDerniereModif']) )? $_POST['dateDerniereModif'] : '';
      $nomCms = ( isset($_POST['idTypeCms']) )? $_POST['idTypeCms'] : '';
      
      if (isset($_POST['envoyer'])) {
          
      $req = $bdd->prepare('UPDATE sites SET nom = :nom,  url = :url, dateCreation = :dateCreation, idTypeCms = :idTypeCms, dateMiseEnLigne = :dateMiseEnLigne, dateDerniereModif = :dateDerniereModif WHERE id = :nom');
      $req->execute(array(
      	'nom' => $nom,
      	'url' => $url,
      	'dateCreation' => datefrus($dateCreation),
      	'idTypeCms' => $idTypeCms,
      	'dateMiseEnLigne' => datefrus($dateMiseEnLigne),
      	'dateDerniereModif' => datefrus($dateDerniereModif)
      	)); 
      // On ferme la requête avant d'en faire une autre
      $req->closeCursor();
      //print_r ($req);
      ?>
      <script langage="javascript">
          document.location.href="index.php"
      </script>
      <?php
      }
      else { echo '';
      }
      ?>
      <div align="left" id="fiche">
      			<h3>Formulaire modifier un site </h3>
          <div class="conteneur">
              <form action="modification.php" method="post" enctype="multipart/form-data" name="ajoutSite" id="ajoutSite">
              <p><label for "nom">Nom</label></p>
              <p><input type="text" value="<?php echo $_GET['nom']; ?>" required name="nom" id="nom" /></p>
              <p><label for "URL">URL</label></p>
              <p><input type="url" value="<?php echo $_GET['url']; ?>" name="url" id="url" /></p>
              <p><label for "dateCreation">Date de création</label></p>
              <p><input value="<?php echo $_GET['dateCreation']; ?>" style="width:100px" pattern="\d{1,2}/\d{1,2}/\d{4}" type="date" name="dateCreation" id="dateCreation" /></p>
              <p><label for "typeCms">Type de CMS</label></p>
              
              <!--DEBUT SELECTION DU TYPE DE CMS-->   
      <?php
      try
      {
      $reponse = $bdd->query('SELECT cms.nomCms
      FROM cms');
       ?> 
              <select name="idTypeCms" id="idTypeCms">
              <option selected="selected"><?php echo $_GET['nomCms']; ?></option>
              <?php
              while ($donnees = $reponse->fetch())
              {
              ?>
              <option value="<?php echo $donnees['nomCms']; ?>"><?php echo $donnees['nomCms']; ?></option>
        <?php
        }
       ?>
          </select>
       <?php
          $reponse->closeCursor();
      } 
      catch(Exception $e)
      {
          die('Erreur : '.$e->getMessage());
      }
      ?> 
              <!--FIN SELECTION DU TYPE DE CMS--> 
              <p><label for "dateMiseEnLigne">Date d'ajout</label></p>
              <p><input value="<?php echo $_GET['dateMiseEnLigne']; ?>" style="width:100px" pattern="\d{1,2}/\d{1,2}/\d{4}" type="date" name="dateMiseEnLigne" id="dateMiseEnLigne" /></p>
              <p><label for "dateDerniereModif">Date de modification</label></p>
              <p><input value="<?php echo $_GET['dateDerniereModif']; ?>" style="width:100px" pattern="\d{1,2}/\d{1,2}/\d{4}" type="date" name="dateDerniereModif" id="dateDerniereModif" /></p>
              <p> </p>
              <p><input type="submit" name="envoyer" id="envoyer" value="Envoyer" /></p>       
              </form>
          </div>
          <a href="index.php">Liste des sites</a>
      </div>coc
      
      0
      1. Modérateur
        1 - Tu n'as pas tenu compte de ma remarque concernant la "séparation de la requête" avec son execution
        2 - As tu testé ta requête en direct dans ta BDD ?
        3 - Tes variables sont elles conformes à ce que tu attends ?

        $sql = " UPDATE sites 
                      SET nom = :nom
                        , url = :url
                        , dateCreation = :dateCreation
                        , idTypeCms = :idTypeCms
                        , dateMiseEnLigne = :dateMiseEnLigne
                        , dateDerniereModif = :dateDerniereModif 
                  WHERE id = :nom ";
        $params = array( 'nom' => $nom,
                          'url' => $url,
                          'dateCreation' => datefrus($dateCreation),
                          'idTypeCms' => $idTypeCms,
                          'dateMiseEnLigne' => datefrus($dateMiseEnLigne),
                          'dateDerniereModif' => datefrus($dateDerniereModif)
                         );   
        
        // ----- Le temps des tests : ------------------//
        echo "<br> La requête est : <br>".$sql;
        echo "<br>Params  : <br>";
        print_r($params);
        //-------------------------------------------------------//
        $req = $bdd->prepare($sql);
        $req->execute($params); 
        
        
        0
      2. Merci ça marche bien.
        0