Requête qui ne fonctionne pas

MOBIL75 -  
jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   -
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

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
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
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   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