Petit problème sur une requête PHP [Résolu]

Esperance - 11 mai 2017 à 16:43 - Dernière réponse :  esperance
- 15 mai 2017 à 10:16
Bonjour tout le monde !

J'essaie de pouvoir supprimer et modifier ma BDD à partir de mon Back Office mais cela ne fonctionne pas --' et je n'ai pas d'erreur qui s'affiche.

Voici le bout de code qui correspond à mes requêtes :


if(isset($_POST['Sup'])){
$id=$_POST['id'];
$supprimer = $_POST['Sup'];
$supprimer=$bdd->query("DELETE FROM ".$table. " WHERE id_".$table. "=".$id);
} // Ceci est l'action pour supprimer la ligne d'une table



if(isset($_POST['Modif'])){
$id=$_POST['id'];
$modifier = $_POST['Modif'];
$preparation="";
foreach ($_POST as $clef => $value) {
if ($clef !='valider' && $clef != 'Modif' && $clef !='id'){
$preparation=$preparation.$clef.'="'.$value.'",';
}// Ceci est l'action pour modifier la ligne d'une table

}
$preparation = substr($preparation, 0, -1);
$modifier=$bdd->query("UPDATE ".$table. " SET ".$preparation. " WHERE id_".$table. "=".$id);
}


Est-ce que quelqu'un pourrait gentiment m'aider?

Merci à toutes les personnes qui pourront m'aider !
Afficher la suite 

11 réponses

Répondre au sujet
jordane45 19698 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 17 janvier 2018 Dernière intervention - 11 mai 2017 à 18:57
+1
Utile
1
Bonjour,

Déjà .. peux tu nous dire si tu utilises PDO ou mysqli ?

Ensuite, sorts les "requêtes" de leurs exécutions et fais en des echo
par exemple :
 //récupération "propre" des variables
 $id= !empty($_POST['id']) ? $_POST['id'] : NULL;
 
 $sql = "DELETE FROM $table WHERE id_".$table. "='$id'";
 echo "<br>Requete :<br>".$sql;
 $supprimer=$bdd->query($sql);

Cette réponse vous a-t-elle aidé ?  
jordane45 19698 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 17 janvier 2018 Dernière intervention - 12 mai 2017 à 02:13
requête que tu pourras (devras...) tester directement dans ta bdd en passant par phpmyadmin par exemple ...
Commenter la réponse de jordane45
yg_be 4381 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 16 janvier 2018 Dernière intervention - 11 mai 2017 à 20:08
+1
Utile
1
bonsoir, je vois que tu fais (deux fois):
" WHERE id_".$table. "=".$id

je me demande si tu ne devrais pas plutôt faire:
" WHERE ".$table."id_ =".$id

qu'en penses-tu?
peux-tu faire
print_r($_POST);
, et ajouter des
echo 
pour vérifier si tes
if
et tes
foreach 
se comportent comme tu l'imagines?
Cette réponse vous a-t-elle aidé ?  
Bonjour yg_be,

bonsoir, je vois que tu fais (deux fois):
" WHERE id_".$table. "=".$id1

je me demande si tu ne devrais pas plutôt faire:
" WHERE ".$table."id_ =".$id1
qu'en penses-tu?

Je vais essayer la deuxième solution pour voir. J'avoue que la première je l'ai repris d'un exo de cours. Donc j'ai fait comme on m'a montrer.


peux-tu faire print_r($_POST); , et ajouter des echo
pour vérifier si tes if et tes foreach se comportent comme tu l'imagines?

Quand je fais tout ca, tout me semble correcte.
J'ai bien mes lignes qui s'affiche.

Ce que je ne comprends pas c'est que je peux ajouter une ligne mais pas la supprimer n'y la modifier.

Merci de ta réponse.
Commenter la réponse de yg_be
jordane45 19698 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 17 janvier 2018 Dernière intervention - 12 mai 2017 à 11:49
+1
Utile
4
Donc.. si tu fais du PDO .. il faut activer la gestion des erreurs dans la connexion
comme ceci : http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs


try{
$bdd =new PDO('mysql:host=localhost;dbname=ville; charset=utf8', 'root', '');
// Activation des erreurs PDO
 $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
 $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch(PDOException $e) {
    die('Erreur : ' . $e->getMessage());
}


puis au niveau de tes requêtes ajouter des try/catch et passer par les requêtes préparées :
 $id= !empty($_POST['id']) ? $_POST['id'] : NULL;
 
//preparation de la requête et des variables
 $sql = "DELETE FROM $table WHERE id_".$table. "=:id";
 $datas = array(':id'=>$id);

//Execution de la requete
try{
  $requete = $bdd -> prepare($sql) ;
  $requete->execute($datas) ;
}catch(Exception $e){
  // en cas d'erreur :
   echo " Erreur ! ".$e->getMessage();
   echo " Les datas : " ;
  print_r($datas);
}



Quand je fais un echo il m'affiche mon echo et rien de plus même pas une erreur.

NB: Quand tu as, dans ma réponse précédente, fais le ECHO de la requête .. c'était pour
1 - Nous la montrer en la postant sur le forum
2 - Que tu La testes, DIRECTEMENT, dans ta bdd via phpmyadmin.
Cette réponse vous a-t-elle aidé ?  
Bon même avec tes requêtes, ça ne fonctionne pas.
Je ne sais pas pourquoi. :(
jordane45 19698 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 17 janvier 2018 Dernière intervention > Esperance - 12 mai 2017 à 17:24
Montres ton code corrige ainsi que le résultat des echo print demande par yg_be
Merci de ton aide ça fonctionne !

Mon problème est résolut !

Encore merci
jordane45 19698 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 17 janvier 2018 Dernière intervention > esperance - 15 mai 2017 à 09:41
Il serait bien dans ce cas :
- d'indiquer la solution ou le message ayant aidé ( au cas où d'autres visiteurs consulteraient ce message.... le forum étant là pour "partager" )

- de marquer la discussion comme RESOLU (lien se trouvant sous le titre de ta question).

Bonne journée.
Commenter la réponse de jordane45
Esperance - 12 mai 2017 à 11:37
0
Utile
Bonjour jordane45
Déjà .. peux tu nous dire si tu utilises PDO ou mysqli ?

J'ai fait la BDD sur MySQL et mon BDD est connecté de la façon suivante :
$bdd = new PDO('mysql:host=localhost;dbname=ville;port=3306;charset=utf8', 'root', '');

Quand je fais un echo il m'affiche mon echo et rien de plus même pas une erreur.

Merci de ta réponse
Commenter la réponse de Esperance
esperance - 15 mai 2017 à 10:16
0
Utile
Mon problème a été résolut, rappel de mon problème, je n'arrivais pas à supprimer ou modifier une ligne de ma BDD en passant par un Back Office.
j'ai changer plusieurs fois mon code et celui la est le bon.

Erreur que j'ai corrigé le nom de mes tables (erreur bête mais qui change tout, erreur de code pas au bonne endroit, et il me manquait un morceau de code) ces erreurs faisait que je ne pouvais pas avoir de réponse.

En faisant les var_dump et echo j'ai pu trouver mes erreurs et égalment grâce à l'aide se forum.



Voici mon code corriger:

<?php

if(isset($_POST['valider'])){
$_SESSION['table']=$_POST['valider'];


$table = $_SESSION['table'];

if(isset($_POST['Sup'])){
$id=$_POST['id'];
$supprimer = $_POST['Sup'];
try{ $bdd->query("DELETE FROM ".$table. " WHERE id_".$table. "=".$id);
}catch(PDOException $e ){
echo "Error: ".$e;
}
}


if(isset($_POST['Modif'])){
$id=$_POST['id'];
$modifier = $_POST['Modif'];
$preparation="";
foreach ($_POST as $clef => $value) {
if ($clef !='valider' && $clef != 'Modif' && $clef !='id'){
$preparation=$preparation.$clef.'="'.$value.'",';
}

}
$preparation = substr($preparation, 0, -1);
$modifier=$bdd->query("UPDATE ".$table. " SET ".$preparation. " WHERE id_".$table. "=".$id);
}
if(isset($_POST['Envoyer'])){
$preparation="";
$insert="";
foreach ($_POST as $clef => $value) {
if ($clef !='valider' && $clef != 'Modif' && $clef !='id' && $clef !='Envoyer' && $clef !='"_$j_"' ){
$insert=$insert.$clef.",";
$preparation=$preparation."'".$value."',";
}
}
$preparation = substr($preparation, 0, -1);
$insert = substr($insert, 0, -1);
$ajouter=$bdd->query('INSERT INTO '.$table.'('.$insert.') VALUES('.$preparation.')');
}

Commenter la réponse de esperance