Requête qui ne fonctionne pas

MOBIL75 -  
jeremy.s Messages postés 1248 Statut Membre -
Bonjour, j'ai fait une requête mysql UPDATE mais elle n'a pas l'air de fonctionner.
Comment cela se fait-il ?


$stratos = $bdd->prepare("UPDATE Annonce SET type_transaction=".$_POST['type_transaction'].",   
   type_bien=".$_POST['type_bien'].", departement=".$_POST['departement'].",   
   ville=".$_POST['ville'].", adresse=".$_POST['adresse'].", code_postal=".$_POST['code_postal'].",   
   nbr_piece=".$_POST['nbr_piece'].", nbr_chambre=".$_POST['nbr_chambre'].", nbr_toilettes=".$_POST['nbr_toilettes'].",   
   nbr_sdb=".$_POST['nbr_sdb'].", type_cuisine=".$_POST['type_cuisine'].", etage=".$_POST['etage'].", ascenseur=".$_POST['ascenseur'].",   
   balcon=".$_POST['balcon'].", surface_balcon=".$_POST['surface_balcon'].", terrasse=".$_POST['terrasse'].",   
   surface_terrasse=".$_POST['surface_terrasse'].", piscine=".$_POST['piscine'].", option=".$_POST['option'].",   
   etat_bien=".$_POST['etat_bien'].", surface_carrez=".$_POST['surface_carrez'].", surface_autre=".$_POST['surface_autre'].",   
   dpe=".$_POST['dpe'].", ges=".$_POST['ges'].", prix=".$_POST['prix'].", prix_vendeur=".$_POST['prix_vendeur'].",   
   commission_agence=".$_POST['commission_agence'].", ref_annonce=".$_POST['ref_annonce'].",   
   description=".$_POST['description'].", exclu=".$_POST['exclu']." WHERE ref_annonce = ?");   
                                
$stratos->execute(array($_GET['ref']));   


6 réponses

  1. Utilisateur anonyme
     
    Bonjour

    Ta requête ne fonctionne pas car elle est incorrecte.
    Il te manque des guillemets (simples ou doubles, peu importe) autour des valeurs.
    Tous les " que tu as mis sont des délimiteurs de chaines PHP et ne font donc pas partie de la requête.
    $stratos = $bdd->prepare("UPDATE Annonce SET type_transaction='".$_POST['type_transaction']."',... 
    Mais il y a quelque chose de totalement incohérent (et très dangereux) dans ta façon d'utiliser PDO : pourquoi mets-tu une valeur en paramètre (avec le ?) et tous les autres 'en dur' ?
    0
  2. MOBIL75
     
    Et comme ça c'est bien ?

    
    $stratos = $bdd->query("UPDATE Annonce SET type_transaction='".$_POST['type_transaction']."',
       type_bien='".$_POST['type_bien']."', departement='".$_POST['departement']."',
       ville='".$_POST['ville']."', adresse='".$_POST['adresse']."', code_postal='".$_POST['code_postal']."',
       nbr_piece='".$_POST['nbr_piece']."', nbr_chambre='".$_POST['nbr_chambre']."', nbr_toilettes='".$_POST['nbr_toilettes']."',
       nbr_sdb='".$_POST['nbr_sdb']."', type_cuisine='".$_POST['type_cuisine']."', etage='".$_POST['etage']."', ascenseur='".$_POST['ascenseur']."',
       balcon='".$_POST['balcon']."', surface_balcon='".$_POST['surface_balcon']."', terrasse='".$_POST['terrasse']."',
       surface_terrasse='".$_POST['surface_terrasse']."', piscine='".$_POST['piscine']."', option='".$_POST['option']."',
       etat_bien='".$_POST['etat_bien']."', surface_carrez='".$_POST['surface_carrez']."', surface_autre='".$_POST['surface_autre']."',
       dpe='".$_POST['dpe']."', ges='".$_POST['ges']."', prix='".$_POST['prix']."', prix_vendeur='".$_POST['prix_vendeur']."',
       commission_agence='".$_POST['commission_agence']."', ref_annonce='".$_POST['ref_annonce']."',
       description='".$_POST['description']."', exclu='".$_POST['exclu']."' WHERE ref_annonce='".$_GET['ref']."'");
    
    

    Parce que ça me retourne l'erreur: "Fatal error: Call to a member function fetch() on a non-object in /homez.314/immobilifmi/www/controlpanel/prolog/edit.php on line 88".

    J'ai utilisé la boucle suivante:

    while ($stratos->fetch())
    {
    	echo '@AVANT CONDITION<br /><br />';
    	if (strlen($_POST['code_postal']) != '5'){ echo '<script>alert("Ce code postal n\'est pas valide !");</script>'; }  
    	//else if($_GET['ref'] != $_POST['ref_annonce']){ rename($_GET['ref'], $_POST['ref_annonce']);
    	else
    	{  
    	 echo $stratos->fetch() == true ? '<script>alert("Annonce Modifiée !");</script>' : '<script>alert("Une erreur est survenue !");</script>';  
    	 echo'<meta http-equiv="refresh" content="0; URL=gerer_annonces">';
    	}
    }
    
    
    0
  3. Utilisateur anonyme
     
    Non, ça n'est pas bien.
    Ta requête est une mise à jour, faire un query et un fetch dessus ne veut rien dire.
    Il faut utiliser prepare et execute comme tu le faisais dans ton message initial.
    0
  4. MOBIL75
     
    Je mets quoi dans l'array de execute ?
    J'ai essayé ça et ça ne marche pas.

    
    $stratos = $bdd->prepare("UPDATE Annonce SET type_transaction='".$_POST['type_transaction']."',
       type_bien='".$_POST['type_bien']."', departement='".$_POST['departement']."',
       ville='".$_POST['ville']."', adresse='".$_POST['adresse']."', code_postal='".$_POST['code_postal']."',
       nbr_piece='".$_POST['nbr_piece']."', nbr_chambre='".$_POST['nbr_chambre']."', nbr_toilettes='".$_POST['nbr_toilettes']."',
       nbr_sdb='".$_POST['nbr_sdb']."', type_cuisine='".$_POST['type_cuisine']."', etage='".$_POST['etage']."', ascenseur='".$_POST['ascenseur']."',
       balcon='".$_POST['balcon']."', surface_balcon='".$_POST['surface_balcon']."', terrasse='".$_POST['terrasse']."',
       surface_terrasse='".$_POST['surface_terrasse']."', piscine='".$_POST['piscine']."', option='".$_POST['option']."',
       etat_bien='".$_POST['etat_bien']."', surface_carrez='".$_POST['surface_carrez']."', surface_autre='".$_POST['surface_autre']."',
       dpe='".$_POST['dpe']."', ges='".$_POST['ges']."', prix='".$_POST['prix']."', prix_vendeur='".$_POST['prix_vendeur']."',
       commission_agence='".$_POST['commission_agence']."', ref_annonce='".$_POST['ref_annonce']."',
       description='".$_POST['description']."', exclu='".$_POST['exclu']."' WHERE ref_annonce='".$_GET['ref']."'");
       
    $stratos->execute(array($_GET['ref']));
    	              
    echo '@APRES UPDATE<br /><br />'.$_POST['code_postal'];
    
    while ($modif = $stratos->fetch())
    {
    	echo '@AVANT CONDITION<br /><br />';
    	if (strlen($_POST['code_postal']) != '5'){ echo '<script>alert("Ce code postal n\'est pas valide !");</script>'; }  
    	//else if($_GET['ref'] != $_POST['ref_annonce']){ rename($_GET['ref'], $_POST['ref_annonce']);
    	else
    	{  
    	 echo $modif->fetch() == true ? '<script>alert("Annonce Modifiée !");</script>' : '<script>alert("Une erreur est survenue !");</script>';  
    	 echo'<meta http-equiv="refresh" content="0; URL=gerer_annonces">';
    	}
    }
    
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    Visiblement, tu n'as aucune idée de l'utilisation de PDO.
    Alors dans un premier temps relis la doc.
    Ensuite, essaye avec une requête beaucoup plus courte, disons avec 3 champs au maximum, ce sera beaucoup plus facile à mettre au point.
    Et seulement après, on pourras s'attaquer au problème complet.
    0
  7. jeremy.s Messages postés 1248 Statut Membre 79
     
    Salut !

    Je suis d'accord avec le père, https://www.php.net/manual/fr/pdo.prepare.php
    Renseigne toi et apprend à utiliser l'objet. Faire de l'impro ne mène à rien.
    Regarde les exemples de la doc, ils sont la pour ca !
    1) Tu fais ta requete
    2) Tu fais un prepare
    3) Soit tu fais un bindValue, soit tu execute avec les valeurs
    4) Tu récupères avec un fetch. Mais dans le cas qu'un update, pas besoin de fetch la requete ne renvoie rien.
    0